blob: 4bba11a31d77da82f11aadc78c675ca6480a02ee [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*===========================================================================
23
24 W L A N _ Q C T _ W D I. C
25
26 OVERVIEW:
27
Jeff Johnsone7245742012-09-05 17:12:55 -070028 This software unit holds the implementation of the WLAN Device Abstraction
Jeff Johnson295189b2012-06-20 16:38:30 -070029 Layer Interface.
30
Jeff Johnsone7245742012-09-05 17:12:55 -070031 The functions externalized by this module are to be called by any upper
Jeff Johnson295189b2012-06-20 16:38:30 -070032 MAC implementation that wishes to use the WLAN Device.
33
34 DEPENDENCIES:
35
36 Are listed for each API below.
37
38
39 Copyright (c) 2008 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
43
44/*===========================================================================
45
46 EDIT HISTORY FOR FILE
47
48
49 This section contains comments describing changes made to the module.
50 Notice that changes are listed in reverse chronological order.
51
52
53 $Header$$DateTime$$Author$
54
55
56 when who what, where, why
57---------- --- --------------------------------------------------------
5810/05/11 hap Adding support for Keep Alive
592010-08-09 lti Created module
60
61===========================================================================*/
62
63/*----------------------------------------------------------------------------
64 * Include Files
65 * -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070066#include "wlan_qct_wdi.h"
67#include "wlan_qct_wdi_i.h"
68#include "wlan_qct_wdi_sta.h"
69#include "wlan_qct_wdi_dp.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070070
Jeff Johnsone7245742012-09-05 17:12:55 -070071#include "wlan_qct_wdi_cts.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070072
73#include "wlan_qct_pal_api.h"
74#include "wlan_qct_pal_type.h"
75#include "wlan_qct_pal_status.h"
76#include "wlan_qct_pal_sync.h"
77#include "wlan_qct_pal_msg.h"
78#include "wlan_qct_pal_trace.h"
79#include "wlan_qct_pal_packet.h"
80
Jeff Johnsone7245742012-09-05 17:12:55 -070081#include "wlan_qct_wdi_dts.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082
83#include "wlan_hal_msg.h"
84
85#ifdef ANI_MANF_DIAG
86#include "pttMsgApi.h"
87#endif /* ANI_MANF_DIAG */
88
89/*===========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070090 WLAN DAL Control Path Internal Data Definitions and Declarations
Jeff Johnson295189b2012-06-20 16:38:30 -070091 ===========================================================================*/
92#define WDI_WCTS_ACTION_TIMEOUT 2000 /* in msec a very high upper limit */
93
Jeff Johnsone7245742012-09-05 17:12:55 -070094#define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
95#define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
96
Jeff Johnson295189b2012-06-20 16:38:30 -070097
98#ifdef FEATURE_WLAN_SCAN_PNO
99#define WDI_PNO_VERSION_MASK 0x8000
100#endif
101
102/* host capability bitmap global */
Madan Mohan Koyyalamudidfd6aa82012-10-18 20:18:43 -0700103static tWlanFeatCaps *gpHostWlanFeatCaps;
Jeff Johnson295189b2012-06-20 16:38:30 -0700104/* FW capability bitmap global */
Madan Mohan Koyyalamudidfd6aa82012-10-18 20:18:43 -0700105static tWlanFeatCaps *gpFwWlanFeatCaps;
Jeff Johnson295189b2012-06-20 16:38:30 -0700106/* array of features supported. Need to add a new feature
107 * and other two places - wlan_hal_msg.h and halMsg.c (FW file)
108 */
109static placeHolderInCapBitmap supportEnabledFeatures[] =
Mohit Khanna4a70d262012-09-11 16:30:12 -0700110 {MCC, P2P, DOT11AC, SLM_SESSIONIZATION, DOT11AC_OPMODE};
Jeff Johnson295189b2012-06-20 16:38:30 -0700111
112/*--------------------------------------------------------------------------
113 WLAN DAL State Machine
114 --------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700115WPT_STATIC const WDI_MainFsmEntryType wdiMainFSM[WDI_MAX_ST] =
Jeff Johnson295189b2012-06-20 16:38:30 -0700116{
117 /*WDI_INIT_ST*/
118 {{
119 WDI_MainStart, /*WDI_START_EVENT*/
120 NULL, /*WDI_STOP_EVENT*/
121 WDI_MainReqBusy, /*WDI_REQUEST_EVENT*/
122 WDI_MainRspInit, /*WDI_RESPONSE_EVENT*/
123 WDI_MainClose, /*WDI_CLOSE_EVENT*/
124 WDI_MainShutdown /*WDI_SHUTDOWN_EVENT*/
125 }},
126
127 /*WDI_STARTED_ST*/
128 {{
129 WDI_MainStartStarted, /*WDI_START_EVENT*/
130 WDI_MainStopStarted, /*WDI_STOP_EVENT*/
131 WDI_MainReqStarted, /*WDI_REQUEST_EVENT*/
132 WDI_MainRsp, /*WDI_RESPONSE_EVENT*/
133 NULL, /*WDI_CLOSE_EVENT*/
134 WDI_MainShutdown /*WDI_SHUTDOWN_EVENT*/
135 }},
136
137 /*WDI_STOPPED_ST*/
138 {{
139 WDI_MainStart, /*WDI_START_EVENT*/
140 WDI_MainStopStopped, /*WDI_STOP_EVENT*/
141 NULL, /*WDI_REQUEST_EVENT*/
142 WDI_MainRsp, /*WDI_RESPONSE_EVENT*/
143 WDI_MainClose, /*WDI_CLOSE_EVENT*/
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -0700144 WDI_MainShutdown /*WDI_SHUTDOWN_EVENT*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700145 }},
146
147 /*WDI_BUSY_ST*/
148 {{
149 WDI_MainStartBusy, /*WDI_START_EVENT*/
150 WDI_MainStopBusy, /*WDI_STOP_EVENT*/
151 WDI_MainReqBusy, /*WDI_REQUEST_EVENT*/
152 WDI_MainRsp, /*WDI_RESPONSE_EVENT*/
153 WDI_MainCloseBusy, /*WDI_CLOSE_EVENT*/
154 WDI_MainShutdownBusy /*WDI_SHUTDOWN_EVENT*/
155 }}
156};
157
Jeff Johnsone7245742012-09-05 17:12:55 -0700158/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -0700159 DAL Request Processing Array - the functions in this table will only be
160 called when the processing of the specific request is allowed by the
Jeff Johnsone7245742012-09-05 17:12:55 -0700161 Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -0700162 ---------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700163WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] =
Jeff Johnson295189b2012-06-20 16:38:30 -0700164{
165 /*INIT*/
166 WDI_ProcessStartReq, /* WDI_START_REQ */
167 WDI_ProcessStopReq, /* WDI_STOP_REQ */
168 WDI_ProcessCloseReq, /* WDI_CLOSE_REQ */
169
170 /*SCAN*/
171 WDI_ProcessInitScanReq, /* WDI_INIT_SCAN_REQ */
172 WDI_ProcessStartScanReq, /* WDI_START_SCAN_REQ */
173 WDI_ProcessEndScanReq, /* WDI_END_SCAN_REQ */
174 WDI_ProcessFinishScanReq, /* WDI_FINISH_SCAN_REQ */
175
176 /*ASSOCIATION*/
177 WDI_ProcessJoinReq, /* WDI_JOIN_REQ */
178 WDI_ProcessConfigBSSReq, /* WDI_CONFIG_BSS_REQ */
179 WDI_ProcessDelBSSReq, /* WDI_DEL_BSS_REQ */
180 WDI_ProcessPostAssocReq, /* WDI_POST_ASSOC_REQ */
181 WDI_ProcessDelSTAReq, /* WDI_DEL_STA_REQ */
182
183 /* Security */
184 WDI_ProcessSetBssKeyReq, /* WDI_SET_BSS_KEY_REQ */
185 WDI_ProcessRemoveBssKeyReq, /* WDI_RMV_BSS_KEY_REQ */
186 WDI_ProcessSetStaKeyReq, /* WDI_SET_STA_KEY_REQ */
187 WDI_ProcessRemoveStaKeyReq, /* WDI_RMV_BSS_KEY_REQ */
188
189 /* QoS and BA APIs */
190 WDI_ProcessAddTSpecReq, /* WDI_ADD_TS_REQ */
191 WDI_ProcessDelTSpecReq, /* WDI_DEL_TS_REQ */
192 WDI_ProcessUpdateEDCAParamsReq, /* WDI_UPD_EDCA_PRMS_REQ */
193 WDI_ProcessAddBASessionReq, /* WDI_ADD_BA_SESSION_REQ */
194 WDI_ProcessDelBAReq, /* WDI_DEL_BA_REQ */
195
196 /* Miscellaneous Control APIs */
197 WDI_ProcessChannelSwitchReq, /* WDI_CH_SWITCH_REQ */
198 WDI_ProcessConfigStaReq, /* WDI_CONFIG_STA_REQ */
199 WDI_ProcessSetLinkStateReq, /* WDI_SET_LINK_ST_REQ */
200 WDI_ProcessGetStatsReq, /* WDI_GET_STATS_REQ */
201 WDI_ProcessUpdateCfgReq, /* WDI_UPDATE_CFG_REQ */
202
203 /*BA APIs*/
204 WDI_ProcessAddBAReq, /* WDI_ADD_BA_REQ */
205 WDI_ProcessTriggerBAReq, /* WDI_TRIGGER_BA_REQ */
206
207 /*Beacon processing APIs*/
208 WDI_ProcessUpdateBeaconParamsReq, /* WDI_UPD_BCON_PRMS_REQ */
209 WDI_ProcessSendBeaconParamsReq, /* WDI_SND_BCON_REQ */
210
211 WDI_ProcessUpdateProbeRspTemplateReq, /* WDI_UPD_PROBE_RSP_TEMPLATE_REQ */
212 WDI_ProcessSetStaBcastKeyReq, /* WDI_SET_STA_BCAST_KEY_REQ */
213 WDI_ProcessRemoveStaBcastKeyReq, /* WDI_RMV_STA_BCAST_KEY_REQ */
214 WDI_ProcessSetMaxTxPowerReq, /*WDI_SET_MAX_TX_POWER_REQ*/
215#ifdef WLAN_FEATURE_P2P
216 WDI_ProcessP2PGONOAReq, /* WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ */
217#else
218 NULL,
219#endif
220 /* PowerSave APIs */
221 WDI_ProcessEnterImpsReq, /* WDI_ENTER_IMPS_REQ */
222 WDI_ProcessExitImpsReq, /* WDI_EXIT_IMPS_REQ */
223 WDI_ProcessEnterBmpsReq, /* WDI_ENTER_BMPS_REQ */
224 WDI_ProcessExitBmpsReq, /* WDI_EXIT_BMPS_REQ */
225 WDI_ProcessEnterUapsdReq, /* WDI_ENTER_UAPSD_REQ */
226 WDI_ProcessExitUapsdReq, /* WDI_EXIT_UAPSD_REQ */
227 WDI_ProcessSetUapsdAcParamsReq, /* WDI_SET_UAPSD_PARAM_REQ */
228 WDI_ProcessUpdateUapsdParamsReq, /* WDI_UPDATE_UAPSD_PARAM_REQ */
229 WDI_ProcessConfigureRxpFilterReq, /* WDI_CONFIGURE_RXP_FILTER_REQ */
230 WDI_ProcessSetBeaconFilterReq, /* WDI_SET_BEACON_FILTER_REQ */
231 WDI_ProcessRemBeaconFilterReq, /* WDI_REM_BEACON_FILTER_REQ */
232 WDI_ProcessSetRSSIThresholdsReq, /* WDI_SET_RSSI_THRESHOLDS_REQ */
233 WDI_ProcessHostOffloadReq, /* WDI_HOST_OFFLOAD_REQ */
234 WDI_ProcessWowlAddBcPtrnReq, /* WDI_WOWL_ADD_BC_PTRN_REQ */
235 WDI_ProcessWowlDelBcPtrnReq, /* WDI_WOWL_DEL_BC_PTRN_REQ */
236 WDI_ProcessWowlEnterReq, /* WDI_WOWL_ENTER_REQ */
237 WDI_ProcessWowlExitReq, /* WDI_WOWL_EXIT_REQ */
238 WDI_ProcessConfigureAppsCpuWakeupStateReq, /* WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ */
239 /*NV Download APIs*/
240 WDI_ProcessNvDownloadReq, /* WDI_NV_DOWNLOAD_REQ*/
241 WDI_ProcessFlushAcReq, /* WDI_FLUSH_AC_REQ */
242 WDI_ProcessBtAmpEventReq, /* WDI_BTAMP_EVENT_REQ */
243#ifdef WLAN_FEATURE_VOWIFI_11R
244 WDI_ProcessAggrAddTSpecReq, /* WDI_AGGR_ADD_TS_REQ */
245#else
246 NULL,
247#endif /* WLAN_FEATURE_VOWIFI_11R */
248 WDI_ProcessAddSTASelfReq, /* WDI_ADD_STA_SELF_REQ */
249 WDI_ProcessDelSTASelfReq, /* WDI DEL STA SELF REQ */
250#ifdef ANI_MANF_DIAG
251 WDI_ProcessFTMCommandReq, /* WDI_FTM_CMD_REQ */
252#else
253 NULL,
254#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -0700255
256#ifdef FEATURE_OEM_DATA_SUPPORT
257 WDI_ProcessStartOemDataReq, /*WDI_START_OEM_DATA_REQ*/
258#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700259 NULL,
Jeff Johnsone7245742012-09-05 17:12:55 -0700260#endif /*FEATURE_OEM_DATA_SUPPORT*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 WDI_ProcessHostResumeReq, /*WDI_HOST_RESUME_REQ*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700262
263 WDI_ProcessKeepAliveReq, /* WDI_KEEP_ALIVE_REQ */
Jeff Johnson295189b2012-06-20 16:38:30 -0700264
265#ifdef FEATURE_WLAN_SCAN_PNO
266 WDI_ProcessSetPreferredNetworkReq, /* WDI_SET_PREF_NETWORK_REQ */
267 WDI_ProcessSetRssiFilterReq, /* WDI_SET_RSSI_FILTER_REQ */
268 WDI_ProcessUpdateScanParamsReq, /* WDI_UPDATE_SCAN_PARAMS_REQ */
269#else
270 NULL,
271 NULL,
272 NULL,
273#endif /* FEATURE_WLAN_SCAN_PNO */
274
275 WDI_ProcessSetTxPerTrackingReq, /* WDI_SET_TX_PER_TRACKING_REQ */
Jeff Johnsone7245742012-09-05 17:12:55 -0700276
Jeff Johnson295189b2012-06-20 16:38:30 -0700277#ifdef WLAN_FEATURE_PACKET_FILTERING
278 /* WDI_8023_MULTICAST_LIST_REQ */
Jeff Johnsone7245742012-09-05 17:12:55 -0700279 WDI_Process8023MulticastListReq,
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 /* WDI_RECEIVE_FILTER_SET_FILTER_REQ */
Jeff Johnsone7245742012-09-05 17:12:55 -0700281 WDI_ProcessReceiveFilterSetFilterReq,
Jeff Johnson295189b2012-06-20 16:38:30 -0700282 /* WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ */
Jeff Johnsone7245742012-09-05 17:12:55 -0700283 WDI_ProcessFilterMatchCountReq,
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 /* WDI_RECEIVE_FILTER_CLEAR_FILTER_REQ */
Jeff Johnsone7245742012-09-05 17:12:55 -0700285 WDI_ProcessReceiveFilterClearFilterReq,
Jeff Johnson295189b2012-06-20 16:38:30 -0700286#else
287 NULL,
288 NULL,
289 NULL,
290 NULL,
291#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnsone7245742012-09-05 17:12:55 -0700292 WDI_ProcessInitScanReq, /* WDI_INIT_SCAN_CON_REQ */
Jeff Johnson295189b2012-06-20 16:38:30 -0700293 WDI_ProcessHALDumpCmdReq, /*WDI_HAL_DUMP_CMD_REQ */
294 WDI_ProcessShutdownReq, /* WDI_SHUTDOWN_REQ */
295
296 WDI_ProcessSetPowerParamsReq, /*WDI_SET_POWER_PARAMS_REQ*/
297#ifdef FEATURE_WLAN_CCX
298 WDI_ProcessTSMStatsReq, /* WDI_TSM_STATS_REQ */
299#else
300 NULL,
301#endif
302
303#ifdef WLAN_FEATURE_GTK_OFFLOAD
304 WDI_ProcessGTKOffloadReq, /* WDI_GTK_OFFLOAD_REQ */
305 WDI_ProcessGTKOffloadGetInfoReq, /* WDI_GTK_OFFLOAD_GETINFO_REQ */
306#else
307 NULL,
308 NULL,
309#endif // WLAN_FEATURE_GTK_OFFLOAD
310
311 WDI_ProcessSetTmLevelReq, /*WDI_SET_TM_LEVEL_REQ*/
312 WDI_ProcessFeatureCapsExchangeReq, /* WDI_FEATURE_CAPS_EXCHANGE_REQ */
Mohit Khanna4a70d262012-09-11 16:30:12 -0700313#ifdef WLAN_FEATURE_11AC
314 WDI_ProcessUpdateVHTOpModeReq, /* WDI_UPDATE_VHT_OP_MODE_REQ */
315#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 /*-------------------------------------------------------------------------
317 Indications
318 -------------------------------------------------------------------------*/
319 WDI_ProcessHostSuspendInd, /* WDI_HOST_SUSPEND_IND*/
320};
321
322
Jeff Johnsone7245742012-09-05 17:12:55 -0700323/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 DAL Request Processing Array - the functions in this table will only be
325 called when the processing of the specific request is allowed by the
Jeff Johnsone7245742012-09-05 17:12:55 -0700326 Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 ---------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700328WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] =
Jeff Johnson295189b2012-06-20 16:38:30 -0700329{
330 /*INIT*/
331 WDI_ProcessStartRsp, /* WDI_START_RESP */
332 WDI_ProcessStopRsp, /* WDI_STOP_RESP */
333 WDI_ProcessCloseRsp, /* WDI_CLOSE_RESP */
334
335 /*SCAN*/
336 WDI_ProcessInitScanRsp, /* WDI_INIT_SCAN_RESP */
337 WDI_ProcessStartScanRsp, /* WDI_START_SCAN_RESP */
338 WDI_ProcessEndScanRsp, /* WDI_END_SCAN_RESP */
339 WDI_ProcessFinishScanRsp, /* WDI_FINISH_SCAN_RESP */
340
341 /* ASSOCIATION*/
342 WDI_ProcessJoinRsp, /* WDI_JOIN_RESP */
343 WDI_ProcessConfigBSSRsp, /* WDI_CONFIG_BSS_RESP */
344 WDI_ProcessDelBSSRsp, /* WDI_DEL_BSS_RESP */
345 WDI_ProcessPostAssocRsp, /* WDI_POST_ASSOC_RESP */
346 WDI_ProcessDelSTARsp, /* WDI_DEL_STA_RESP */
347
348 /* Security */
349 WDI_ProcessSetBssKeyRsp, /* WDI_SET_BSS_KEY_RESP */
350 WDI_ProcessRemoveBssKeyRsp, /* WDI_RMV_BSS_KEY_RESP */
351 WDI_ProcessSetStaKeyRsp, /* WDI_SET_STA_KEY_RESP */
352 WDI_ProcessRemoveStaKeyRsp, /* WDI_RMV_BSS_KEY_RESP */
353
354 /* QoS and BA APIs */
355 WDI_ProcessAddTSpecRsp, /* WDI_ADD_TS_RESP */
356 WDI_ProcessDelTSpecRsp, /* WDI_DEL_TS_RESP */
357 WDI_ProcessUpdateEDCAParamsRsp, /* WDI_UPD_EDCA_PRMS_RESP */
358 WDI_ProcessAddBASessionRsp, /* WDI_ADD_BA_SESSION_RESP */
359 WDI_ProcessDelBARsp, /* WDI_DEL_BA_RESP */
360
361 /* Miscellaneous Control APIs */
362 WDI_ProcessChannelSwitchRsp, /* WDI_CH_SWITCH_RESP */
363 WDI_ProcessConfigStaRsp, /* WDI_CONFIG_STA_RESP */
364 WDI_ProcessSetLinkStateRsp, /* WDI_SET_LINK_ST_RESP */
365 WDI_ProcessGetStatsRsp, /* WDI_GET_STATS_RESP */
366 WDI_ProcessUpdateCfgRsp, /* WDI_UPDATE_CFG_RESP */
367
368 /* BA APIs*/
369 WDI_ProcessAddBARsp, /* WDI_ADD_BA_RESP */
370 WDI_ProcessTriggerBARsp, /* WDI_TRIGGER_BA_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700371
Jeff Johnson295189b2012-06-20 16:38:30 -0700372 /* IBSS APIs*/
373 WDI_ProcessUpdateBeaconParamsRsp, /* WDI_UPD_BCON_PRMS_RSP */
374 WDI_ProcessSendBeaconParamsRsp, /* WDI_SND_BCON_RSP */
375
376 /*Soft AP APIs*/
377 WDI_ProcessUpdateProbeRspTemplateRsp,/*WDI_UPD_PROBE_RSP_TEMPLATE_RESP */
378 WDI_ProcessSetStaBcastKeyRsp, /*WDI_SET_STA_BCAST_KEY_RESP */
379 WDI_ProcessRemoveStaBcastKeyRsp, /*WDI_RMV_STA_BCAST_KEY_RESP */
380 WDI_ProcessSetMaxTxPowerRsp, /*WDI_SET_MAX_TX_POWER_RESP */
381
382 /* PowerSave APIs */
383 WDI_ProcessEnterImpsRsp, /* WDI_ENTER_IMPS_RESP */
384 WDI_ProcessExitImpsRsp, /* WDI_EXIT_IMPS_RESP */
385 WDI_ProcessEnterBmpsRsp, /* WDI_ENTER_BMPS_RESP */
386 WDI_ProcessExitBmpsRsp, /* WDI_EXIT_BMPS_RESP */
387 WDI_ProcessEnterUapsdRsp, /* WDI_ENTER_UAPSD_RESP */
388 WDI_ProcessExitUapsdRsp, /* WDI_EXIT_UAPSD_RESP */
389 WDI_ProcessSetUapsdAcParamsRsp, /* WDI_SET_UAPSD_PARAM_RESP */
390 WDI_ProcessUpdateUapsdParamsRsp, /* WDI_UPDATE_UAPSD_PARAM_RESP */
391 WDI_ProcessConfigureRxpFilterRsp,/* WDI_CONFIGURE_RXP_FILTER_RESP */
392 WDI_ProcessSetBeaconFilterRsp, /* WDI_SET_BEACON_FILTER_RESP */
393 WDI_ProcessRemBeaconFilterRsp, /* WDI_REM_BEACON_FILTER_RESP */
394 WDI_ProcessSetRSSIThresoldsRsp, /* WDI_SET_RSSI_THRESHOLDS_RESP */
395 WDI_ProcessHostOffloadRsp, /* WDI_HOST_OFFLOAD_RESP */
396 WDI_ProcessWowlAddBcPtrnRsp, /* WDI_WOWL_ADD_BC_PTRN_RESP */
397 WDI_ProcessWowlDelBcPtrnRsp, /* WDI_WOWL_DEL_BC_PTRN_RESP */
398 WDI_ProcessWowlEnterRsp, /* WDI_WOWL_ENTER_RESP */
399 WDI_ProcessWowlExitRsp, /* WDI_WOWL_EXIT_RESP */
400 WDI_ProcessConfigureAppsCpuWakeupStateRsp, /* WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700401
Jeff Johnson295189b2012-06-20 16:38:30 -0700402
403 WDI_ProcessNvDownloadRsp, /* WDI_NV_DOWNLOAD_RESP*/
404
405 WDI_ProcessFlushAcRsp, /* WDI_FLUSH_AC_RESP */
406 WDI_ProcessBtAmpEventRsp, /* WDI_BTAMP_EVENT_RESP */
407#ifdef WLAN_FEATURE_VOWIFI_11R
408 WDI_ProcessAggrAddTSpecRsp, /* WDI_AGGR_ADD_TS_RESP */
409#else
410 NULL,
411#endif /* WLAN_FEATURE_VOWIFI_11R */
412 WDI_ProcessAddSTASelfRsp, /* WDI_ADD_STA_SELF_RESP */
413 WDI_ProcessDelSTASelfRsp, /* WDI_DEL_STA_SELF_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700414#ifdef FEATURE_OEM_DATA_SUPPORT
415 WDI_ProcessStartOemDataRsp, /*WDI_START_OEM_DATA_RESP*/
416#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 NULL,
Jeff Johnsone7245742012-09-05 17:12:55 -0700418#endif /*FEATURE_OEM_DATA_SUPPORT*/
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 WDI_ProcessHostResumeRsp, /*WDI_HOST_RESUME_RESP*/
420
421#ifdef WLAN_FEATURE_P2P
422 WDI_ProcessP2PGONOARsp, /*WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP */
423#else
424 NULL,
425#endif
426
427#ifdef ANI_MANF_DIAG
428 WDI_ProcessFTMCommandRsp, /* WDI_FTM_CMD_RESP */
429#else
430 NULL,
431#endif /* ANI_MANF_DIAG */
432
Jeff Johnsone7245742012-09-05 17:12:55 -0700433 WDI_ProcessKeepAliveRsp, /* WDI_KEEP_ALIVE_RESP */
434
Jeff Johnson295189b2012-06-20 16:38:30 -0700435#ifdef FEATURE_WLAN_SCAN_PNO
436 WDI_ProcessSetPreferredNetworkRsp, /* WDI_SET_PREF_NETWORK_RESP */
437 WDI_ProcessSetRssiFilterRsp, /* WDI_SET_RSSI_FILTER_RESP */
438 WDI_ProcessUpdateScanParamsRsp, /* WDI_UPDATE_SCAN_PARAMS_RESP */
439#else
440 NULL,
441 NULL,
442 NULL,
443#endif // FEATURE_WLAN_SCAN_PNO
444
445 WDI_ProcessSetTxPerTrackingRsp, /* WDI_SET_TX_PER_TRACKING_RESP */
446
447 /*---------------------------------------------------------------------
448 Indications
449 ---------------------------------------------------------------------*/
450#ifdef WLAN_FEATURE_PACKET_FILTERING
451 /* WDI_8023_MULTICAST_LIST_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700452 WDI_Process8023MulticastListRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 /* WDI_RECEIVE_FILTER_SET_FILTER_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700454 WDI_ProcessReceiveFilterSetFilterRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700456 WDI_ProcessFilterMatchCountRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* WDI_RECEIVE_FILTER_CLEAR_FILTER_RESP */
Jeff Johnsone7245742012-09-05 17:12:55 -0700458 WDI_ProcessReceiveFilterClearFilterRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -0700459#else
460 NULL,
461 NULL,
462 NULL,
463 NULL,
464#endif // WLAN_FEATURE_PACKET_FILTERING
465
466 WDI_ProcessHALDumpCmdRsp, /* WDI_HAL_DUMP_CMD_RESP */
467 WDI_ProcessShutdownRsp, /* WDI_SHUTDOWN_RESP */
468
469 WDI_ProcessSetPowerParamsRsp, /*WDI_SET_POWER_PARAMS_RESP*/
470#ifdef FEATURE_WLAN_CCX
471 WDI_ProcessTsmStatsRsp, /* WDI_TSM_STATS_RESP */
472#else
473 NULL,
474#endif
475
476#ifdef WLAN_FEATURE_GTK_OFFLOAD
Jeff Johnsone7245742012-09-05 17:12:55 -0700477 WDI_ProcessGtkOffloadRsp, /* WDI_GTK_OFFLOAD_RESP */
478 WDI_ProcessGTKOffloadGetInfoRsp, /* WDI_GTK_OFFLOAD_GETINFO_RESP */
Jeff Johnson295189b2012-06-20 16:38:30 -0700479#else
480 NULL,
481 NULL,
482#endif // WLAN_FEATURE_GTK_OFFLOAD
Jeff Johnsone7245742012-09-05 17:12:55 -0700483 WDI_ProcessSetTmLevelRsp, /* WDI_SET_TM_LEVEL_RESP */
484 WDI_ProcessFeatureCapsExchangeRsp, /* WDI_FEATURE_CAPS_EXCHANGE_RESP */
Mohit Khanna4a70d262012-09-11 16:30:12 -0700485#ifdef WLAN_FEATURE_11AC
486 WDI_ProcessUpdateVHTOpModeRsp, /* WDI_UPDATE_VHT_OP_MODE_RESP */
487#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700488
489 /*---------------------------------------------------------------------
490 Indications
491 ---------------------------------------------------------------------*/
492 WDI_ProcessLowRSSIInd, /* Just threshold crossing not really low WDI_HAL_RSSI_NOTIFICATION_IND */
493 WDI_ProcessMissedBeaconInd, /* WDI_HAL_MISSED_BEACON_IND */
494 WDI_ProcessUnkAddrFrameInd, /* WDI_HAL_UNKNOWN_ADDR2_FRAME_RX_IND */
495 WDI_ProcessMicFailureInd, /* WDI_HAL_MIC_FAILURE_IND */
496 WDI_ProcessFatalErrorInd, /* WDI_HAL_FATAL_ERROR_IND */
497 WDI_ProcessDelSTAInd, /* WDI_HAL_DEL_STA_IND */
498
499 WDI_ProcessCoexInd, /* WDI_HAL_COEX_IND */
500
501 WDI_ProcessTxCompleteInd, /* WDI_HAL_TX_COMPLETE_IND */
502
503#ifdef WLAN_FEATURE_P2P
504 WDI_ProcessP2pNoaAttrInd, /*WDI_HOST_NOA_ATTR_IND*/
505#else
506 NULL,
507#endif
508
509#ifdef FEATURE_WLAN_SCAN_PNO
510 WDI_ProcessPrefNetworkFoundInd, /* WDI_HAL_PREF_NETWORK_FOUND_IND */
511#else
512 NULL,
513#endif // FEATURE_WLAN_SCAN_PNO
514
515#ifdef WLAN_WAKEUP_EVENTS
516 WDI_ProcessWakeReasonInd, /* WDI_WAKE_REASON_IND */
517#else // WLAN_WAKEUP_EVENTS
518 NULL,
519#endif // WLAN_WAKEUP_EVENTS
520
521 WDI_ProcessTxPerHitInd, /* WDI_HAL_TX_PER_HIT_IND */
522};
523
524
Jeff Johnsone7245742012-09-05 17:12:55 -0700525/*---------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 WLAN DAL Global Control Block
527 ---------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700528WDI_ControlBlockType gWDICb;
Jeff Johnson295189b2012-06-20 16:38:30 -0700529static wpt_uint8 gWDIInitialized = eWLAN_PAL_FALSE;
530
Jeff Johnsone7245742012-09-05 17:12:55 -0700531const wpt_uint8 szTransportChName[] = "WLAN_CTRL";
Jeff Johnson295189b2012-06-20 16:38:30 -0700532
533/*Helper routine for retrieving the PAL Context from WDI*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700534WPT_INLINE
Jeff Johnson295189b2012-06-20 16:38:30 -0700535void* WDI_GET_PAL_CTX( void )
536{
Jeff Johnsone7245742012-09-05 17:12:55 -0700537 return gWDICb.pPALContext;
Jeff Johnson295189b2012-06-20 16:38:30 -0700538}/*WDI_GET_PAL_CTX*/
539
Jeff Johnsone7245742012-09-05 17:12:55 -0700540/*============================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 Helper inline converters
542 ============================================================================*/
543/*Convert WDI driver type into HAL driver type*/
544WPT_STATIC WPT_INLINE WDI_Status
545WDI_HAL_2_WDI_STATUS
546(
547 eHalStatus halStatus
548);
549
550/*Convert WDI request type into HAL request type*/
551WPT_STATIC WPT_INLINE tHalHostMsgType
552WDI_2_HAL_REQ_TYPE
553(
554 WDI_RequestEnumType wdiReqType
555);
556
557/*Convert WDI response type into HAL response type*/
558WPT_STATIC WPT_INLINE WDI_ResponseEnumType
559HAL_2_WDI_RSP_TYPE
560(
561 tHalHostMsgType halMsg
562);
563
564/*Convert WDI driver type into HAL driver type*/
565WPT_STATIC WPT_INLINE tDriverType
566WDI_2_HAL_DRV_TYPE
567(
568 WDI_DriverType wdiDriverType
569);
570
571/*Convert WDI stop reason into HAL stop reason*/
572WPT_STATIC WPT_INLINE tHalStopType
573WDI_2_HAL_STOP_REASON
574(
575 WDI_StopType wdiStopType
576);
577
578/*Convert WDI scan mode type into HAL scan mode type*/
579WPT_STATIC WPT_INLINE eHalSysMode
580WDI_2_HAL_SCAN_MODE
581(
582 WDI_ScanMode wdiScanMode
583);
584
585/*Convert WDI sec ch offset into HAL sec ch offset type*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700586WPT_STATIC WPT_INLINE ePhyChanBondState
Jeff Johnson295189b2012-06-20 16:38:30 -0700587WDI_2_HAL_SEC_CH_OFFSET
588(
589 WDI_HTSecondaryChannelOffset wdiSecChOffset
590);
591
592/*Convert WDI BSS type into HAL BSS type*/
593WPT_STATIC WPT_INLINE tSirBssType
594WDI_2_HAL_BSS_TYPE
595(
596 WDI_BssType wdiBSSType
597);
598
599/*Convert WDI NW type into HAL NW type*/
600WPT_STATIC WPT_INLINE tSirNwType
601WDI_2_HAL_NW_TYPE
602(
603 WDI_NwType wdiNWType
604);
605
606/*Convert WDI chanel bonding type into HAL cb type*/
607WPT_STATIC WPT_INLINE ePhyChanBondState
608WDI_2_HAL_CB_STATE
609(
610 WDI_PhyChanBondState wdiCbState
611);
612
613/*Convert WDI chanel bonding type into HAL cb type*/
614WPT_STATIC WPT_INLINE tSirMacHTOperatingMode
615WDI_2_HAL_HT_OPER_MODE
616(
617 WDI_HTOperatingMode wdiHTOperMode
618);
619
620/*Convert WDI mimo PS type into HAL mimo PS type*/
621WPT_STATIC WPT_INLINE tSirMacHTMIMOPowerSaveState
622WDI_2_HAL_MIMO_PS
623(
624 WDI_HTMIMOPowerSaveState wdiHTOperMode
625);
626
627/*Convert WDI ENC type into HAL ENC type*/
628WPT_STATIC WPT_INLINE tAniEdType
629WDI_2_HAL_ENC_TYPE
630(
631 WDI_EncryptType wdiEncType
632);
633
634/*Convert WDI WEP type into HAL WEP type*/
635WPT_STATIC WPT_INLINE tAniWepType
636WDI_2_HAL_WEP_TYPE
637(
638 WDI_WepType wdiWEPType
639);
640
641/*Convert WDI Link State into HAL Link State*/
642WPT_STATIC WPT_INLINE tSirLinkState
643WDI_2_HAL_LINK_STATE
644(
645 WDI_LinkStateType wdiLinkState
646);
647
Jeff Johnsone7245742012-09-05 17:12:55 -0700648/*Translate a STA Context from WDI into HAL*/
649WPT_STATIC WPT_INLINE
Jeff Johnson295189b2012-06-20 16:38:30 -0700650void
651WDI_CopyWDIStaCtxToHALStaCtx
Jeff Johnsone7245742012-09-05 17:12:55 -0700652(
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tConfigStaParams* phalConfigSta,
654 WDI_ConfigStaReqInfoType* pwdiConfigSta
655);
Jeff Johnsone7245742012-09-05 17:12:55 -0700656
657/*Translate a Rate set info from WDI into HAL*/
658WPT_STATIC WPT_INLINE void
Jeff Johnson295189b2012-06-20 16:38:30 -0700659WDI_CopyWDIRateSetToHALRateSet
Jeff Johnsone7245742012-09-05 17:12:55 -0700660(
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 tSirMacRateSet* pHalRateSet,
662 WDI_RateSet* pwdiRateSet
663);
664
665/*Translate an EDCA Parameter Record from WDI into HAL*/
666WPT_STATIC WPT_INLINE void
667WDI_CopyWDIEDCAParamsToHALEDCAParams
Jeff Johnsone7245742012-09-05 17:12:55 -0700668(
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tSirMacEdcaParamRecord* phalEdcaParam,
670 WDI_EdcaParamRecord* pWDIEdcaParam
671);
672
673/*Copy a management frame header from WDI fmt into HAL fmt*/
674WPT_STATIC WPT_INLINE void
675WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr
676(
677 tSirMacMgmtHdr* pmacMgmtHdr,
678 WDI_MacMgmtHdr* pwdiMacMgmtHdr
679);
680
681/*Copy config bss parameters from WDI fmt into HAL fmt*/
682WPT_STATIC WPT_INLINE void
683WDI_CopyWDIConfigBSSToHALConfigBSS
684(
685 tConfigBssParams* phalConfigBSS,
686 WDI_ConfigBSSReqInfoType* pwdiConfigBSS
687);
688
Jeff Johnsone7245742012-09-05 17:12:55 -0700689/*Extract the request CB function and user data from a request structure
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 pointed to by user data */
691WPT_STATIC WPT_INLINE void
692WDI_ExtractRequestCBFromEvent
693(
694 WDI_EventInfoType* pEvent,
Jeff Johnsone7245742012-09-05 17:12:55 -0700695 WDI_ReqStatusCb* ppfnReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 void** ppUserData
697);
698
699wpt_uint8
700WDI_FindEmptySession
Jeff Johnsone7245742012-09-05 17:12:55 -0700701(
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 WDI_ControlBlockType* pWDICtx,
703 WDI_BSSSessionType** ppSession
704);
705
706void
707WDI_AddBcastSTAtoSTATable
708(
709 WDI_ControlBlockType* pWDICtx,
710 WDI_AddStaParams * staParams,
711 wpt_uint16 usBcastStaIdx
712);
713
714WDI_Status WDI_SendNvBlobReq
Jeff Johnsone7245742012-09-05 17:12:55 -0700715(
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 WDI_ControlBlockType* pWDICtx,
717 WDI_EventInfoType* pEventData
718);
719
720void
721WDI_SetPowerStateCb
722(
723 wpt_status status,
724 unsigned int dxePhyAddr,
725 void *pContext
726);
727
728#define CASE_RETURN_STRING( str ) \
729 case ( ( str ) ): return( #str ); break \
730
731/**
732 @brief WDI_getReqMsgString prints the WDI request message in string.
Jeff Johnsone7245742012-09-05 17:12:55 -0700733
734 @param wdiReqMsgId: WDI Message request Id
735
736 @see
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 @return Result of the function call
738*/
739static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId)
740{
741 switch (wdiReqMsgId)
742 {
743 CASE_RETURN_STRING( WDI_START_REQ );
744 CASE_RETURN_STRING( WDI_STOP_REQ );
745 CASE_RETURN_STRING( WDI_CLOSE_REQ );
746 CASE_RETURN_STRING( WDI_INIT_SCAN_REQ );
747 CASE_RETURN_STRING( WDI_START_SCAN_REQ );
748 CASE_RETURN_STRING( WDI_END_SCAN_REQ );
749 CASE_RETURN_STRING( WDI_FINISH_SCAN_REQ );
750 CASE_RETURN_STRING( WDI_JOIN_REQ );
751 CASE_RETURN_STRING( WDI_CONFIG_BSS_REQ );
752 CASE_RETURN_STRING( WDI_DEL_BSS_REQ );
753 CASE_RETURN_STRING( WDI_POST_ASSOC_REQ );
754 CASE_RETURN_STRING( WDI_DEL_STA_REQ );
755 CASE_RETURN_STRING( WDI_SET_BSS_KEY_REQ );
756 CASE_RETURN_STRING( WDI_RMV_BSS_KEY_REQ );
757 CASE_RETURN_STRING( WDI_SET_STA_KEY_REQ );
758 CASE_RETURN_STRING( WDI_RMV_STA_KEY_REQ );
759 CASE_RETURN_STRING( WDI_ADD_TS_REQ );
760 CASE_RETURN_STRING( WDI_DEL_TS_REQ );
761 CASE_RETURN_STRING( WDI_UPD_EDCA_PRMS_REQ );
762 CASE_RETURN_STRING( WDI_ADD_BA_SESSION_REQ );
763 CASE_RETURN_STRING( WDI_DEL_BA_REQ );
764 CASE_RETURN_STRING( WDI_CH_SWITCH_REQ );
765 CASE_RETURN_STRING( WDI_CONFIG_STA_REQ );
766 CASE_RETURN_STRING( WDI_SET_LINK_ST_REQ );
767 CASE_RETURN_STRING( WDI_GET_STATS_REQ );
768 CASE_RETURN_STRING( WDI_UPDATE_CFG_REQ );
769 CASE_RETURN_STRING( WDI_ADD_BA_REQ );
770 CASE_RETURN_STRING( WDI_TRIGGER_BA_REQ );
771 CASE_RETURN_STRING( WDI_UPD_BCON_PRMS_REQ );
772 CASE_RETURN_STRING( WDI_SND_BCON_REQ );
773 CASE_RETURN_STRING( WDI_UPD_PROBE_RSP_TEMPLATE_REQ );
774 CASE_RETURN_STRING( WDI_SET_STA_BCAST_KEY_REQ );
775 CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_REQ );
776 CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_REQ );
777 CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ );
778 CASE_RETURN_STRING( WDI_ENTER_IMPS_REQ );
779 CASE_RETURN_STRING( WDI_EXIT_IMPS_REQ );
780 CASE_RETURN_STRING( WDI_ENTER_BMPS_REQ );
781 CASE_RETURN_STRING( WDI_EXIT_BMPS_REQ );
782 CASE_RETURN_STRING( WDI_ENTER_UAPSD_REQ );
783 CASE_RETURN_STRING( WDI_EXIT_UAPSD_REQ );
784 CASE_RETURN_STRING( WDI_SET_UAPSD_PARAM_REQ );
785 CASE_RETURN_STRING( WDI_UPDATE_UAPSD_PARAM_REQ );
786 CASE_RETURN_STRING( WDI_CONFIGURE_RXP_FILTER_REQ );
787 CASE_RETURN_STRING( WDI_SET_BEACON_FILTER_REQ);
788 CASE_RETURN_STRING( WDI_REM_BEACON_FILTER_REQ );
789 CASE_RETURN_STRING( WDI_SET_RSSI_THRESHOLDS_REQ );
790 CASE_RETURN_STRING( WDI_HOST_OFFLOAD_REQ );
791 CASE_RETURN_STRING( WDI_WOWL_ADD_BC_PTRN_REQ );
792 CASE_RETURN_STRING( WDI_WOWL_DEL_BC_PTRN_REQ );
793 CASE_RETURN_STRING( WDI_WOWL_ENTER_REQ );
794 CASE_RETURN_STRING( WDI_WOWL_EXIT_REQ );
795 CASE_RETURN_STRING( WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ );
796 CASE_RETURN_STRING( WDI_NV_DOWNLOAD_REQ );
797 CASE_RETURN_STRING( WDI_FLUSH_AC_REQ );
798 CASE_RETURN_STRING( WDI_BTAMP_EVENT_REQ );
799 CASE_RETURN_STRING( WDI_AGGR_ADD_TS_REQ );
800 CASE_RETURN_STRING( WDI_ADD_STA_SELF_REQ );
801 CASE_RETURN_STRING( WDI_DEL_STA_SELF_REQ );
802 CASE_RETURN_STRING( WDI_FTM_CMD_REQ );
Jeff Johnsone7245742012-09-05 17:12:55 -0700803 CASE_RETURN_STRING( WDI_START_OEM_DATA_REQ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700804 CASE_RETURN_STRING( WDI_HOST_RESUME_REQ );
805 CASE_RETURN_STRING( WDI_KEEP_ALIVE_REQ);
806 #ifdef FEATURE_WLAN_SCAN_PNO
807 CASE_RETURN_STRING( WDI_SET_PREF_NETWORK_REQ );
808 CASE_RETURN_STRING( WDI_SET_RSSI_FILTER_REQ );
809 CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_REQ );
810 #endif
811 CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_REQ );
812 CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_REQ );
813 CASE_RETURN_STRING( WDI_RECEIVE_FILTER_SET_FILTER_REQ );
814 CASE_RETURN_STRING( WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ );
815 CASE_RETURN_STRING( WDI_RECEIVE_FILTER_CLEAR_FILTER_REQ );
816 CASE_RETURN_STRING( WDI_INIT_SCAN_CON_REQ );
817 CASE_RETURN_STRING( WDI_HAL_DUMP_CMD_REQ );
818 CASE_RETURN_STRING( WDI_SHUTDOWN_REQ );
819 CASE_RETURN_STRING( WDI_SET_POWER_PARAMS_REQ );
820 default:
821 return "Unknown WDI MessageId";
822 }
823}
824
825
826
827/**
828 @brief WDI_getRespMsgString prints the WDI resonse message in string.
Jeff Johnsone7245742012-09-05 17:12:55 -0700829
830 @param wdiRespMsgId: WDI Message response Id
831
832 @see
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 @return Result of the function call
834*/
835static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId)
836{
837 switch (wdiRespMsgId)
838 {
839 CASE_RETURN_STRING( WDI_START_RESP );
840 CASE_RETURN_STRING( WDI_STOP_RESP );
841 CASE_RETURN_STRING( WDI_CLOSE_RESP );
842 CASE_RETURN_STRING( WDI_INIT_SCAN_RESP );
843 CASE_RETURN_STRING( WDI_START_SCAN_RESP );
844 CASE_RETURN_STRING( WDI_END_SCAN_RESP );
845 CASE_RETURN_STRING( WDI_FINISH_SCAN_RESP );
846 CASE_RETURN_STRING( WDI_JOIN_RESP );
847 CASE_RETURN_STRING( WDI_CONFIG_BSS_RESP );
848 CASE_RETURN_STRING( WDI_DEL_BSS_RESP );
849 CASE_RETURN_STRING( WDI_POST_ASSOC_RESP );
850 CASE_RETURN_STRING( WDI_DEL_STA_RESP );
851 CASE_RETURN_STRING( WDI_SET_BSS_KEY_RESP );
852 CASE_RETURN_STRING( WDI_RMV_BSS_KEY_RESP );
853 CASE_RETURN_STRING( WDI_SET_STA_KEY_RESP );
854 CASE_RETURN_STRING( WDI_RMV_STA_KEY_RESP );
855 CASE_RETURN_STRING( WDI_ADD_TS_RESP );
856 CASE_RETURN_STRING( WDI_DEL_TS_RESP );
857 CASE_RETURN_STRING( WDI_UPD_EDCA_PRMS_RESP );
858 CASE_RETURN_STRING( WDI_ADD_BA_SESSION_RESP );
859 CASE_RETURN_STRING( WDI_DEL_BA_RESP );
860 CASE_RETURN_STRING( WDI_CH_SWITCH_RESP );
861 CASE_RETURN_STRING( WDI_CONFIG_STA_RESP );
862 CASE_RETURN_STRING( WDI_SET_LINK_ST_RESP );
863 CASE_RETURN_STRING( WDI_GET_STATS_RESP );
864 CASE_RETURN_STRING( WDI_UPDATE_CFG_RESP );
865 CASE_RETURN_STRING( WDI_ADD_BA_RESP );
866 CASE_RETURN_STRING( WDI_TRIGGER_BA_RESP );
867 CASE_RETURN_STRING( WDI_UPD_BCON_PRMS_RESP );
868 CASE_RETURN_STRING( WDI_SND_BCON_RESP );
869 CASE_RETURN_STRING( WDI_UPD_PROBE_RSP_TEMPLATE_RESP );
870 CASE_RETURN_STRING( WDI_SET_STA_BCAST_KEY_RESP );
871 CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_RESP );
872 CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_RESP );
873 CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP );
874 CASE_RETURN_STRING( WDI_ENTER_IMPS_RESP );
875 CASE_RETURN_STRING( WDI_EXIT_IMPS_RESP );
876 CASE_RETURN_STRING( WDI_ENTER_BMPS_RESP );
877 CASE_RETURN_STRING( WDI_EXIT_BMPS_RESP );
878 CASE_RETURN_STRING( WDI_ENTER_UAPSD_RESP );
879 CASE_RETURN_STRING( WDI_EXIT_UAPSD_RESP );
880 CASE_RETURN_STRING( WDI_SET_UAPSD_PARAM_RESP );
881 CASE_RETURN_STRING( WDI_UPDATE_UAPSD_PARAM_RESP );
882 CASE_RETURN_STRING( WDI_CONFIGURE_RXP_FILTER_RESP );
883 CASE_RETURN_STRING( WDI_SET_BEACON_FILTER_RESP);
884 CASE_RETURN_STRING( WDI_REM_BEACON_FILTER_RESP );
885 CASE_RETURN_STRING( WDI_SET_RSSI_THRESHOLDS_RESP );
886 CASE_RETURN_STRING( WDI_HOST_OFFLOAD_RESP );
887 CASE_RETURN_STRING( WDI_WOWL_ADD_BC_PTRN_RESP );
888 CASE_RETURN_STRING( WDI_WOWL_DEL_BC_PTRN_RESP );
889 CASE_RETURN_STRING( WDI_WOWL_ENTER_RESP );
890 CASE_RETURN_STRING( WDI_WOWL_EXIT_RESP );
891 CASE_RETURN_STRING( WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_RESP );
892 CASE_RETURN_STRING( WDI_NV_DOWNLOAD_RESP );
893 CASE_RETURN_STRING( WDI_FLUSH_AC_RESP );
894 CASE_RETURN_STRING( WDI_BTAMP_EVENT_RESP );
895 CASE_RETURN_STRING( WDI_AGGR_ADD_TS_RESP );
896 CASE_RETURN_STRING( WDI_ADD_STA_SELF_RESP );
897 CASE_RETURN_STRING( WDI_DEL_STA_SELF_RESP );
898 CASE_RETURN_STRING( WDI_FTM_CMD_RESP );
Jeff Johnsone7245742012-09-05 17:12:55 -0700899 CASE_RETURN_STRING( WDI_START_OEM_DATA_RESP );
Jeff Johnson295189b2012-06-20 16:38:30 -0700900 CASE_RETURN_STRING( WDI_HOST_RESUME_RESP );
901 CASE_RETURN_STRING( WDI_KEEP_ALIVE_RESP);
902 #ifdef FEATURE_WLAN_SCAN_PNO
903 CASE_RETURN_STRING( WDI_SET_PREF_NETWORK_RESP );
904 CASE_RETURN_STRING( WDI_SET_RSSI_FILTER_RESP );
905 CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_RESP );
906 #endif
907 CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_RESP );
908 CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_RESP );
909 CASE_RETURN_STRING( WDI_RECEIVE_FILTER_SET_FILTER_RESP );
910 CASE_RETURN_STRING( WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_RESP );
911 CASE_RETURN_STRING( WDI_RECEIVE_FILTER_CLEAR_FILTER_RESP );
912 CASE_RETURN_STRING( WDI_HAL_DUMP_CMD_RESP );
913 CASE_RETURN_STRING( WDI_SHUTDOWN_RESP );
914 CASE_RETURN_STRING( WDI_SET_POWER_PARAMS_RESP );
915 default:
916 return "Unknown WDI MessageId";
917 }
918}
919
920/**
921 @brief WDI_getHALStatusMsgString prints the HAL status in string.
Jeff Johnsone7245742012-09-05 17:12:55 -0700922
923 @param halStatusId: HAL status Id
924
925 @see
Jeff Johnson295189b2012-06-20 16:38:30 -0700926 @return Result of the function call
927*/
928static char *WDI_getHALStatusMsgString(wpt_uint16 halStatusId)
929{
930 switch (halStatusId)
931 {
932 CASE_RETURN_STRING( eHAL_STATUS_SUCCESS );
933 CASE_RETURN_STRING( PAL_STATUS_INVAL );
934 CASE_RETURN_STRING( PAL_STATUS_ALREADY );
935 CASE_RETURN_STRING( PAL_STATUS_EMPTY );
936 CASE_RETURN_STRING( PAL_STATUS_FAILURE );
937 CASE_RETURN_STRING( eHAL_STATUS_FAILURE );
938 CASE_RETURN_STRING( eHAL_STATUS_INVALID_PARAMETER );
939 CASE_RETURN_STRING( eHAL_STATUS_INVALID_STAIDX );
940 CASE_RETURN_STRING( eHAL_STATUS_DPU_DESCRIPTOR_TABLE_FULL );
941 CASE_RETURN_STRING( eHAL_STATUS_NO_INTERRUPTS );
942 CASE_RETURN_STRING( eHAL_STATUS_INTERRUPT_PRESENT );
943 CASE_RETURN_STRING( eHAL_STATUS_STA_TABLE_FULL );
944 CASE_RETURN_STRING( eHAL_STATUS_DUPLICATE_STA );
945 CASE_RETURN_STRING( eHAL_STATUS_BSSID_INVALID );
946 CASE_RETURN_STRING( eHAL_STATUS_STA_INVALID );
947 CASE_RETURN_STRING( eHAL_STATUS_DUPLICATE_BSSID );
948 CASE_RETURN_STRING( eHAL_STATUS_INVALID_BSSIDX );
949 CASE_RETURN_STRING( eHAL_STATUS_BSSID_TABLE_FULL );
950 CASE_RETURN_STRING( eHAL_STATUS_INVALID_SIGNATURE );
951 CASE_RETURN_STRING( eHAL_STATUS_INVALID_KEYID );
952 CASE_RETURN_STRING( eHAL_STATUS_SET_CHAN_ALREADY_ON_REQUESTED_CHAN );
953 CASE_RETURN_STRING( eHAL_STATUS_UMA_DESCRIPTOR_TABLE_FULL );
954 CASE_RETURN_STRING( eHAL_STATUS_DPU_MICKEY_TABLE_FULL );
955 CASE_RETURN_STRING( eHAL_STATUS_BA_RX_BUFFERS_FULL );
956 CASE_RETURN_STRING( eHAL_STATUS_BA_RX_MAX_SESSIONS_REACHED );
957 CASE_RETURN_STRING( eHAL_STATUS_BA_RX_INVALID_SESSION_ID );
958 CASE_RETURN_STRING( eHAL_STATUS_TIMER_START_FAILED );
959 CASE_RETURN_STRING( eHAL_STATUS_TIMER_STOP_FAILED );
960 CASE_RETURN_STRING( eHAL_STATUS_FAILED_ALLOC );
961 CASE_RETURN_STRING( eHAL_STATUS_NOTIFY_BSS_FAIL );
962 CASE_RETURN_STRING( eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO );
963 CASE_RETURN_STRING( eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO );
964 CASE_RETURN_STRING( eHAL_STATUS_FW_SEND_MSG_FAILED );
965 default:
966 return "Unknown HAL status";
967 }
968}
969
Jeff Johnsone7245742012-09-05 17:12:55 -0700970/*========================================================================
971
Jeff Johnson295189b2012-06-20 16:38:30 -0700972 INITIALIZATION APIs
Jeff Johnsone7245742012-09-05 17:12:55 -0700973
Jeff Johnson295189b2012-06-20 16:38:30 -0700974==========================================================================*/
975
976/**
977 @brief WDI_Init is used to initialize the DAL.
Jeff Johnsone7245742012-09-05 17:12:55 -0700978
Jeff Johnson295189b2012-06-20 16:38:30 -0700979 DAL will allocate all the resources it needs. It will open PAL, it will also
980 open both the data and the control transport which in their turn will open
Jeff Johnsone7245742012-09-05 17:12:55 -0700981 DXE/SMD or any other drivers that they need.
982
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 @param pOSContext: pointer to the OS context provided by the UMAC
984 will be passed on to PAL on Open
985 ppWDIGlobalCtx: output pointer of Global Context
986 pWdiDevCapability: output pointer of device capability
987
988 @return Result of the function call
989*/
Jeff Johnsone7245742012-09-05 17:12:55 -0700990WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -0700991WDI_Init
Jeff Johnsone7245742012-09-05 17:12:55 -0700992(
Jeff Johnson295189b2012-06-20 16:38:30 -0700993 void* pOSContext,
994 void** ppWDIGlobalCtx,
995 WDI_DeviceCapabilityType* pWdiDevCapability,
996 unsigned int driverType
997)
998{
999 wpt_uint8 i;
Jeff Johnsone7245742012-09-05 17:12:55 -07001000 wpt_status wptStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 WDI_Status wdiStatus;
Jeff Johnsone7245742012-09-05 17:12:55 -07001002 WCTS_TransportCBsType wctsCBs;
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
1004
1005 /*---------------------------------------------------------------------
1006 Sanity check
1007 ---------------------------------------------------------------------*/
1008 if (( NULL == ppWDIGlobalCtx ) || ( NULL == pWdiDevCapability ))
1009 {
1010 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1011 "Invalid input parameters in WDI_Init");
1012
Jeff Johnsone7245742012-09-05 17:12:55 -07001013 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 }
1015
1016 /*---------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001017 Check to see if the module has already been initialized or not
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 ---------------------------------------------------------------------*/
1019 if ( eWLAN_PAL_FALSE != gWDIInitialized )
1020 {
1021 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1022 "WDI module already initialized - return");
1023
Jeff Johnsone7245742012-09-05 17:12:55 -07001024 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 }
1026
1027 /*Module is now initialized - this flag is to ensure the fact that multiple
1028 init will not happen on WDI
1029 !! - potential race does exist because read and set are not atomic,
1030 however an atomic operation would be closely here - reanalyze if necessary*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001031 gWDIInitialized = eWLAN_PAL_TRUE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001032
1033 /*Setup the control block */
1034 WDI_CleanCB(&gWDICb);
Jeff Johnsone7245742012-09-05 17:12:55 -07001035 gWDICb.pOSContext = pOSContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036
1037 /*Setup the STA Table*/
1038 wdiStatus = WDI_STATableInit(&gWDICb);
1039 if ( WDI_STATUS_SUCCESS != wdiStatus )
1040 {
1041 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1042 "%s: Failure while initializing STA Table, status %d",
1043 __FUNCTION__, wdiStatus);
1044 goto fail_STATableInit;
1045 }
1046
1047 /*------------------------------------------------------------------------
1048 Open the PAL
1049 ------------------------------------------------------------------------*/
1050 wptStatus = wpalOpen(&gWDICb.pPALContext, pOSContext);
1051 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1052 {
1053 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1054 "%s: Failed to open PAL, status %d",
1055 __FUNCTION__, wptStatus);
1056 goto fail_wpalOpen;
1057 }
1058
1059 /*Initialize main synchro mutex - it will be used to ensure integrity of
1060 the main WDI Control Block*/
1061 wptStatus = wpalMutexInit(&gWDICb.wptMutex);
1062 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1063 {
1064 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1065 "%s: Failed to init mutex, status %d",
1066 __FUNCTION__, wptStatus);
1067 goto fail_mutex;
1068 }
1069
1070 /*Initialize the response timer - it will be used to time all messages
1071 expected as response from device*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001072 wptStatus = wpalTimerInit( &gWDICb.wptResponseTimer,
1073 WDI_ResponseTimerCB,
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 &gWDICb);
1075 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1076 {
1077 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1078 "%s: Failed to init response timer, status %d",
1079 __FUNCTION__, wptStatus);
1080 goto fail_timer;
1081 }
1082
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -07001083 wptStatus = wpalTimerInit( &gWDICb.ssrTimer,
1084 WDI_SsrTimerCB,
1085 &gWDICb);
1086 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1087 {
1088 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1089 "%s: Failed to init SSR timer, status %d",
1090 __FUNCTION__, wptStatus);
1091 goto fail_timer2;
1092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* Initialize the WDI Pending Request Queue*/
1094 wptStatus = wpal_list_init(&(gWDICb.wptPendingQueue));
1095 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1096 {
1097 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1098 "%s: Failed to init pending request queue, status %d",
1099 __FUNCTION__, wptStatus);
1100 goto fail_pend_queue;
1101 }
1102
1103 /*Init WDI Pending Assoc Id Queue */
1104 wptStatus = wpal_list_init(&(gWDICb.wptPendingAssocSessionIdQueue));
1105 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1106 {
1107 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1108 "%s: Failed to init assoc session queue, status %d",
1109 __FUNCTION__, wptStatus);
1110 goto fail_assoc_queue;
1111 }
1112
1113 /*Initialize the BSS sessions pending Queue */
1114 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
1115 {
1116 wptStatus = wpal_list_init(&(gWDICb.aBSSSessions[i].wptPendingQueue));
1117 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1118 {
1119 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1120 "%s: Failed to init BSS %d pending queue, status %d",
1121 __FUNCTION__, i, wptStatus);
1122 goto fail_bss_queue;
1123 }
1124 }
1125
1126 /*Indicate the control block is sufficiently initialized for callbacks*/
1127 gWDICb.magic = WDI_CONTROL_BLOCK_MAGIC;
1128
1129 /*------------------------------------------------------------------------
1130 Initialize the Data Path Utility Module
1131 ------------------------------------------------------------------------*/
1132 wdiStatus = WDI_DP_UtilsInit(&gWDICb);
1133 if ( WDI_STATUS_SUCCESS != wdiStatus )
1134 {
1135 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1136 "%s: Failed to initialize the DP Util Module, status %d",
1137 __FUNCTION__, wdiStatus);
1138 goto fail_dp_util_init;
1139 }
1140
1141 /* Init Set power state event */
1142 wptStatus = wpalEventInit(&gWDICb.setPowerStateEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001143 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 {
1145 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1146 "%s: Failed to initialize power state event, status %d",
1147 __FUNCTION__, wptStatus);
1148 goto fail_power_event;
1149 }
1150
1151 /* Init WCTS action event */
1152 wptStatus = wpalEventInit(&gWDICb.wctsActionEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001153 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 {
1155 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1156 "%s: Failed to initialize WCTS action event, status %d",
1157 __FUNCTION__, wptStatus);
1158 goto fail_wcts_event;
1159 }
1160
1161 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001162 Open the Transport Services for Control and Data
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 ------------------------------------------------------------------------*/
1164 wctsCBs.wctsNotifyCB = WDI_NotifyMsgCTSCB;
1165 wctsCBs.wctsNotifyCBData = &gWDICb;
Jeff Johnsone7245742012-09-05 17:12:55 -07001166 wctsCBs.wctsRxMsgCB = WDI_RXMsgCTSCB;
Jeff Johnson295189b2012-06-20 16:38:30 -07001167 wctsCBs.wctsRxMsgCBData = &gWDICb;
1168
Jeff Johnsone7245742012-09-05 17:12:55 -07001169 gWDICb.bCTOpened = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 gWDICb.wctsHandle = WCTS_OpenTransport( szTransportChName ,
Jeff Johnsone7245742012-09-05 17:12:55 -07001171 WDI_CT_CHANNEL_SIZE,
1172 &wctsCBs );
Jeff Johnson295189b2012-06-20 16:38:30 -07001173
1174 if ( NULL == gWDICb.wctsHandle )
1175 {
1176 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1177 "%s: Failed to open WCTS transport", __FUNCTION__);
1178 goto fail_wcts_open;
1179 }
1180
1181 gWDICb.driverMode = (tDriverType)driverType;
1182 /* FTM mode not need to open Transport Driver */
1183 if(eDRIVER_TYPE_MFG != (tDriverType)driverType)
Jeff Johnsone7245742012-09-05 17:12:55 -07001184 {
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /*------------------------------------------------------------------------
1186 Open the Data Transport
1187 ------------------------------------------------------------------------*/
1188 if(eWLAN_PAL_STATUS_SUCCESS != WDTS_openTransport(&gWDICb))
1189 {
1190 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1191 "%s: Failed to open the DT Transport", __FUNCTION__);
1192 goto fail_wdts_open;
1193 }
1194 }
1195
1196 /*The WDI is initialized - set state to init */
Jeff Johnsone7245742012-09-05 17:12:55 -07001197 gWDICb.uGlobalState = WDI_INIT_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07001198
1199 /*Send the context as a ptr to the global WDI Control Block*/
1200 *ppWDIGlobalCtx = &gWDICb;
1201
1202 /*Fill in the device capabilities*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001203 pWdiDevCapability->bFrameXtlSupported = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001204 pWdiDevCapability->ucMaxSTASupported = gWDICb.ucMaxStations;
1205 pWdiDevCapability->ucMaxBSSSupported = gWDICb.ucMaxBssids;
1206 return WDI_STATUS_SUCCESS;
1207
1208 /* ERROR handlers
1209 Undo everything that completed successfully */
1210
1211 fail_wdts_open:
1212 {
1213 wpt_status eventStatus;
1214
1215 /* Closing WCTS in this scenario is tricky since it has to close
1216 the SMD channel and then we get notified asynchronously when
1217 the channel has been closed. So we take some of the logic from
1218 the "normal" close procedure in WDI_Close()
1219 */
1220
1221 eventStatus = wpalEventReset(&gWDICb.wctsActionEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001222 if ( eWLAN_PAL_STATUS_SUCCESS != eventStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 {
1224 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1225 "%s: Failed to reset WCTS action event", __FUNCTION__);
1226 }
1227
1228 WCTS_CloseTransport(gWDICb.wctsHandle);
1229
1230 /* Wait for WCTS to close the control transport. If we were able
1231 to reset the event flag, then we'll wait for the event,
1232 otherwise we'll wait for a maximum amount of time required for
1233 the channel to be closed */
1234 if ( eWLAN_PAL_STATUS_SUCCESS == eventStatus )
1235 {
Jeff Johnsone7245742012-09-05 17:12:55 -07001236 eventStatus = wpalEventWait(&gWDICb.wctsActionEvent,
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 WDI_WCTS_ACTION_TIMEOUT);
1238 if ( eWLAN_PAL_STATUS_SUCCESS != eventStatus )
1239 {
1240 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1241 "%s: Failed to wait on WCTS action event", __FUNCTION__);
1242 }
1243 }
1244 else
1245 {
1246 wpalSleep(WDI_WCTS_ACTION_TIMEOUT);
1247 }
1248 }
1249 fail_wcts_open:
1250 wpalEventDelete(&gWDICb.wctsActionEvent);
1251 fail_wcts_event:
1252 wpalEventDelete(&gWDICb.setPowerStateEvent);
1253 fail_power_event:
1254 WDI_DP_UtilsExit(&gWDICb);
1255 fail_dp_util_init:
1256 gWDICb.magic = 0;
1257 fail_bss_queue:
1258 /* entries 0 thru i-1 were successfully initialized */
1259 while (0 < i)
1260 {
1261 i--;
1262 wpal_list_destroy(&(gWDICb.aBSSSessions[i].wptPendingQueue));
1263 }
1264 wpal_list_destroy(&(gWDICb.wptPendingAssocSessionIdQueue));
1265 fail_assoc_queue:
1266 wpal_list_destroy(&(gWDICb.wptPendingQueue));
1267 fail_pend_queue:
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -07001268 wpalTimerDelete(&gWDICb.ssrTimer);
1269 fail_timer2:
Jeff Johnson295189b2012-06-20 16:38:30 -07001270 wpalTimerDelete(&gWDICb.wptResponseTimer);
1271 fail_timer:
1272 wpalMutexDelete(&gWDICb.wptMutex);
1273 fail_mutex:
1274 wpalClose(gWDICb.pPALContext);
1275 fail_wpalOpen:
1276 WDI_STATableClose(&gWDICb);
1277 fail_STATableInit:
1278 gWDIInitialized = eWLAN_PAL_FALSE;
1279
1280 return WDI_STATUS_E_FAILURE;
1281
1282}/*WDI_Init*/;
1283
1284/**
1285 @brief WDI_Start will be called when the upper MAC is ready to
1286 commence operation with the WLAN Device. Upon the call
1287 of this API the WLAN DAL will pack and send a HAL Start
1288 message to the lower RIVA sub-system if the SMD channel
1289 has been fully opened and the RIVA subsystem is up.
1290
1291 If the RIVA sub-system is not yet up and running DAL
1292 will queue the request for Open and will wait for the
1293 SMD notification before attempting to send down the
Jeff Johnsone7245742012-09-05 17:12:55 -07001294 message to HAL.
Jeff Johnson295189b2012-06-20 16:38:30 -07001295
1296 WDI_Init must have been called.
1297
Jeff Johnsone7245742012-09-05 17:12:55 -07001298 @param wdiStartParams: the start parameters as specified by
Jeff Johnson295189b2012-06-20 16:38:30 -07001299 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001300
Jeff Johnson295189b2012-06-20 16:38:30 -07001301 wdiStartRspCb: callback for passing back the response of
1302 the start operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07001303
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001305 callback
1306
Jeff Johnson295189b2012-06-20 16:38:30 -07001307 @see WDI_Start
1308 @return Result of the function call
1309*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001310WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001311WDI_Start
1312(
1313 WDI_StartReqParamsType* pwdiStartParams,
1314 WDI_StartRspCb wdiStartRspCb,
1315 void* pUserData
1316)
1317{
1318 WDI_EventInfoType wdiEventData;
1319 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1320
1321 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001322 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001323 ------------------------------------------------------------------------*/
1324 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1325 {
1326 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1327 "WDI API call before module is initialized - Fail request");
1328
Jeff Johnsone7245742012-09-05 17:12:55 -07001329 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 }
1331
1332 /*------------------------------------------------------------------------
1333 Fill in Event data and post to the Main FSM
1334 ------------------------------------------------------------------------*/
1335 wdiEventData.wdiRequest = WDI_START_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001336 wdiEventData.pEventData = pwdiStartParams;
1337 wdiEventData.uEventDataSize = sizeof(*pwdiStartParams);
1338 wdiEventData.pCBfnc = wdiStartRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001339 wdiEventData.pUserData = pUserData;
1340
1341 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1342
1343}/*WDI_Start*/
1344
1345/**
1346 @brief WDI_Stop will be called when the upper MAC is ready to
1347 stop any operation with the WLAN Device. Upon the call
1348 of this API the WLAN DAL will pack and send a HAL Stop
1349 message to the lower RIVA sub-system if the DAL Core is
1350 in started state.
1351
1352 In state BUSY this request will be queued.
Jeff Johnsone7245742012-09-05 17:12:55 -07001353
1354 Request will not be accepted in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001355
1356 WDI_Start must have been called.
1357
Jeff Johnsone7245742012-09-05 17:12:55 -07001358 @param wdiStopParams: the stop parameters as specified by
Jeff Johnson295189b2012-06-20 16:38:30 -07001359 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001360
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 wdiStopRspCb: callback for passing back the response of
1362 the stop operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07001363
Jeff Johnson295189b2012-06-20 16:38:30 -07001364 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001365 callback
1366
Jeff Johnson295189b2012-06-20 16:38:30 -07001367 @see WDI_Start
1368 @return Result of the function call
1369*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001370WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001371WDI_Stop
1372(
1373 WDI_StopReqParamsType* pwdiStopParams,
1374 WDI_StopRspCb wdiStopRspCb,
1375 void* pUserData
1376)
1377{
1378 WDI_EventInfoType wdiEventData;
Jeff Johnson43971f52012-07-17 12:26:56 -07001379 WDI_ControlBlockType* pWDICtx = &gWDICb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001380 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1381
1382 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001383 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001384 ------------------------------------------------------------------------*/
1385 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1386 {
1387 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1388 "WDI API call before module is initialized - Fail request");
1389
Jeff Johnsone7245742012-09-05 17:12:55 -07001390 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001391 }
1392
Jeff Johnson43971f52012-07-17 12:26:56 -07001393 /*Access to the global state must be locked before cleaning */
1394 wpalMutexAcquire(&pWDICtx->wptMutex);
1395
1396 /*Clear all pending request*/
1397 WDI_ClearPendingRequests(pWDICtx);
1398
1399 /*We have completed cleaning unlock now*/
1400 wpalMutexRelease(&pWDICtx->wptMutex);
1401
Jeff Johnson295189b2012-06-20 16:38:30 -07001402 /* Free the global variables */
1403 wpalMemoryFree(gpHostWlanFeatCaps);
1404 wpalMemoryFree(gpFwWlanFeatCaps);
Madan Mohan Koyyalamudi3352adb2012-09-28 14:57:24 -07001405 gpHostWlanFeatCaps = NULL;
1406 gpFwWlanFeatCaps = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001407
1408 /*------------------------------------------------------------------------
1409 Fill in Event data and post to the Main FSM
1410 ------------------------------------------------------------------------*/
1411 wdiEventData.wdiRequest = WDI_STOP_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001412 wdiEventData.pEventData = pwdiStopParams;
1413 wdiEventData.uEventDataSize = sizeof(*pwdiStopParams);
1414 wdiEventData.pCBfnc = wdiStopRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001415 wdiEventData.pUserData = pUserData;
1416
1417 return WDI_PostMainEvent(&gWDICb, WDI_STOP_EVENT, &wdiEventData);
1418
1419}/*WDI_Stop*/
1420
1421
1422
1423/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001424 @brief WDI_Close will be called when the upper MAC no longer
Jeff Johnson295189b2012-06-20 16:38:30 -07001425 needs to interact with DAL. DAL will free its control
1426 block.
Jeff Johnsone7245742012-09-05 17:12:55 -07001427
1428 It is only accepted in state STOPPED.
Jeff Johnson295189b2012-06-20 16:38:30 -07001429
1430 WDI_Stop must have been called.
1431
1432 @param none
Jeff Johnsone7245742012-09-05 17:12:55 -07001433
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 @see WDI_Stop
1435 @return Result of the function call
1436*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001437WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001438WDI_Close
1439(
1440 void
1441)
1442{
1443 wpt_uint8 i;
1444 WDI_EventInfoType wdiEventData;
1445 wpt_status wptStatus;
1446 wpt_status eventStatus;
1447 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1448
1449 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001450 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001451 ------------------------------------------------------------------------*/
1452 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1453 {
1454 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1455 "WDI API call before module is initialized - Fail request");
1456
Jeff Johnsone7245742012-09-05 17:12:55 -07001457 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001458 }
1459
1460 /*Reset WCTS action event prior to posting the WDI_CLOSE_REQ
1461 (the control transport will be closed by the FSM and we'll want
1462 to wait until that completes)*/
1463 eventStatus = wpalEventReset(&gWDICb.wctsActionEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001464 if ( eWLAN_PAL_STATUS_SUCCESS != eventStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -07001465 {
1466 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1467 "%s: Failed to reset WCTS action event", __FUNCTION__);
1468 /* fall through and try to finish closing via the FSM */
1469 }
1470
1471 /*------------------------------------------------------------------------
1472 Fill in Event data and post to the Main FSM
1473 ------------------------------------------------------------------------*/
1474 wdiEventData.wdiRequest = WDI_CLOSE_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001475 wdiEventData.pEventData = NULL;
1476 wdiEventData.uEventDataSize = 0;
1477 wdiEventData.pCBfnc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 wdiEventData.pUserData = NULL;
1479
1480 gWDIInitialized = eWLAN_PAL_FALSE;
1481
1482 wptStatus = WDI_PostMainEvent(&gWDICb, WDI_CLOSE_EVENT, &wdiEventData);
1483
1484 /*Wait for WCTS to close the control transport
1485 (but only if we were able to reset the event flag*/
1486 if ( eWLAN_PAL_STATUS_SUCCESS == eventStatus )
1487 {
Jeff Johnsone7245742012-09-05 17:12:55 -07001488 eventStatus = wpalEventWait(&gWDICb.wctsActionEvent,
Jeff Johnson295189b2012-06-20 16:38:30 -07001489 WDI_WCTS_ACTION_TIMEOUT);
1490 if ( eWLAN_PAL_STATUS_SUCCESS != eventStatus )
1491 {
1492 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1493 "%s: Failed to wait on WCTS action event", __FUNCTION__);
1494 }
1495 }
1496
1497 /* Destroy the WCTS action event */
1498 wptStatus = wpalEventDelete(&gWDICb.wctsActionEvent);
1499 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1500 {
1501 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1502 "WDI Close failed to destroy an event");
Jeff Johnsone7245742012-09-05 17:12:55 -07001503 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07001504 }
1505
1506 /* Destroy the Set Power State event */
1507 wptStatus = wpalEventDelete(&gWDICb.setPowerStateEvent);
1508 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1509 {
1510 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1511 "WDI Close failed to destroy an event");
1512
Jeff Johnsone7245742012-09-05 17:12:55 -07001513 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07001514 }
1515
1516 /*------------------------------------------------------------------------
1517 Closes the Data Path Utility Module
1518 ------------------------------------------------------------------------*/
1519 if ( WDI_STATUS_SUCCESS != WDI_DP_UtilsExit(&gWDICb))
1520 {
1521 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1522 "WDI Init failed to close the DP Util Module");
1523
Jeff Johnsone7245742012-09-05 17:12:55 -07001524 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07001525 }
1526
1527 /*destroy the BSS sessions pending Queue */
1528 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
1529 {
1530 wpal_list_destroy(&(gWDICb.aBSSSessions[i].wptPendingQueue));
1531 }
1532
1533 /* destroy the WDI Pending Assoc Id Request Queue*/
1534 wpal_list_destroy(&(gWDICb.wptPendingAssocSessionIdQueue));
1535
1536 /* destroy the WDI Pending Request Queue*/
1537 wpal_list_destroy(&(gWDICb.wptPendingQueue));
Jeff Johnsone7245742012-09-05 17:12:55 -07001538
Jeff Johnson295189b2012-06-20 16:38:30 -07001539 /*destroy the response timer */
1540 wptStatus = wpalTimerDelete( &gWDICb.wptResponseTimer);
1541
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -07001542 /*destroy the SSR timer */
1543 wptStatus = wpalTimerDelete( &gWDICb.ssrTimer);
1544
Jeff Johnson295189b2012-06-20 16:38:30 -07001545 /*invalidate the main synchro mutex */
1546 wptStatus = wpalMutexDelete(&gWDICb.wptMutex);
1547 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1548 {
1549 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1550 "Failed to delete mutex %d", wptStatus);
1551 WDI_ASSERT(0);
1552 }
1553
1554 /*Clear control block. note that this will clear the "magic"
1555 which will inhibit all asynchronous callbacks*/
1556 WDI_CleanCB(&gWDICb);
1557
1558 return wptStatus;
1559
1560}/*WDI_Close*/
1561
1562/**
1563 @brief WDI_Shutdown will be called during 'SSR shutdown' operation.
1564 This will do most of the WDI stop & close
1565 operations without doing any handshake with Riva
1566
1567 This will also make sure that the control transport
1568 will NOT be closed.
1569
1570 This request will not be queued.
1571
1572
1573 WDI_Start must have been called.
1574
1575 @param closeTransport: Close control channel if this is set
1576
1577 @return Result of the function call
1578*/
1579WDI_Status
1580WDI_Shutdown
1581(
1582 wpt_boolean closeTransport
1583)
1584{
1585 WDI_EventInfoType wdiEventData;
1586 wpt_status wptStatus;
1587 int i = 0;
1588 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1589
1590 /*------------------------------------------------------------------------
1591 Sanity Check
1592 ------------------------------------------------------------------------*/
1593 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1594 {
1595 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1596 "WDI API call before module is initialized - Fail request");
1597
1598 return WDI_STATUS_E_NOT_ALLOWED;
1599 }
1600
1601 /*------------------------------------------------------------------------
1602 Fill in Event data and post to the Main FSM
1603 ------------------------------------------------------------------------*/
1604 wdiEventData.wdiRequest = WDI_SHUTDOWN_REQ;
1605 wdiEventData.pEventData = NULL;
1606 wdiEventData.uEventDataSize = 0;
1607
1608 /* Shutdown will not be queued, if the state is busy timer will be
1609 * stopped & this message will be processed.*/
1610 wptStatus = WDI_PostMainEvent(&gWDICb, WDI_SHUTDOWN_EVENT, &wdiEventData);
1611 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1612 {
1613 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
1614 "%s: Failed to process shutdown event", __FUNCTION__);
1615 }
1616 /* Destroy the Set Power State event */
1617 wptStatus = wpalEventDelete(&gWDICb.setPowerStateEvent);
1618 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1619 {
1620 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1621 "WDI Close failed to destroy an event");
1622
1623 WDI_ASSERT(0);
1624 }
1625 /*------------------------------------------------------------------------
1626 Closes the Data Path Utility Module
1627 ------------------------------------------------------------------------*/
1628 if ( WDI_STATUS_SUCCESS != WDI_DP_UtilsExit(&gWDICb))
1629 {
1630 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
1631 "WDI Init failed to close the DP Util Module");
1632
1633 WDI_ASSERT(0);
1634 }
1635 if ( closeTransport )
1636 {
1637 /* Close control transport, called from module unload */
1638 WCTS_CloseTransport(gWDICb.wctsHandle);
1639 }
Madan Mohan Koyyalamudifab2a7e2012-09-28 15:20:00 -07001640 else
1641 {
Madan Mohan Koyyalamudi8b7f1e62012-10-05 14:56:51 -07001642 /* Riva is crashed then SMD is already closed so cleaning all
Madan Mohan Koyyalamudifab2a7e2012-09-28 15:20:00 -07001643 the pending messages in the transport queue */
1644 WCTS_ClearPendingQueue(gWDICb.wctsHandle);
1645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /*destroy the BSS sessions pending Queue */
1647 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
1648 {
1649 wpal_list_destroy(&(gWDICb.aBSSSessions[i].wptPendingQueue));
1650 }
1651
1652 /* destroy the WDI Pending Assoc Id Request Queue*/
1653 wpal_list_destroy(&(gWDICb.wptPendingAssocSessionIdQueue));
1654 /* destroy the WDI Pending Request Queue*/
1655 wpal_list_destroy(&(gWDICb.wptPendingQueue));
1656 /*destroy the response timer */
1657 wptStatus = wpalTimerDelete( &gWDICb.wptResponseTimer);
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -07001658 /*destroy the SSR timer */
1659 wptStatus = wpalTimerDelete( &gWDICb.ssrTimer);
Jeff Johnson295189b2012-06-20 16:38:30 -07001660
1661 /*invalidate the main synchro mutex */
1662 wptStatus = wpalMutexDelete(&gWDICb.wptMutex);
1663 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
1664 {
1665 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1666 "%s: Failed to delete mutex %d", __FUNCTION__, wptStatus);
1667 WDI_ASSERT(0);
1668 }
Madan Mohan Koyyalamudi3513bf52012-09-18 17:35:53 -07001669 /* Free the global variables */
1670 wpalMemoryFree(gpHostWlanFeatCaps);
1671 wpalMemoryFree(gpFwWlanFeatCaps);
Madan Mohan Koyyalamudi3352adb2012-09-28 14:57:24 -07001672 gpHostWlanFeatCaps = NULL;
1673 gpFwWlanFeatCaps = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07001674 /*Clear control block. note that this will clear the "magic"
1675 which will inhibit all asynchronous callbacks*/
1676 WDI_CleanCB(&gWDICb);
1677 return wptStatus;
1678
1679}/*WDI_Shutdown*/
1680
1681
Jeff Johnsone7245742012-09-05 17:12:55 -07001682/*========================================================================
1683
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 SCAN APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07001685
Jeff Johnson295189b2012-06-20 16:38:30 -07001686==========================================================================*/
1687
1688/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001689 @brief WDI_InitScanReq will be called when the upper MAC wants
Jeff Johnson295189b2012-06-20 16:38:30 -07001690 the WLAN Device to get ready for a scan procedure. Upon
1691 the call of this API the WLAN DAL will pack and send a
1692 HAL Init Scan request message to the lower RIVA
1693 sub-system if DAL is in state STARTED.
1694
1695 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07001696 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001697
1698 WDI_Start must have been called.
1699
1700 @param wdiInitScanParams: the init scan parameters as specified
1701 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001702
Jeff Johnson295189b2012-06-20 16:38:30 -07001703 wdiInitScanRspCb: callback for passing back the response
1704 of the init scan operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07001705
Jeff Johnson295189b2012-06-20 16:38:30 -07001706 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001707 callback
1708
Jeff Johnson295189b2012-06-20 16:38:30 -07001709 @see WDI_Start
1710 @return Result of the function call
1711*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001712WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001713WDI_InitScanReq
1714(
1715 WDI_InitScanReqParamsType* pwdiInitScanParams,
1716 WDI_InitScanRspCb wdiInitScanRspCb,
1717 void* pUserData
1718)
1719{
1720 WDI_EventInfoType wdiEventData;
1721 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1722
1723 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001724 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 ------------------------------------------------------------------------*/
1726 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1727 {
1728 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1729 "WDI API call before module is initialized - Fail request");
1730
Jeff Johnsone7245742012-09-05 17:12:55 -07001731 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 }
1733
1734 /*------------------------------------------------------------------------
1735 Fill in Event data and post to the Main FSM
1736 ------------------------------------------------------------------------*/
1737 wdiEventData.wdiRequest = WDI_INIT_SCAN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001738 wdiEventData.pEventData = pwdiInitScanParams;
1739 wdiEventData.uEventDataSize = sizeof(*pwdiInitScanParams);
1740 wdiEventData.pCBfnc = wdiInitScanRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001741 wdiEventData.pUserData = pUserData;
1742
1743 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1744
1745}/*WDI_InitScanReq*/
1746
1747/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001748 @brief WDI_StartScanReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 wishes to change the Scan channel on the WLAN Device.
1750 Upon the call of this API the WLAN DAL will pack and
1751 send a HAL Start Scan request message to the lower RIVA
1752 sub-system if DAL is in state STARTED.
1753
1754 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07001755 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001756
1757 WDI_InitScanReq must have been called.
1758
Jeff Johnsone7245742012-09-05 17:12:55 -07001759 @param wdiStartScanParams: the start scan parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001761
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 wdiStartScanRspCb: callback for passing back the
1763 response of the start scan operation received from the
1764 device
Jeff Johnsone7245742012-09-05 17:12:55 -07001765
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001767 callback
1768
Jeff Johnson295189b2012-06-20 16:38:30 -07001769 @see WDI_InitScanReq
1770 @return Result of the function call
1771*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001772WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001773WDI_StartScanReq
1774(
1775 WDI_StartScanReqParamsType* pwdiStartScanParams,
1776 WDI_StartScanRspCb wdiStartScanRspCb,
1777 void* pUserData
1778)
1779{
1780 WDI_EventInfoType wdiEventData;
1781 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1782
1783 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001784 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001785 ------------------------------------------------------------------------*/
1786 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1787 {
1788 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1789 "WDI API call before module is initialized - Fail request");
1790
Jeff Johnsone7245742012-09-05 17:12:55 -07001791 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001792 }
1793
1794 /*------------------------------------------------------------------------
1795 Fill in Event data and post to the Main FSM
1796 ------------------------------------------------------------------------*/
1797 wdiEventData.wdiRequest = WDI_START_SCAN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001798 wdiEventData.pEventData = pwdiStartScanParams;
1799 wdiEventData.uEventDataSize = sizeof(*pwdiStartScanParams);
1800 wdiEventData.pCBfnc = wdiStartScanRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001801 wdiEventData.pUserData = pUserData;
1802
1803 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1804
1805}/*WDI_StartScanReq*/
1806
1807
1808/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001809 @brief WDI_EndScanReq will be called when the upper MAC is
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 wants to end scanning for a particular channel that it
1811 had set before by calling Scan Start on the WLAN Device.
1812 Upon the call of this API the WLAN DAL will pack and
1813 send a HAL End Scan request message to the lower RIVA
1814 sub-system if DAL is in state STARTED.
1815
1816 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07001817 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001818
1819 WDI_StartScanReq must have been called.
1820
Jeff Johnsone7245742012-09-05 17:12:55 -07001821 @param wdiEndScanParams: the end scan parameters as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07001822 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001823
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 wdiEndScanRspCb: callback for passing back the response
1825 of the end scan operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07001826
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001828 callback
1829
Jeff Johnson295189b2012-06-20 16:38:30 -07001830 @see WDI_StartScanReq
1831 @return Result of the function call
1832*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001833WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001834WDI_EndScanReq
1835(
1836 WDI_EndScanReqParamsType* pwdiEndScanParams,
1837 WDI_EndScanRspCb wdiEndScanRspCb,
1838 void* pUserData
1839)
1840{
1841 WDI_EventInfoType wdiEventData;
1842 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1843
1844 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001845 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 ------------------------------------------------------------------------*/
1847 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1848 {
1849 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1850 "WDI API call before module is initialized - Fail request");
1851
Jeff Johnsone7245742012-09-05 17:12:55 -07001852 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 }
1854
1855 /*------------------------------------------------------------------------
1856 Fill in Event data and post to the Main FSM
1857 ------------------------------------------------------------------------*/
1858 wdiEventData.wdiRequest = WDI_END_SCAN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001859 wdiEventData.pEventData = pwdiEndScanParams;
1860 wdiEventData.uEventDataSize = sizeof(*pwdiEndScanParams);
1861 wdiEventData.pCBfnc = wdiEndScanRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001862 wdiEventData.pUserData = pUserData;
1863
1864 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1865
1866}/*WDI_EndScanReq*/
1867
1868
1869/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001870 @brief WDI_FinishScanReq will be called when the upper MAC has
Jeff Johnson295189b2012-06-20 16:38:30 -07001871 completed the scan process on the WLAN Device. Upon the
1872 call of this API the WLAN DAL will pack and send a HAL
1873 Finish Scan Request request message to the lower RIVA
1874 sub-system if DAL is in state STARTED.
1875
1876 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07001877 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001878
1879 WDI_InitScanReq must have been called.
1880
Jeff Johnsone7245742012-09-05 17:12:55 -07001881 @param wdiFinishScanParams: the finish scan parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07001882 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001883
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 wdiFinishScanRspCb: callback for passing back the
1885 response of the finish scan operation received from the
1886 device
Jeff Johnsone7245742012-09-05 17:12:55 -07001887
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001889 callback
1890
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 @see WDI_InitScanReq
1892 @return Result of the function call
1893*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001894WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001895WDI_FinishScanReq
1896(
1897 WDI_FinishScanReqParamsType* pwdiFinishScanParams,
1898 WDI_FinishScanRspCb wdiFinishScanRspCb,
1899 void* pUserData
1900)
1901{
1902 WDI_EventInfoType wdiEventData;
1903 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1904
1905 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001906 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001907 ------------------------------------------------------------------------*/
1908 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1909 {
1910 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1911 "WDI API call before module is initialized - Fail request");
1912
Jeff Johnsone7245742012-09-05 17:12:55 -07001913 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001914 }
1915
1916 /*------------------------------------------------------------------------
1917 Fill in Event data and post to the Main FSM
1918 ------------------------------------------------------------------------*/
1919 wdiEventData.wdiRequest = WDI_FINISH_SCAN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001920 wdiEventData.pEventData = pwdiFinishScanParams;
1921 wdiEventData.uEventDataSize = sizeof(*pwdiFinishScanParams);
1922 wdiEventData.pCBfnc = wdiFinishScanRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001923 wdiEventData.pUserData = pUserData;
1924
1925 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1926
1927}/*WDI_FinishScanReq*/
1928
Jeff Johnsone7245742012-09-05 17:12:55 -07001929/*========================================================================
1930
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 ASSOCIATION APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07001932
Jeff Johnson295189b2012-06-20 16:38:30 -07001933==========================================================================*/
1934
1935/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001936 @brief WDI_JoinReq will be called when the upper MAC is ready
Jeff Johnson295189b2012-06-20 16:38:30 -07001937 to start an association procedure to a BSS. Upon the
1938 call of this API the WLAN DAL will pack and send a HAL
1939 Join request message to the lower RIVA sub-system if
1940 DAL is in state STARTED.
1941
1942 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07001943 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07001944
1945 WDI_Start must have been called.
1946
Jeff Johnsone7245742012-09-05 17:12:55 -07001947 @param wdiJoinParams: the join parameters as specified by
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07001949
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 wdiJoinRspCb: callback for passing back the response of
1951 the join operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07001952
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07001954 callback
1955
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 @see WDI_Start
1957 @return Result of the function call
1958*/
Jeff Johnsone7245742012-09-05 17:12:55 -07001959WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07001960WDI_JoinReq
1961(
1962 WDI_JoinReqParamsType* pwdiJoinParams,
1963 WDI_JoinRspCb wdiJoinRspCb,
1964 void* pUserData
1965)
1966{
1967 WDI_EventInfoType wdiEventData;
1968 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
1969
1970 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07001971 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07001972 ------------------------------------------------------------------------*/
1973 if ( eWLAN_PAL_FALSE == gWDIInitialized )
1974 {
1975 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
1976 "WDI API call before module is initialized - Fail request");
1977
Jeff Johnsone7245742012-09-05 17:12:55 -07001978 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 }
1980
1981 /*------------------------------------------------------------------------
1982 Fill in Event data and post to the Main FSM
1983 ------------------------------------------------------------------------*/
1984 wdiEventData.wdiRequest = WDI_JOIN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07001985 wdiEventData.pEventData = pwdiJoinParams;
1986 wdiEventData.uEventDataSize = sizeof(*pwdiJoinParams);
1987 wdiEventData.pCBfnc = wdiJoinRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 wdiEventData.pUserData = pUserData;
1989
1990 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
1991
1992}/*WDI_JoinReq*/
1993
1994/**
Jeff Johnsone7245742012-09-05 17:12:55 -07001995 @brief WDI_ConfigBSSReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 wishes to configure the newly acquired or in process of
1997 being acquired BSS to the HW . Upon the call of this API
1998 the WLAN DAL will pack and send a HAL Config BSS request
1999 message to the lower RIVA sub-system if DAL is in state
2000 STARTED.
2001
2002 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002003 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002004
2005 WDI_JoinReq must have been called.
2006
Jeff Johnsone7245742012-09-05 17:12:55 -07002007 @param wdiConfigBSSParams: the config BSS parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002009
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 wdiConfigBSSRspCb: callback for passing back the
2011 response of the config BSS operation received from the
2012 device
Jeff Johnsone7245742012-09-05 17:12:55 -07002013
Jeff Johnson295189b2012-06-20 16:38:30 -07002014 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002015 callback
2016
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 @see WDI_JoinReq
2018 @return Result of the function call
2019*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002020WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002021WDI_ConfigBSSReq
2022(
2023 WDI_ConfigBSSReqParamsType* pwdiConfigBSSParams,
2024 WDI_ConfigBSSRspCb wdiConfigBSSRspCb,
2025 void* pUserData
2026)
2027{
2028 WDI_EventInfoType wdiEventData;
2029 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2030
2031 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002032 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 ------------------------------------------------------------------------*/
2034 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2035 {
2036 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2037 "WDI API call before module is initialized - Fail request");
2038
Jeff Johnsone7245742012-09-05 17:12:55 -07002039 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002040 }
2041
2042 /*------------------------------------------------------------------------
2043 Fill in Event data and post to the Main FSM
2044 ------------------------------------------------------------------------*/
2045 wdiEventData.wdiRequest = WDI_CONFIG_BSS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002046 wdiEventData.pEventData = pwdiConfigBSSParams;
2047 wdiEventData.uEventDataSize = sizeof(*pwdiConfigBSSParams);
2048 wdiEventData.pCBfnc = wdiConfigBSSRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 wdiEventData.pUserData = pUserData;
2050
2051 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2052
2053}/*WDI_ConfigBSSReq*/
2054
2055/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002056 @brief WDI_DelBSSReq will be called when the upper MAC is
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 disassociating from the BSS and wishes to notify HW.
2058 Upon the call of this API the WLAN DAL will pack and
2059 send a HAL Del BSS request message to the lower RIVA
2060 sub-system if DAL is in state STARTED.
2061
2062 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002063 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002064
2065 WDI_ConfigBSSReq or WDI_PostAssocReq must have been called.
2066
Jeff Johnsone7245742012-09-05 17:12:55 -07002067 @param wdiDelBSSParams: the del BSS parameters as specified by
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002069
Jeff Johnson295189b2012-06-20 16:38:30 -07002070 wdiDelBSSRspCb: callback for passing back the response
2071 of the del bss operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002072
Jeff Johnson295189b2012-06-20 16:38:30 -07002073 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002074 callback
2075
2076 @see WDI_ConfigBSSReq, WDI_PostAssocReq
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 @return Result of the function call
2078*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002079WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002080WDI_DelBSSReq
2081(
2082 WDI_DelBSSReqParamsType* pwdiDelBSSParams,
2083 WDI_DelBSSRspCb wdiDelBSSRspCb,
2084 void* pUserData
2085)
2086{
2087 WDI_EventInfoType wdiEventData;
2088 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2089
2090 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002091 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 ------------------------------------------------------------------------*/
2093 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2094 {
2095 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2096 "WDI API call before module is initialized - Fail request");
2097
Jeff Johnsone7245742012-09-05 17:12:55 -07002098 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 }
2100
2101 /*------------------------------------------------------------------------
2102 Fill in Event data and post to the Main FSM
2103 ------------------------------------------------------------------------*/
2104 wdiEventData.wdiRequest = WDI_DEL_BSS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002105 wdiEventData.pEventData = pwdiDelBSSParams;
2106 wdiEventData.uEventDataSize = sizeof(*pwdiDelBSSParams);
2107 wdiEventData.pCBfnc = wdiDelBSSRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 wdiEventData.pUserData = pUserData;
2109
2110 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2111
2112}/*WDI_DelBSSReq*/
2113
2114/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002115 @brief WDI_PostAssocReq will be called when the upper MAC has
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 associated to a BSS and wishes to configure HW for
2117 associated state. Upon the call of this API the WLAN DAL
2118 will pack and send a HAL Post Assoc request message to
2119 the lower RIVA sub-system if DAL is in state STARTED.
2120
2121 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002122 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002123
2124 WDI_JoinReq must have been called.
2125
2126 @param wdiPostAssocReqParams: the assoc parameters as specified
2127 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 wdiPostAssocRspCb: callback for passing back the
2130 response of the post assoc operation received from the
2131 device
Jeff Johnsone7245742012-09-05 17:12:55 -07002132
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002134 callback
2135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 @see WDI_JoinReq
2137 @return Result of the function call
2138*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002139WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002140WDI_PostAssocReq
2141(
2142 WDI_PostAssocReqParamsType* pwdiPostAssocReqParams,
2143 WDI_PostAssocRspCb wdiPostAssocRspCb,
2144 void* pUserData
2145)
2146{
2147 WDI_EventInfoType wdiEventData;
2148 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2149
2150 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002151 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002152 ------------------------------------------------------------------------*/
2153 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2154 {
2155 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2156 "WDI API call before module is initialized - Fail request");
2157
Jeff Johnsone7245742012-09-05 17:12:55 -07002158 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 }
2160
2161 /*------------------------------------------------------------------------
2162 Fill in Event data and post to the Main FSM
2163 ------------------------------------------------------------------------*/
2164 wdiEventData.wdiRequest = WDI_POST_ASSOC_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002165 wdiEventData.pEventData = pwdiPostAssocReqParams;
2166 wdiEventData.uEventDataSize = sizeof(*pwdiPostAssocReqParams);
2167 wdiEventData.pCBfnc = wdiPostAssocRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 wdiEventData.pUserData = pUserData;
2169
2170 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2171
2172}/*WDI_PostAssocReq*/
2173
2174/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002175 @brief WDI_DelSTAReq will be called when the upper MAC when an
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 association with another STA has ended and the station
2177 must be deleted from HW. Upon the call of this API the
2178 WLAN DAL will pack and send a HAL Del STA request
2179 message to the lower RIVA sub-system if DAL is in state
2180 STARTED.
2181
2182 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002183 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002184
2185 WDI_PostAssocReq must have been called.
2186
Jeff Johnsone7245742012-09-05 17:12:55 -07002187 @param wdiDelSTAParams: the Del STA parameters as specified by
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002189
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 wdiDelSTARspCb: callback for passing back the response
2191 of the del STA operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002192
Jeff Johnson295189b2012-06-20 16:38:30 -07002193 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002194 callback
2195
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 @see WDI_PostAssocReq
2197 @return Result of the function call
2198*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002199WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002200WDI_DelSTAReq
2201(
2202 WDI_DelSTAReqParamsType* pwdiDelSTAParams,
2203 WDI_DelSTARspCb wdiDelSTARspCb,
2204 void* pUserData
2205)
2206{
2207 WDI_EventInfoType wdiEventData;
2208 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2209
2210 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002211 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002212 ------------------------------------------------------------------------*/
2213 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2214 {
2215 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2216 "WDI API call before module is initialized - Fail request");
2217
Jeff Johnsone7245742012-09-05 17:12:55 -07002218 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 }
2220
2221 /*------------------------------------------------------------------------
2222 Fill in Event data and post to the Main FSM
2223 ------------------------------------------------------------------------*/
2224 wdiEventData.wdiRequest = WDI_DEL_STA_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002225 wdiEventData.pEventData = pwdiDelSTAParams;
2226 wdiEventData.uEventDataSize = sizeof(*pwdiDelSTAParams);
2227 wdiEventData.pCBfnc = wdiDelSTARspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 wdiEventData.pUserData = pUserData;
2229
2230 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2231
2232}/*WDI_DelSTAReq*/
2233
Jeff Johnsone7245742012-09-05 17:12:55 -07002234/*========================================================================
2235
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 SECURITY APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07002237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238==========================================================================*/
2239
2240/**
2241 @brief WDI_SetBSSKeyReq will be called when the upper MAC wants to
2242 install a BSS encryption key on the HW. Upon the call of this
2243 API the WLAN DAL will pack and send a Set BSS Key request
2244 message to the lower RIVA sub-system if DAL is in state
2245 STARTED.
2246
2247 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002248 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002249
2250 WDI_PostAssocReq must have been called.
2251
Jeff Johnsone7245742012-09-05 17:12:55 -07002252 @param wdiSetBSSKeyParams: the BSS Key set parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002254
Jeff Johnson295189b2012-06-20 16:38:30 -07002255 wdiSetBSSKeyRspCb: callback for passing back the
2256 response of the set BSS Key operation received from the
2257 device
Jeff Johnsone7245742012-09-05 17:12:55 -07002258
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002260 callback
2261
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 @see WDI_PostAssocReq
2263 @return Result of the function call
2264*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002265WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002266WDI_SetBSSKeyReq
2267(
2268 WDI_SetBSSKeyReqParamsType* pwdiSetBSSKeyParams,
2269 WDI_SetBSSKeyRspCb wdiSetBSSKeyRspCb,
2270 void* pUserData
2271)
2272{
2273 WDI_EventInfoType wdiEventData;
2274 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2275
2276 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002277 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 ------------------------------------------------------------------------*/
2279 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2280 {
2281 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2282 "WDI API call before module is initialized - Fail request");
2283
Jeff Johnsone7245742012-09-05 17:12:55 -07002284 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 }
2286
2287 /*------------------------------------------------------------------------
2288 Fill in Event data and post to the Main FSM
2289 ------------------------------------------------------------------------*/
2290 wdiEventData.wdiRequest = WDI_SET_BSS_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002291 wdiEventData.pEventData = pwdiSetBSSKeyParams;
2292 wdiEventData.uEventDataSize = sizeof(*pwdiSetBSSKeyParams);
2293 wdiEventData.pCBfnc = wdiSetBSSKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdiEventData.pUserData = pUserData;
2295
2296 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2297
2298}/*WDI_SetBSSKeyReq*/
2299
2300/**
2301 @brief WDI_RemoveBSSKeyReq will be called when the upper MAC wants to
2302 uninstall a BSS key from HW. Upon the call of this API the
2303 WLAN DAL will pack and send a HAL Remove BSS Key request
2304 message to the lower RIVA sub-system if DAL is in state
2305 STARTED.
2306
2307 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002308 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002309
2310 WDI_SetBSSKeyReq must have been called.
2311
Jeff Johnsone7245742012-09-05 17:12:55 -07002312 @param wdiRemoveBSSKeyParams: the remove BSS key parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002314
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 wdiRemoveBSSKeyRspCb: callback for passing back the
2316 response of the remove BSS key operation received from
2317 the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002318
Jeff Johnson295189b2012-06-20 16:38:30 -07002319 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002320 callback
2321
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 @see WDI_SetBSSKeyReq
2323 @return Result of the function call
2324*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002325WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002326WDI_RemoveBSSKeyReq
2327(
2328 WDI_RemoveBSSKeyReqParamsType* pwdiRemoveBSSKeyParams,
2329 WDI_RemoveBSSKeyRspCb wdiRemoveBSSKeyRspCb,
2330 void* pUserData
2331)
2332{
2333 WDI_EventInfoType wdiEventData;
2334 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2335
2336 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002337 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 ------------------------------------------------------------------------*/
2339 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2340 {
2341 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2342 "WDI API call before module is initialized - Fail request");
2343
Jeff Johnsone7245742012-09-05 17:12:55 -07002344 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 }
2346
2347 /*------------------------------------------------------------------------
2348 Fill in Event data and post to the Main FSM
2349 ------------------------------------------------------------------------*/
2350 wdiEventData.wdiRequest = WDI_RMV_BSS_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002351 wdiEventData.pEventData = pwdiRemoveBSSKeyParams;
2352 wdiEventData.uEventDataSize = sizeof(*pwdiRemoveBSSKeyParams);
2353 wdiEventData.pCBfnc = wdiRemoveBSSKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 wdiEventData.pUserData = pUserData;
2355
2356 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2357
2358}/*WDI_RemoveBSSKeyReq*/
2359
2360
2361/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002362 @brief WDI_SetSTAKeyReq will be called when the upper MAC is
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 ready to install a STA(ast) encryption key in HW. Upon
2364 the call of this API the WLAN DAL will pack and send a
2365 HAL Set STA Key request message to the lower RIVA
2366 sub-system if DAL is in state STARTED.
2367
2368 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002369 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002370
2371 WDI_PostAssocReq must have been called.
2372
Jeff Johnsone7245742012-09-05 17:12:55 -07002373 @param wdiSetSTAKeyParams: the set STA key parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002375
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 wdiSetSTAKeyRspCb: callback for passing back the
2377 response of the set STA key operation received from the
2378 device
Jeff Johnsone7245742012-09-05 17:12:55 -07002379
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002381 callback
2382
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 @see WDI_PostAssocReq
2384 @return Result of the function call
2385*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002386WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002387WDI_SetSTAKeyReq
2388(
2389 WDI_SetSTAKeyReqParamsType* pwdiSetSTAKeyParams,
2390 WDI_SetSTAKeyRspCb wdiSetSTAKeyRspCb,
2391 void* pUserData
2392)
2393{
2394 WDI_EventInfoType wdiEventData;
2395 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2396
2397 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002398 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 ------------------------------------------------------------------------*/
2400 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2401 {
2402 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2403 "WDI API call before module is initialized - Fail request");
2404
Jeff Johnsone7245742012-09-05 17:12:55 -07002405 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 }
2407
2408 /*------------------------------------------------------------------------
2409 Fill in Event data and post to the Main FSM
2410 ------------------------------------------------------------------------*/
2411 wdiEventData.wdiRequest = WDI_SET_STA_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002412 wdiEventData.pEventData = pwdiSetSTAKeyParams;
2413 wdiEventData.uEventDataSize = sizeof(*pwdiSetSTAKeyParams);
2414 wdiEventData.pCBfnc = wdiSetSTAKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 wdiEventData.pUserData = pUserData;
2416
2417 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2418
2419}/*WDI_SetSTAKeyReq*/
2420
2421
2422/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002423 @brief WDI_RemoveSTAKeyReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 wants to uninstall a previously set STA key in HW. Upon
2425 the call of this API the WLAN DAL will pack and send a
2426 HAL Remove STA Key request message to the lower RIVA
2427 sub-system if DAL is in state STARTED.
2428
2429 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002430 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002431
2432 WDI_SetSTAKeyReq must have been called.
2433
Jeff Johnsone7245742012-09-05 17:12:55 -07002434 @param wdiRemoveSTAKeyParams: the remove STA key parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002436
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 wdiRemoveSTAKeyRspCb: callback for passing back the
2438 response of the remove STA key operation received from
2439 the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002440
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002442 callback
2443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 @see WDI_SetSTAKeyReq
2445 @return Result of the function call
2446*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002447WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002448WDI_RemoveSTAKeyReq
2449(
2450 WDI_RemoveSTAKeyReqParamsType* pwdiRemoveSTAKeyParams,
2451 WDI_RemoveSTAKeyRspCb wdiRemoveSTAKeyRspCb,
2452 void* pUserData
2453)
2454{
2455 WDI_EventInfoType wdiEventData;
2456 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2457
2458 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002459 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 ------------------------------------------------------------------------*/
2461 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2462 {
2463 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2464 "WDI API call before module is initialized - Fail request");
2465
Jeff Johnsone7245742012-09-05 17:12:55 -07002466 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 }
2468
2469 /*------------------------------------------------------------------------
2470 Fill in Event data and post to the Main FSM
2471 ------------------------------------------------------------------------*/
2472 wdiEventData.wdiRequest = WDI_RMV_STA_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002473 wdiEventData.pEventData = pwdiRemoveSTAKeyParams;
2474 wdiEventData.uEventDataSize = sizeof(*pwdiRemoveSTAKeyParams);
2475 wdiEventData.pCBfnc = wdiRemoveSTAKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 wdiEventData.pUserData = pUserData;
2477
2478 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2479
2480}/*WDI_RemoveSTAKeyReq*/
2481
2482
2483/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002484 @brief WDI_SetSTABcastKeyReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 wants to install a STA Bcast encryption key on the HW.
2486 Upon the call of this API the WLAN DAL will pack and
2487 send a HAL Start request message to the lower RIVA
2488 sub-system if DAL is in state STARTED.
2489
2490 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002491 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002492
2493 WDI_PostAssocReq must have been called.
2494
Jeff Johnsone7245742012-09-05 17:12:55 -07002495 @param pwdiSetSTABcastKeyParams: the BSS Key set parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002497
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 wdiSetSTABcastKeyRspCb: callback for passing back the
2499 response of the set BSS Key operation received from the
2500 device
Jeff Johnsone7245742012-09-05 17:12:55 -07002501
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002503 callback
2504
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 @see WDI_PostAssocReq
2506 @return Result of the function call
2507*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002508WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002509WDI_SetSTABcastKeyReq
2510(
2511 WDI_SetSTAKeyReqParamsType* pwdiSetSTABcastKeyParams,
2512 WDI_SetSTAKeyRspCb wdiSetSTABcastKeyRspCb,
2513 void* pUserData
2514)
2515
2516{
2517 WDI_EventInfoType wdiEventData;
2518 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2519
2520 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002521 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 ------------------------------------------------------------------------*/
2523 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2524 {
2525 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2526 "WDI API call before module is initialized - Fail request");
2527
Jeff Johnsone7245742012-09-05 17:12:55 -07002528 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 }
2530
2531 /*------------------------------------------------------------------------
2532 Fill in Event data and post to the Main FSM
2533 ------------------------------------------------------------------------*/
2534 wdiEventData.wdiRequest = WDI_SET_STA_BCAST_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002535 wdiEventData.pEventData = pwdiSetSTABcastKeyParams;
2536 wdiEventData.uEventDataSize = sizeof(*pwdiSetSTABcastKeyParams);
2537 wdiEventData.pCBfnc = wdiSetSTABcastKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 wdiEventData.pUserData = pUserData;
2539
2540 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2541
2542}/*WDI_SetSTABcastKeyReq*/
2543
2544/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002545 @brief WDI_RemoveSTABcastKeyReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 MAC wants to uninstall a STA Bcast key from HW. Upon the
2547 call of this API the WLAN DAL will pack and send a HAL
2548 Remove STA Bcast Key request message to the lower RIVA
2549 sub-system if DAL is in state STARTED.
2550
2551 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002552 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002553
2554 WDI_SetSTABcastKeyReq must have been called.
2555
Jeff Johnsone7245742012-09-05 17:12:55 -07002556 @param pwdiRemoveSTABcastKeyParams: the remove BSS key
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 parameters as specified by the Device
2558 Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002559
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 wdiRemoveSTABcastKeyRspCb: callback for passing back the
2561 response of the remove STA Bcast key operation received
2562 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002563
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002565 callback
2566
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 @see WDI_SetSTABcastKeyReq
2568 @return Result of the function call
2569*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002570WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002571WDI_RemoveSTABcastKeyReq
2572(
2573 WDI_RemoveSTAKeyReqParamsType* pwdiRemoveSTABcastKeyParams,
2574 WDI_RemoveSTAKeyRspCb wdiRemoveSTABcastKeyRspCb,
2575 void* pUserData
2576)
2577{
2578 WDI_EventInfoType wdiEventData;
2579 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2580
2581 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002582 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 ------------------------------------------------------------------------*/
2584 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2585 {
2586 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2587 "WDI API call before module is initialized - Fail request");
2588
Jeff Johnsone7245742012-09-05 17:12:55 -07002589 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 }
2591
2592 /*------------------------------------------------------------------------
2593 Fill in Event data and post to the Main FSM
2594 ------------------------------------------------------------------------*/
2595 wdiEventData.wdiRequest = WDI_RMV_STA_BCAST_KEY_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002596 wdiEventData.pEventData = pwdiRemoveSTABcastKeyParams;
2597 wdiEventData.uEventDataSize = sizeof(*pwdiRemoveSTABcastKeyParams);
2598 wdiEventData.pCBfnc = wdiRemoveSTABcastKeyRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 wdiEventData.pUserData = pUserData;
2600
2601 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2602
2603}/*WDI_RemoveSTABcastKeyReq*/
2604
2605/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002606 @brief WDI_SetMaxTxPowerReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 MAC wants to set Max Tx Power to HW. Upon the
2608 call of this API the WLAN DAL will pack and send a HAL
2609 Remove STA Bcast Key request message to the lower RIVA
2610 sub-system if DAL is in state STARTED.
2611
2612 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002613 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002614
2615 WDI_SetSTABcastKeyReq must have been called.
2616
Jeff Johnsone7245742012-09-05 17:12:55 -07002617 @param pwdiRemoveSTABcastKeyParams: the remove BSS key
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 parameters as specified by the Device
2619 Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002620
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 wdiRemoveSTABcastKeyRspCb: callback for passing back the
2622 response of the remove STA Bcast key operation received
2623 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002624
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002626 callback
2627
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 @see WDI_SetMaxTxPowerReq
2629 @return Result of the function call
2630*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002631WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002632WDI_SetMaxTxPowerReq
2633(
2634 WDI_SetMaxTxPowerParamsType* pwdiSetMaxTxPowerParams,
2635 WDA_SetMaxTxPowerRspCb wdiReqStatusCb,
2636 void* pUserData
2637)
2638{
2639 WDI_EventInfoType wdiEventData;
2640 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2641
2642 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002643 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 ------------------------------------------------------------------------*/
2645 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2646 {
2647 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2648 "WDI API call before module is initialized - Fail request");
2649
Jeff Johnsone7245742012-09-05 17:12:55 -07002650 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 }
2652
2653 /*------------------------------------------------------------------------
2654 Fill in Event data and post to the Main FSM
2655 ------------------------------------------------------------------------*/
2656 wdiEventData.wdiRequest = WDI_SET_MAX_TX_POWER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002657 wdiEventData.pEventData = pwdiSetMaxTxPowerParams;
2658 wdiEventData.uEventDataSize = sizeof(*pwdiSetMaxTxPowerParams);
2659 wdiEventData.pCBfnc = wdiReqStatusCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 wdiEventData.pUserData = pUserData;
2661
2662 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2663}
2664
2665#ifdef FEATURE_WLAN_CCX
2666WDI_Status
2667WDI_TSMStatsReq
2668(
2669 WDI_TSMStatsReqParamsType* pwdiTsmReqParams,
2670 WDI_TsmRspCb wdiReqStatusCb,
2671 void* pUserData
2672)
2673{
2674 WDI_EventInfoType wdiEventData;
2675 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 /*------------------------------------------------------------------------
2677 Sanity Check
2678 ------------------------------------------------------------------------*/
2679 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2680 {
2681 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2682 "WDI API call before module is initialized - Fail request");
2683
2684 return WDI_STATUS_E_NOT_ALLOWED;
2685 }
2686
2687 /*------------------------------------------------------------------------
2688 Fill in Event data and post to the Main FSM
2689 ------------------------------------------------------------------------*/
2690 wdiEventData.wdiRequest = WDI_TSM_STATS_REQ;
2691 wdiEventData.pEventData = pwdiTsmReqParams;
2692 wdiEventData.uEventDataSize = sizeof(*pwdiTsmReqParams);
2693 wdiEventData.pCBfnc = wdiReqStatusCb;
2694 wdiEventData.pUserData = pUserData;
2695
2696 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2697
2698}
2699#endif
2700
2701/*========================================================================
2702
2703 QoS and BA APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07002704
Jeff Johnson295189b2012-06-20 16:38:30 -07002705==========================================================================*/
2706
2707/**
2708 @brief WDI_AddTSReq will be called when the upper MAC to inform
2709 the device of a successful add TSpec negotiation. HW
2710 needs to receive the TSpec Info from the UMAC in order
2711 to configure properly the QoS data traffic. Upon the
2712 call of this API the WLAN DAL will pack and send a HAL
2713 Add TS request message to the lower RIVA sub-system if
2714 DAL is in state STARTED.
2715
2716 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002717 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002718
2719 WDI_PostAssocReq must have been called.
2720
2721 @param wdiAddTsReqParams: the add TS parameters as specified by
2722 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002723
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 wdiAddTsRspCb: callback for passing back the response of
2725 the add TS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002726
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002728 callback
2729
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 @see WDI_PostAssocReq
2731 @return Result of the function call
2732*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002733WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002734WDI_AddTSReq
2735(
2736 WDI_AddTSReqParamsType* pwdiAddTsReqParams,
2737 WDI_AddTsRspCb wdiAddTsRspCb,
2738 void* pUserData
2739)
2740{
2741 WDI_EventInfoType wdiEventData;
2742 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2743
2744 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002745 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 ------------------------------------------------------------------------*/
2747 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2748 {
2749 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2750 "WDI API call before module is initialized - Fail request");
2751
Jeff Johnsone7245742012-09-05 17:12:55 -07002752 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 }
2754
2755 /*------------------------------------------------------------------------
2756 Fill in Event data and post to the Main FSM
2757 ------------------------------------------------------------------------*/
2758 wdiEventData.wdiRequest = WDI_ADD_TS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002759 wdiEventData.pEventData = pwdiAddTsReqParams;
2760 wdiEventData.uEventDataSize = sizeof(*pwdiAddTsReqParams);
2761 wdiEventData.pCBfnc = wdiAddTsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 wdiEventData.pUserData = pUserData;
2763
2764 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2765
2766}/*WDI_AddTSReq*/
2767
2768
2769
2770/**
2771 @brief WDI_DelTSReq will be called when the upper MAC has ended
2772 admission on a specific AC. This is to inform HW that
2773 QoS traffic parameters must be rest. Upon the call of
2774 this API the WLAN DAL will pack and send a HAL Del TS
2775 request message to the lower RIVA sub-system if DAL is
2776 in state STARTED.
2777
2778 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002779 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002780
2781 WDI_AddTSReq must have been called.
2782
2783 @param wdiDelTsReqParams: the del TS parameters as specified by
2784 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002785
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 wdiDelTsRspCb: callback for passing back the response of
2787 the del TS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002788
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002790 callback
2791
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 @see WDI_AddTSReq
2793 @return Result of the function call
2794*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002795WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002796WDI_DelTSReq
2797(
2798 WDI_DelTSReqParamsType* pwdiDelTsReqParams,
2799 WDI_DelTsRspCb wdiDelTsRspCb,
2800 void* pUserData
2801)
2802{
2803 WDI_EventInfoType wdiEventData;
2804 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2805
2806 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002807 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 ------------------------------------------------------------------------*/
2809 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2810 {
2811 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2812 "WDI API call before module is initialized - Fail request");
2813
Jeff Johnsone7245742012-09-05 17:12:55 -07002814 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 }
2816
2817 /*------------------------------------------------------------------------
2818 Fill in Event data and post to the Main FSM
2819 ------------------------------------------------------------------------*/
2820 wdiEventData.wdiRequest = WDI_DEL_TS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002821 wdiEventData.pEventData = pwdiDelTsReqParams;
2822 wdiEventData.uEventDataSize = sizeof(*pwdiDelTsReqParams);
2823 wdiEventData.pCBfnc = wdiDelTsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 wdiEventData.pUserData = pUserData;
2825
2826 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2827
2828}/*WDI_DelTSReq*/
2829
2830
2831
2832/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002833 @brief WDI_UpdateEDCAParams will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 wishes to update the EDCA parameters used by HW for QoS
2835 data traffic. Upon the call of this API the WLAN DAL
2836 will pack and send a HAL Update EDCA Params request
2837 message to the lower RIVA sub-system if DAL is in state
2838 STARTED.
2839
2840 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002841 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002842
2843 WDI_PostAssocReq must have been called.
2844
Jeff Johnsone7245742012-09-05 17:12:55 -07002845 @param wdiUpdateEDCAParams: the start parameters as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002847
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 wdiUpdateEDCAParamsRspCb: callback for passing back the
2849 response of the start operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002850
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002852 callback
2853
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 @see WDI_PostAssocReq
2855 @return Result of the function call
2856*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002857WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002858WDI_UpdateEDCAParams
2859(
2860 WDI_UpdateEDCAParamsType* pwdiUpdateEDCAParams,
2861 WDI_UpdateEDCAParamsRspCb wdiUpdateEDCAParamsRspCb,
2862 void* pUserData
2863)
2864{
2865 WDI_EventInfoType wdiEventData;
2866 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2867
2868 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002869 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 ------------------------------------------------------------------------*/
2871 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2872 {
2873 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2874 "WDI API call before module is initialized - Fail request");
2875
Jeff Johnsone7245742012-09-05 17:12:55 -07002876 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 }
2878
2879 /*------------------------------------------------------------------------
2880 Fill in Event data and post to the Main FSM
2881 ------------------------------------------------------------------------*/
2882 wdiEventData.wdiRequest = WDI_UPD_EDCA_PRMS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002883 wdiEventData.pEventData = pwdiUpdateEDCAParams;
2884 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateEDCAParams);
2885 wdiEventData.pCBfnc = wdiUpdateEDCAParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 wdiEventData.pUserData = pUserData;
2887
2888 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2889
2890}/*WDI_UpdateEDCAParams*/
2891
2892
2893/**
2894 @brief WDI_AddBASessionReq will be called when the upper MAC has setup
2895 successfully a BA session and needs to notify the HW for
2896 the appropriate settings to take place. Upon the call of
2897 this API the WLAN DAL will pack and send a HAL Add BA
2898 request message to the lower RIVA sub-system if DAL is
2899 in state STARTED.
2900
2901 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002902 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002903
2904 WDI_PostAssocReq must have been called.
2905
2906 @param wdiAddBAReqParams: the add BA parameters as specified by
2907 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002908
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 wdiAddBARspCb: callback for passing back the response of
2910 the add BA operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002911
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002913 callback
2914
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 @see WDI_PostAssocReq
2916 @return Result of the function call
2917*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002918WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002919WDI_AddBASessionReq
2920(
2921 WDI_AddBASessionReqParamsType* pwdiAddBASessionReqParams,
2922 WDI_AddBASessionRspCb wdiAddBASessionRspCb,
2923 void* pUserData
2924)
2925{
2926 WDI_EventInfoType wdiEventData;
2927 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2928
2929 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002930 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 ------------------------------------------------------------------------*/
2932 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2933 {
2934 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2935 "WDI API call before module is initialized - Fail request");
2936
Jeff Johnsone7245742012-09-05 17:12:55 -07002937 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 }
2939
2940 /*------------------------------------------------------------------------
2941 Fill in Event data and post to the Main FSM
2942 ------------------------------------------------------------------------*/
2943 wdiEventData.wdiRequest = WDI_ADD_BA_SESSION_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002944 wdiEventData.pEventData = pwdiAddBASessionReqParams;
2945 wdiEventData.uEventDataSize = sizeof(*pwdiAddBASessionReqParams);
2946 wdiEventData.pCBfnc = wdiAddBASessionRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 wdiEventData.pUserData = pUserData;
2948
2949 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
2950
2951}/*WDI_AddBASessionReq*/
2952
2953/**
Jeff Johnsone7245742012-09-05 17:12:55 -07002954 @brief WDI_DelBAReq will be called when the upper MAC wants to
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 inform HW that it has deleted a previously created BA
2956 session. Upon the call of this API the WLAN DAL will
2957 pack and send a HAL Del BA request message to the lower
2958 RIVA sub-system if DAL is in state STARTED.
2959
2960 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07002961 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07002962
2963 WDI_AddBAReq must have been called.
2964
2965 @param wdiDelBAReqParams: the del BA parameters as specified by
2966 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07002967
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 wdiDelBARspCb: callback for passing back the response of
2969 the del BA operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07002970
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07002972 callback
2973
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 @see WDI_AddBAReq
2975 @return Result of the function call
2976*/
Jeff Johnsone7245742012-09-05 17:12:55 -07002977WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07002978WDI_DelBAReq
2979(
2980 WDI_DelBAReqParamsType* pwdiDelBAReqParams,
2981 WDI_DelBARspCb wdiDelBARspCb,
2982 void* pUserData
2983)
2984{
2985 WDI_EventInfoType wdiEventData;
2986 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2987
2988 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07002989 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 ------------------------------------------------------------------------*/
2991 if ( eWLAN_PAL_FALSE == gWDIInitialized )
2992 {
2993 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
2994 "WDI API call before module is initialized - Fail request");
2995
Jeff Johnsone7245742012-09-05 17:12:55 -07002996 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 }
2998
2999 /*------------------------------------------------------------------------
3000 Fill in Event data and post to the Main FSM
3001 ------------------------------------------------------------------------*/
3002 wdiEventData.wdiRequest = WDI_DEL_BA_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003003 wdiEventData.pEventData = pwdiDelBAReqParams;
3004 wdiEventData.uEventDataSize = sizeof(*pwdiDelBAReqParams);
3005 wdiEventData.pCBfnc = wdiDelBARspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 wdiEventData.pUserData = pUserData;
3007
3008 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3009
3010}/*WDI_DelBAReq*/
3011
Jeff Johnsone7245742012-09-05 17:12:55 -07003012/*========================================================================
3013
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 Power Save APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07003015
Jeff Johnson295189b2012-06-20 16:38:30 -07003016==========================================================================*/
3017
3018/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003019 @brief WDI_SetPwrSaveCfgReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 wants to set the power save related configurations of
3021 the WLAN Device. Upon the call of this API the WLAN DAL
3022 will pack and send a HAL Update CFG request message to
3023 the lower RIVA sub-system if DAL is in state STARTED.
3024
3025 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003026 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003027
3028 WDI_Start must have been called.
3029
Jeff Johnsone7245742012-09-05 17:12:55 -07003030 @param pwdiPowerSaveCfg: the power save cfg parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003032
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 wdiSetPwrSaveCfgCb: callback for passing back the
3034 response of the set power save cfg operation received
3035 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003036
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003038 callback
3039
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 @see WDI_Start
Jeff Johnsone7245742012-09-05 17:12:55 -07003041 @return Result of the function call
3042*/
3043WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003044WDI_SetPwrSaveCfgReq
3045(
3046 WDI_UpdateCfgReqParamsType* pwdiPowerSaveCfg,
3047 WDI_SetPwrSaveCfgCb wdiSetPwrSaveCfgCb,
3048 void* pUserData
3049)
3050{
3051 WDI_EventInfoType wdiEventData;
3052 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3053
3054 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003055 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 ------------------------------------------------------------------------*/
3057 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3058 {
3059 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3060 "WDI API call before module is initialized - Fail request");
3061
Jeff Johnsone7245742012-09-05 17:12:55 -07003062 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 }
3064
3065 /*------------------------------------------------------------------------
3066 Fill in Event data and post to the Main FSM
3067 ------------------------------------------------------------------------*/
3068 wdiEventData.wdiRequest = WDI_UPDATE_CFG_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003069 wdiEventData.pEventData = pwdiPowerSaveCfg;
3070 wdiEventData.uEventDataSize = sizeof(*pwdiPowerSaveCfg);
3071 wdiEventData.pCBfnc = wdiSetPwrSaveCfgCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 wdiEventData.pUserData = pUserData;
3073
3074 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3075
3076}/*WDI_SetPwrSaveCfgReq*/
3077
3078/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003079 @brief WDI_EnterImpsReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 request the device to get into IMPS power state. Upon
3081 the call of this API the WLAN DAL will send a HAL Enter
3082 IMPS request message to the lower RIVA sub-system if DAL
3083 is in state STARTED.
3084
3085 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003086 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003087
Jeff Johnsone7245742012-09-05 17:12:55 -07003088
3089 @param wdiEnterImpsRspCb: callback for passing back the
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 response of the Enter IMPS operation received from the
3091 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003092
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003094 callback
3095
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 @see WDI_Start
3097 @return Result of the function call
3098*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003099WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003100WDI_EnterImpsReq
3101(
3102 WDI_EnterImpsRspCb wdiEnterImpsRspCb,
3103 void* pUserData
3104)
3105{
3106 WDI_EventInfoType wdiEventData;
3107 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3108
3109 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003110 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 ------------------------------------------------------------------------*/
3112 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3113 {
3114 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3115 "WDI API call before module is initialized - Fail request");
3116
Jeff Johnsone7245742012-09-05 17:12:55 -07003117 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 }
3119
3120 /*------------------------------------------------------------------------
3121 Fill in Event data and post to the Main FSM
3122 ------------------------------------------------------------------------*/
3123 wdiEventData.wdiRequest = WDI_ENTER_IMPS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003124 wdiEventData.pEventData = NULL;
3125 wdiEventData.uEventDataSize = 0;
3126 wdiEventData.pCBfnc = wdiEnterImpsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 wdiEventData.pUserData = pUserData;
3128
3129 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3130
3131}/*WDI_EnterImpsReq*/
3132
3133/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003134 @brief WDI_ExitImpsReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 request the device to get out of IMPS power state. Upon
3136 the call of this API the WLAN DAL will send a HAL Exit
3137 IMPS request message to the lower RIVA sub-system if DAL
3138 is in state STARTED.
3139
3140 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003141 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003142
Jeff Johnson295189b2012-06-20 16:38:30 -07003143
Jeff Johnsone7245742012-09-05 17:12:55 -07003144
3145 @param wdiExitImpsRspCb: callback for passing back the response
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 of the Exit IMPS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003147
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003149 callback
3150
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 @see WDI_Start
3152 @return Result of the function call
3153*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003154WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003155WDI_ExitImpsReq
3156(
3157 WDI_ExitImpsRspCb wdiExitImpsRspCb,
3158 void* pUserData
3159)
3160{
3161 WDI_EventInfoType wdiEventData;
3162 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3163
3164 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003165 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 ------------------------------------------------------------------------*/
3167 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3168 {
3169 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3170 "WDI API call before module is initialized - Fail request");
3171
Jeff Johnsone7245742012-09-05 17:12:55 -07003172 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 }
3174
3175 /*------------------------------------------------------------------------
3176 Fill in Event data and post to the Main FSM
3177 ------------------------------------------------------------------------*/
3178 wdiEventData.wdiRequest = WDI_EXIT_IMPS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003179 wdiEventData.pEventData = NULL;
3180 wdiEventData.uEventDataSize = 0;
3181 wdiEventData.pCBfnc = wdiExitImpsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 wdiEventData.pUserData = pUserData;
3183
3184 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3185
3186}/*WDI_ExitImpsReq*/
3187
3188/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003189 @brief WDI_EnterBmpsReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 request the device to get into BMPS power state. Upon
3191 the call of this API the WLAN DAL will pack and send a
3192 HAL Enter BMPS request message to the lower RIVA
3193 sub-system if DAL is in state STARTED.
3194
3195 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003196 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003197
3198 WDI_PostAssocReq must have been called.
3199
Jeff Johnsone7245742012-09-05 17:12:55 -07003200 @param pwdiEnterBmpsReqParams: the Enter BMPS parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003202
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 wdiEnterBmpsRspCb: callback for passing back the
3204 response of the Enter BMPS operation received from the
3205 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003206
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003208 callback
3209
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 @see WDI_PostAssocReq
3211 @return Result of the function call
3212*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003213WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003214WDI_EnterBmpsReq
3215(
3216 WDI_EnterBmpsReqParamsType *pwdiEnterBmpsReqParams,
3217 WDI_EnterBmpsRspCb wdiEnterBmpsRspCb,
3218 void* pUserData
3219)
3220{
3221 WDI_EventInfoType wdiEventData;
3222 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3223
3224 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003225 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 ------------------------------------------------------------------------*/
3227 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3228 {
3229 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3230 "WDI API call before module is initialized - Fail request");
3231
Jeff Johnsone7245742012-09-05 17:12:55 -07003232 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 }
3234
3235 /*------------------------------------------------------------------------
3236 Fill in Event data and post to the Main FSM
3237 ------------------------------------------------------------------------*/
3238 wdiEventData.wdiRequest = WDI_ENTER_BMPS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003239 wdiEventData.pEventData = pwdiEnterBmpsReqParams;
3240 wdiEventData.uEventDataSize = sizeof(*pwdiEnterBmpsReqParams);
3241 wdiEventData.pCBfnc = wdiEnterBmpsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 wdiEventData.pUserData = pUserData;
3243
3244 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3245
3246}/*WDI_EnterBmpsReq*/
3247
3248/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003249 @brief WDI_ExitBmpsReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 request the device to get out of BMPS power state. Upon
3251 the call of this API the WLAN DAL will pack and send a
3252 HAL Exit BMPS request message to the lower RIVA
3253 sub-system if DAL is in state STARTED.
3254
3255 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003256 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003257
3258 WDI_PostAssocReq must have been called.
3259
Jeff Johnsone7245742012-09-05 17:12:55 -07003260 @param pwdiExitBmpsReqParams: the Exit BMPS parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003262
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 wdiExitBmpsRspCb: callback for passing back the response
3264 of the Exit BMPS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003265
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003267 callback
3268
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 @see WDI_PostAssocReq
3270 @return Result of the function call
3271*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003272WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003273WDI_ExitBmpsReq
3274(
3275 WDI_ExitBmpsReqParamsType *pwdiExitBmpsReqParams,
3276 WDI_ExitBmpsRspCb wdiExitBmpsRspCb,
3277 void* pUserData
3278)
3279{
3280 WDI_EventInfoType wdiEventData;
3281 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3282
3283 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003284 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 ------------------------------------------------------------------------*/
3286 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3287 {
3288 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3289 "WDI API call before module is initialized - Fail request");
3290
Jeff Johnsone7245742012-09-05 17:12:55 -07003291 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 }
3293
3294 /*------------------------------------------------------------------------
3295 Fill in Event data and post to the Main FSM
3296 ------------------------------------------------------------------------*/
3297 wdiEventData.wdiRequest = WDI_EXIT_BMPS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003298 wdiEventData.pEventData = pwdiExitBmpsReqParams;
3299 wdiEventData.uEventDataSize = sizeof(*pwdiExitBmpsReqParams);
3300 wdiEventData.pCBfnc = wdiExitBmpsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 wdiEventData.pUserData = pUserData;
3302
3303 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3304
3305}/*WDI_ExitBmpsReq*/
3306
3307/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003308 @brief WDI_EnterUapsdReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 request the device to get into UAPSD power state. Upon
3310 the call of this API the WLAN DAL will pack and send a
3311 HAL Enter UAPSD request message to the lower RIVA
3312 sub-system if DAL is in state STARTED.
3313
3314 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003315 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003316
3317 WDI_PostAssocReq must have been called.
3318 WDI_SetUapsdAcParamsReq must have been called.
Jeff Johnsone7245742012-09-05 17:12:55 -07003319
3320 @param pwdiEnterUapsdReqParams: the Enter UAPSD parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003322
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 wdiEnterUapsdRspCb: callback for passing back the
3324 response of the Enter UAPSD operation received from the
3325 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003326
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003328 callback
3329
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 @see WDI_PostAssocReq, WDI_SetUapsdAcParamsReq
3331 @return Result of the function call
3332*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003333WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003334WDI_EnterUapsdReq
3335(
3336 WDI_EnterUapsdReqParamsType *pwdiEnterUapsdReqParams,
3337 WDI_EnterUapsdRspCb wdiEnterUapsdRspCb,
3338 void* pUserData
3339)
3340{
3341 WDI_EventInfoType wdiEventData;
3342 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3343
3344 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003345 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 ------------------------------------------------------------------------*/
3347 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3348 {
3349 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3350 "WDI API call before module is initialized - Fail request");
3351
Jeff Johnsone7245742012-09-05 17:12:55 -07003352 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 }
3354
3355 /*------------------------------------------------------------------------
3356 Fill in Event data and post to the Main FSM
3357 ------------------------------------------------------------------------*/
3358 wdiEventData.wdiRequest = WDI_ENTER_UAPSD_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003359 wdiEventData.pEventData = pwdiEnterUapsdReqParams;
3360 wdiEventData.uEventDataSize = sizeof(*pwdiEnterUapsdReqParams);
3361 wdiEventData.pCBfnc = wdiEnterUapsdRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 wdiEventData.pUserData = pUserData;
3363
3364 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3365
3366}/*WDI_EnterUapsdReq*/
3367
3368/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003369 @brief WDI_ExitUapsdReq will be called when the upper MAC to
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 request the device to get out of UAPSD power state. Upon
3371 the call of this API the WLAN DAL will send a HAL Exit
3372 UAPSD request message to the lower RIVA sub-system if
3373 DAL is in state STARTED.
3374
3375 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003376 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003377
3378 WDI_PostAssocReq must have been called.
3379
Jeff Johnsone7245742012-09-05 17:12:55 -07003380 @param wdiExitUapsdRspCb: callback for passing back the
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 response of the Exit UAPSD operation received from the
3382 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003383
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003385 callback
3386
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 @see WDI_PostAssocReq
3388 @return Result of the function call
3389*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003390WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003391WDI_ExitUapsdReq
3392(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07003393 WDI_ExitUapsdReqParamsType *pwdiExitUapsdReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 WDI_ExitUapsdRspCb wdiExitUapsdRspCb,
3395 void* pUserData
3396)
3397{
3398 WDI_EventInfoType wdiEventData;
3399 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3400
3401 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003402 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 ------------------------------------------------------------------------*/
3404 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3405 {
3406 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3407 "WDI API call before module is initialized - Fail request");
3408
Jeff Johnsone7245742012-09-05 17:12:55 -07003409 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 }
3411
3412 /*------------------------------------------------------------------------
3413 Fill in Event data and post to the Main FSM
3414 ------------------------------------------------------------------------*/
3415 wdiEventData.wdiRequest = WDI_EXIT_UAPSD_REQ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07003416 wdiEventData.pEventData = pwdiExitUapsdReqParams;
3417 wdiEventData.uEventDataSize = sizeof(*pwdiExitUapsdReqParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07003418 wdiEventData.pCBfnc = wdiExitUapsdRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 wdiEventData.pUserData = pUserData;
3420
3421 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3422
3423}/*WDI_ExitUapsdReq*/
3424
3425/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003426 @brief WDI_UpdateUapsdParamsReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 MAC wants to set the UAPSD related configurations
3428 of an associated STA (while acting as an AP) to the WLAN
3429 Device. Upon the call of this API the WLAN DAL will pack
3430 and send a HAL Update UAPSD params request message to
3431 the lower RIVA sub-system if DAL is in state STARTED.
3432
3433 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003434 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003435
3436 WDI_ConfigBSSReq must have been called.
3437
Jeff Johnsone7245742012-09-05 17:12:55 -07003438 @param pwdiUpdateUapsdReqParams: the UAPSD parameters
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 as specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003440
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 wdiUpdateUapsdParamsCb: callback for passing back the
3442 response of the update UAPSD params operation received
3443 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003444
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003446 callback
3447
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 @see WDI_ConfigBSSReq
3449 @return Result of the function call
3450*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003451WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003452WDI_UpdateUapsdParamsReq
3453(
3454 WDI_UpdateUapsdReqParamsType *pwdiUpdateUapsdReqParams,
3455 WDI_UpdateUapsdParamsCb wdiUpdateUapsdParamsCb,
3456 void* pUserData
3457)
3458{
3459 WDI_EventInfoType wdiEventData;
3460 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3461
3462 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003463 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 ------------------------------------------------------------------------*/
3465 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3466 {
3467 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3468 "WDI API call before module is initialized - Fail request");
3469
Jeff Johnsone7245742012-09-05 17:12:55 -07003470 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 }
3472
3473 /*------------------------------------------------------------------------
3474 Fill in Event data and post to the Main FSM
3475 ------------------------------------------------------------------------*/
3476 wdiEventData.wdiRequest = WDI_UPDATE_UAPSD_PARAM_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003477 wdiEventData.pEventData = pwdiUpdateUapsdReqParams;
3478 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateUapsdReqParams);;
3479 wdiEventData.pCBfnc = wdiUpdateUapsdParamsCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 wdiEventData.pUserData = pUserData;
3481
3482 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3483
3484}/*WDI_UpdateUapsdParamsReq*/
3485
3486/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003487 @brief WDI_SetUapsdAcParamsReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 MAC wants to set the UAPSD related configurations before
3489 requesting for enter UAPSD power state to the WLAN
3490 Device. Upon the call of this API the WLAN DAL will pack
3491 and send a HAL Set UAPSD params request message to
3492 the lower RIVA sub-system if DAL is in state STARTED.
3493
3494 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003495 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003496
3497 WDI_PostAssocReq must have been called.
3498
3499 @param pwdiUapsdInfo: the UAPSD parameters as specified by
3500 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003501
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 wdiSetUapsdAcParamsCb: callback for passing back the
3503 response of the set UAPSD params operation received from
3504 the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003505
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003507 callback
3508
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 @see WDI_PostAssocReq
3510 @return Result of the function call
3511*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003512WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003513WDI_SetUapsdAcParamsReq
3514(
3515 WDI_SetUapsdAcParamsReqParamsType* pwdiUapsdInfo,
3516 WDI_SetUapsdAcParamsCb wdiSetUapsdAcParamsCb,
3517 void* pUserData
3518)
3519{
3520 WDI_EventInfoType wdiEventData;
3521 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3522
3523 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003524 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 ------------------------------------------------------------------------*/
3526 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3527 {
3528 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3529 "WDI API call before module is initialized - Fail request");
3530
Jeff Johnsone7245742012-09-05 17:12:55 -07003531 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 }
3533
3534 /*------------------------------------------------------------------------
3535 Fill in Event data and post to the Main FSM
3536 ------------------------------------------------------------------------*/
3537 wdiEventData.wdiRequest = WDI_SET_UAPSD_PARAM_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003538 wdiEventData.pEventData = pwdiUapsdInfo;
3539 wdiEventData.uEventDataSize = sizeof(*pwdiUapsdInfo);
3540 wdiEventData.pCBfnc = wdiSetUapsdAcParamsCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 wdiEventData.pUserData = pUserData;
3542
3543 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3544
3545}/*WDI_SetUapsdAcParamsReq*/
3546
3547/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003548 @brief WDI_ConfigureRxpFilterReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 MAC wants to set/reset the RXP filters for received pkts
3550 (MC, BC etc.). Upon the call of this API the WLAN DAL will pack
3551 and send a HAL configure RXP filter request message to
3552 the lower RIVA sub-system.
3553
3554 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003555 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003556
Jeff Johnsone7245742012-09-05 17:12:55 -07003557
3558 @param pwdiConfigureRxpFilterReqParams: the RXP
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 filter as specified by the Device
3560 Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003561
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 wdiConfigureRxpFilterCb: callback for passing back the
3563 response of the configure RXP filter operation received
3564 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003565
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003567 callback
3568
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 @return Result of the function call
3570*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003571WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003572WDI_ConfigureRxpFilterReq
3573(
3574 WDI_ConfigureRxpFilterReqParamsType *pwdiConfigureRxpFilterReqParams,
3575 WDI_ConfigureRxpFilterCb wdiConfigureRxpFilterCb,
3576 void* pUserData
3577)
3578{
3579 WDI_EventInfoType wdiEventData;
3580 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3581
3582 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003583 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 ------------------------------------------------------------------------*/
3585 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3586 {
3587 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3588 "WDI API call before module is initialized - Fail request");
3589
Jeff Johnsone7245742012-09-05 17:12:55 -07003590 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 }
3592
3593 /*------------------------------------------------------------------------
3594 Fill in Event data and post to the Main FSM
3595 ------------------------------------------------------------------------*/
3596 wdiEventData.wdiRequest = WDI_CONFIGURE_RXP_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003597 wdiEventData.pEventData = pwdiConfigureRxpFilterReqParams;
3598 wdiEventData.uEventDataSize = sizeof(*pwdiConfigureRxpFilterReqParams);
3599 wdiEventData.pCBfnc = wdiConfigureRxpFilterCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 wdiEventData.pUserData = pUserData;
3601
3602 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3603}/*WDI_ConfigureRxpFilterReq*/
3604
3605/**
3606 @brief WDI_SetBeaconFilterReq will be called when the upper MAC
3607 wants to set the beacon filters while in power save.
3608 Upon the call of this API the WLAN DAL will pack and
3609 send a Beacon filter request message to the
3610 lower RIVA sub-system.
3611
3612 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003613 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003614
Jeff Johnsone7245742012-09-05 17:12:55 -07003615
3616 @param pwdiBeaconFilterReqParams: the beacon
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 filter as specified by the Device
3618 Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003619
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 wdiBeaconFilterCb: callback for passing back the
3621 response of the set beacon filter operation received
3622 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003623
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003625 callback
3626
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 @return Result of the function call
3628*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003629WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003630WDI_SetBeaconFilterReq
3631(
3632 WDI_BeaconFilterReqParamsType *pwdiBeaconFilterReqParams,
3633 WDI_SetBeaconFilterCb wdiBeaconFilterCb,
3634 void* pUserData
3635)
3636{
3637 WDI_EventInfoType wdiEventData;
3638 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3639
3640 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003641 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 ------------------------------------------------------------------------*/
3643 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3644 {
3645 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3646 "WDI API call before module is initialized - Fail request");
3647
Jeff Johnsone7245742012-09-05 17:12:55 -07003648 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 }
3650
3651 /*------------------------------------------------------------------------
3652 Fill in Event data and post to the Main FSM
3653 ------------------------------------------------------------------------*/
3654 wdiEventData.wdiRequest = WDI_SET_BEACON_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003655 wdiEventData.pEventData = pwdiBeaconFilterReqParams;
3656 wdiEventData.uEventDataSize = sizeof(*pwdiBeaconFilterReqParams);;
3657 wdiEventData.pCBfnc = wdiBeaconFilterCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 wdiEventData.pUserData = pUserData;
3659
3660 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3661}/*WDI_SetBeaconFilterReq*/
3662
3663/**
3664 @brief WDI_RemBeaconFilterReq will be called when the upper MAC
3665 wants to remove the beacon filter for particular IE
3666 while in power save. Upon the call of this API the WLAN
3667 DAL will pack and send a remove Beacon filter request
3668 message to the lower RIVA sub-system.
3669
3670 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003671 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003672
Jeff Johnsone7245742012-09-05 17:12:55 -07003673
3674 @param pwdiBeaconFilterReqParams: the beacon
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 filter as specified by the Device
3676 Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003677
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 wdiBeaconFilterCb: callback for passing back the
3679 response of the remove beacon filter operation received
3680 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003681
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003683 callback
3684
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 @return Result of the function call
3686*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003687WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003688WDI_RemBeaconFilterReq
3689(
3690 WDI_RemBeaconFilterReqParamsType *pwdiBeaconFilterReqParams,
3691 WDI_RemBeaconFilterCb wdiBeaconFilterCb,
3692 void* pUserData
3693)
3694{
3695 WDI_EventInfoType wdiEventData;
3696 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3697
3698 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003699 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 ------------------------------------------------------------------------*/
3701 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3702 {
3703 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3704 "WDI API call before module is initialized - Fail request");
3705
Jeff Johnsone7245742012-09-05 17:12:55 -07003706 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 }
3708
3709 /*------------------------------------------------------------------------
3710 Fill in Event data and post to the Main FSM
3711 ------------------------------------------------------------------------*/
3712 wdiEventData.wdiRequest = WDI_REM_BEACON_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003713 wdiEventData.pEventData = pwdiBeaconFilterReqParams;
3714 wdiEventData.uEventDataSize = sizeof(*pwdiBeaconFilterReqParams);;
3715 wdiEventData.pCBfnc = wdiBeaconFilterCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 wdiEventData.pUserData = pUserData;
3717
3718 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3719}/*WDI_RemBeaconFilterReq*/
3720
3721/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003722 @brief WDI_SetRSSIThresholdsReq will be called when the upper
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 MAC wants to set the RSSI thresholds related
3724 configurations while in power save. Upon the call of
3725 this API the WLAN DAL will pack and send a HAL Set RSSI
3726 thresholds request message to the lower RIVA
3727 sub-system if DAL is in state STARTED.
3728
3729 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003730 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003731
3732 WDI_PostAssocReq must have been called.
3733
3734 @param pwdiUapsdInfo: the UAPSD parameters as specified by
3735 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003736
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 wdiSetUapsdAcParamsCb: callback for passing back the
3738 response of the set UAPSD params operation received from
3739 the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003740
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003742 callback
3743
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 @see WDI_PostAssocReq
3745 @return Result of the function call
3746*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003747WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003748WDI_SetRSSIThresholdsReq
3749(
3750 WDI_SetRSSIThresholdsReqParamsType* pwdiRSSIThresholdsParams,
3751 WDI_SetRSSIThresholdsCb wdiSetRSSIThresholdsCb,
3752 void* pUserData
3753)
3754{
3755 WDI_EventInfoType wdiEventData;
3756 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3757
3758 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003759 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 ------------------------------------------------------------------------*/
3761 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3762 {
3763 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3764 "WDI API call before module is initialized - Fail request");
3765
Jeff Johnsone7245742012-09-05 17:12:55 -07003766 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 }
3768
3769 /*------------------------------------------------------------------------
3770 Fill in Event data and post to the Main FSM
3771 ------------------------------------------------------------------------*/
3772 wdiEventData.wdiRequest = WDI_SET_RSSI_THRESHOLDS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003773 wdiEventData.pEventData = pwdiRSSIThresholdsParams;
3774 wdiEventData.uEventDataSize = sizeof(*pwdiRSSIThresholdsParams);;
3775 wdiEventData.pCBfnc = wdiSetRSSIThresholdsCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 wdiEventData.pUserData = pUserData;
3777
3778 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3779}/* WDI_SetRSSIThresholdsReq*/
3780
3781/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003782 @brief WDI_HostOffloadReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 wants to set the filter to minimize unnecessary host
3784 wakeup due to broadcast traffic while in power save.
3785 Upon the call of this API the WLAN DAL will pack and
3786 send a HAL host offload request message to the
3787 lower RIVA sub-system if DAL is in state STARTED.
3788
3789 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003790 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003791
3792 WDI_PostAssocReq must have been called.
3793
Jeff Johnsone7245742012-09-05 17:12:55 -07003794 @param pwdiHostOffloadParams: the host offload as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003796
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 wdiHostOffloadCb: callback for passing back the response
3798 of the host offload operation received from the
3799 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003800
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003802 callback
3803
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 @see WDI_PostAssocReq
3805 @return Result of the function call
3806*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003807WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003808WDI_HostOffloadReq
3809(
3810 WDI_HostOffloadReqParamsType* pwdiHostOffloadParams,
3811 WDI_HostOffloadCb wdiHostOffloadCb,
3812 void* pUserData
3813)
3814{
3815 WDI_EventInfoType wdiEventData;
3816 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3817
3818 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003819 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 ------------------------------------------------------------------------*/
3821 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3822 {
3823 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3824 "WDI API call before module is initialized - Fail request");
3825
Jeff Johnsone7245742012-09-05 17:12:55 -07003826 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003827 }
3828
3829 /*------------------------------------------------------------------------
3830 Fill in Event data and post to the Main FSM
3831 ------------------------------------------------------------------------*/
3832 wdiEventData.wdiRequest = WDI_HOST_OFFLOAD_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003833 wdiEventData.pEventData = pwdiHostOffloadParams;
3834 wdiEventData.uEventDataSize = sizeof(*pwdiHostOffloadParams);;
3835 wdiEventData.pCBfnc = wdiHostOffloadCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003836 wdiEventData.pUserData = pUserData;
3837
3838 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3839}/*WDI_HostOffloadReq*/
3840
3841/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003842 @brief WDI_KeepAliveReq will be called when the upper MAC
3843 wants to set the filter to send NULL or unsolicited ARP responses
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 and minimize unnecessary host wakeups due to while in power save.
3845 Upon the call of this API the WLAN DAL will pack and
3846 send a HAL Keep Alive request message to the
3847 lower RIVA sub-system if DAL is in state STARTED.
3848
3849 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003850 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003851
3852 WDI_PostAssocReq must have been called.
3853
Jeff Johnsone7245742012-09-05 17:12:55 -07003854 @param pwdiKeepAliveParams: the Keep Alive as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003856
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 wdiKeepAliveCb: callback for passing back the response
3858 of the Keep Alive operation received from the
3859 device
Jeff Johnsone7245742012-09-05 17:12:55 -07003860
Jeff Johnson295189b2012-06-20 16:38:30 -07003861 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003862 callback
3863
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 @see WDI_PostAssocReq
3865 @return Result of the function call
3866*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003867WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003868WDI_KeepAliveReq
3869(
3870 WDI_KeepAliveReqParamsType* pwdiKeepAliveParams,
3871 WDI_KeepAliveCb wdiKeepAliveCb,
3872 void* pUserData
3873)
3874{
3875 WDI_EventInfoType wdiEventData;
3876 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3877
3878 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003879 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 ------------------------------------------------------------------------*/
3881 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3882 {
3883 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3884 "WDI_KeepAliveReq: WDI API call before module "
3885 "is initialized - Fail request");
3886
Jeff Johnsone7245742012-09-05 17:12:55 -07003887 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 }
3889
3890 /*------------------------------------------------------------------------
3891 Fill in Event data and post to the Main FSM
3892 ------------------------------------------------------------------------*/
3893 wdiEventData.wdiRequest = WDI_KEEP_ALIVE_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003894 wdiEventData.pEventData = pwdiKeepAliveParams;
3895 wdiEventData.uEventDataSize = sizeof(*pwdiKeepAliveParams);
3896 wdiEventData.pCBfnc = wdiKeepAliveCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 wdiEventData.pUserData = pUserData;
3898
3899 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3900}/*WDI_KeepAliveReq*/
3901
3902/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003903 @brief WDI_WowlAddBcPtrnReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 wants to set the Wowl Bcast ptrn to minimize unnecessary
3905 host wakeup due to broadcast traffic while in power
3906 save. Upon the call of this API the WLAN DAL will pack
3907 and send a HAL Wowl Bcast ptrn request message to the
3908 lower RIVA sub-system if DAL is in state STARTED.
3909
3910 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003911 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003912
3913 WDI_PostAssocReq must have been called.
3914
Jeff Johnsone7245742012-09-05 17:12:55 -07003915 @param pwdiWowlAddBcPtrnParams: the Wowl bcast ptrn as
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003917
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 wdiWowlAddBcPtrnCb: callback for passing back the
3919 response of the add Wowl bcast ptrn operation received
3920 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003921
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003923 callback
3924
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 @see WDI_PostAssocReq
3926 @return Result of the function call
3927*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003928WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003929WDI_WowlAddBcPtrnReq
3930(
3931 WDI_WowlAddBcPtrnReqParamsType* pwdiWowlAddBcPtrnParams,
3932 WDI_WowlAddBcPtrnCb wdiWowlAddBcPtrnCb,
3933 void* pUserData
3934)
3935{
3936 WDI_EventInfoType wdiEventData;
3937 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3938
3939 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003940 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07003941 ------------------------------------------------------------------------*/
3942 if ( eWLAN_PAL_FALSE == gWDIInitialized )
3943 {
3944 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
3945 "WDI API call before module is initialized - Fail request");
3946
Jeff Johnsone7245742012-09-05 17:12:55 -07003947 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 }
3949
3950 /*------------------------------------------------------------------------
3951 Fill in Event data and post to the Main FSM
3952 ------------------------------------------------------------------------*/
3953 wdiEventData.wdiRequest = WDI_WOWL_ADD_BC_PTRN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003954 wdiEventData.pEventData = pwdiWowlAddBcPtrnParams;
3955 wdiEventData.uEventDataSize = sizeof(*pwdiWowlAddBcPtrnParams);;
3956 wdiEventData.pCBfnc = wdiWowlAddBcPtrnCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 wdiEventData.pUserData = pUserData;
3958
3959 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
3960}/*WDI_WowlAddBcPtrnReq*/
3961
3962/**
Jeff Johnsone7245742012-09-05 17:12:55 -07003963 @brief WDI_WowlDelBcPtrnReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 wants to clear the Wowl Bcast ptrn. Upon the call of
3965 this API the WLAN DAL will pack and send a HAL delete
3966 Wowl Bcast ptrn request message to the lower RIVA
3967 sub-system if DAL is in state STARTED.
3968
3969 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07003970 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07003971
3972 WDI_WowlAddBcPtrnReq must have been called.
3973
Jeff Johnsone7245742012-09-05 17:12:55 -07003974 @param pwdiWowlDelBcPtrnParams: the Wowl bcast ptrn as
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07003976
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 wdiWowlDelBcPtrnCb: callback for passing back the
3978 response of the del Wowl bcast ptrn operation received
3979 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07003980
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07003982 callback
3983
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 @see WDI_WowlAddBcPtrnReq
3985 @return Result of the function call
3986*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003987WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07003988WDI_WowlDelBcPtrnReq
3989(
3990 WDI_WowlDelBcPtrnReqParamsType* pwdiWowlDelBcPtrnParams,
3991 WDI_WowlDelBcPtrnCb wdiWowlDelBcPtrnCb,
3992 void* pUserData
3993)
3994{
3995 WDI_EventInfoType wdiEventData;
3996 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3997
3998 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07003999 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 ------------------------------------------------------------------------*/
4001 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4002 {
4003 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4004 "WDI API call before module is initialized - Fail request");
4005
Jeff Johnsone7245742012-09-05 17:12:55 -07004006 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 }
4008
4009 /*------------------------------------------------------------------------
4010 Fill in Event data and post to the Main FSM
4011 ------------------------------------------------------------------------*/
4012 wdiEventData.wdiRequest = WDI_WOWL_DEL_BC_PTRN_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004013 wdiEventData.pEventData = pwdiWowlDelBcPtrnParams;
4014 wdiEventData.uEventDataSize = sizeof(*pwdiWowlDelBcPtrnParams);;
4015 wdiEventData.pCBfnc = wdiWowlDelBcPtrnCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 wdiEventData.pUserData = pUserData;
4017
4018 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4019}/*WDI_WowlDelBcPtrnReq*/
4020
4021/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004022 @brief WDI_WowlEnterReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 wants to enter the Wowl state to minimize unnecessary
4024 host wakeup while in power save. Upon the call of this
4025 API the WLAN DAL will pack and send a HAL Wowl enter
4026 request message to the lower RIVA sub-system if DAL is
4027 in state STARTED.
4028
4029 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004030 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004031
4032 WDI_PostAssocReq must have been called.
4033
Jeff Johnsone7245742012-09-05 17:12:55 -07004034 @param pwdiWowlEnterReqParams: the Wowl enter info as
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004036
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 wdiWowlEnterReqCb: callback for passing back the
4038 response of the enter Wowl operation received from the
4039 device
Jeff Johnsone7245742012-09-05 17:12:55 -07004040
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004042 callback
4043
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 @see WDI_PostAssocReq
4045 @return Result of the function call
4046*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004047WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004048WDI_WowlEnterReq
4049(
4050 WDI_WowlEnterReqParamsType* pwdiWowlEnterParams,
4051 WDI_WowlEnterReqCb wdiWowlEnterCb,
4052 void* pUserData
4053)
4054{
4055 WDI_EventInfoType wdiEventData;
4056 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4057
4058 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004059 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 ------------------------------------------------------------------------*/
4061 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4062 {
4063 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4064 "WDI API call before module is initialized - Fail request");
4065
Jeff Johnsone7245742012-09-05 17:12:55 -07004066 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 }
4068
4069 /*------------------------------------------------------------------------
4070 Fill in Event data and post to the Main FSM
4071 ------------------------------------------------------------------------*/
4072 wdiEventData.wdiRequest = WDI_WOWL_ENTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004073 wdiEventData.pEventData = pwdiWowlEnterParams;
4074 wdiEventData.uEventDataSize = sizeof(*pwdiWowlEnterParams);;
4075 wdiEventData.pCBfnc = wdiWowlEnterCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 wdiEventData.pUserData = pUserData;
4077
4078 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4079}/*WDI_WowlEnterReq*/
4080
4081/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004082 @brief WDI_WowlExitReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 wants to exit the Wowl state. Upon the call of this API
4084 the WLAN DAL will pack and send a HAL Wowl exit request
4085 message to the lower RIVA sub-system if DAL is in state
4086 STARTED.
4087
4088 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004089 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004090
4091 WDI_WowlEnterReq must have been called.
4092
Jeff Johnsone7245742012-09-05 17:12:55 -07004093 @param pwdiWowlExitReqParams: the Wowl exit info as
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004095
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 wdiWowlExitReqCb: callback for passing back the response
4097 of the exit Wowl operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004098
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004100 callback
4101
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 @see WDI_WowlEnterReq
4103 @return Result of the function call
4104*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004105WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004106WDI_WowlExitReq
4107(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07004108 WDI_WowlExitReqParamsType* pwdiWowlExitParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 WDI_WowlExitReqCb wdiWowlExitCb,
4110 void* pUserData
4111)
4112{
4113 WDI_EventInfoType wdiEventData;
4114 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4115
4116 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004117 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 ------------------------------------------------------------------------*/
4119 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4120 {
4121 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4122 "WDI API call before module is initialized - Fail request");
4123
Jeff Johnsone7245742012-09-05 17:12:55 -07004124 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 }
4126
4127 /*------------------------------------------------------------------------
4128 Fill in Event data and post to the Main FSM
4129 ------------------------------------------------------------------------*/
4130 wdiEventData.wdiRequest = WDI_WOWL_EXIT_REQ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07004131 wdiEventData.pEventData = pwdiWowlExitParams;
4132 wdiEventData.uEventDataSize = sizeof(*pwdiWowlExitParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07004133 wdiEventData.pCBfnc = wdiWowlExitCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 wdiEventData.pUserData = pUserData;
4135
4136 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4137}/*WDI_WowlExitReq*/
4138
4139/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004140 @brief WDI_ConfigureAppsCpuWakeupStateReq will be called when
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 the upper MAC wants to dynamically adjusts the listen
4142 interval based on the WLAN/MSM activity. Upon the call
4143 of this API the WLAN DAL will pack and send a HAL
4144 configure Apps Cpu Wakeup State request message to the
4145 lower RIVA sub-system.
4146
4147 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004148 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004149
Jeff Johnsone7245742012-09-05 17:12:55 -07004150
4151 @param pwdiConfigureAppsCpuWakeupStateReqParams: the
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 Apps Cpu Wakeup State as specified by the
4153 Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004154
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 wdiConfigureAppsCpuWakeupStateCb: callback for passing
4156 back the response of the configure Apps Cpu Wakeup State
4157 operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004158
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004160 callback
4161
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 @return Result of the function call
4163*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004164WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004165WDI_ConfigureAppsCpuWakeupStateReq
4166(
4167 WDI_ConfigureAppsCpuWakeupStateReqParamsType *pwdiConfigureAppsCpuWakeupStateReqParams,
4168 WDI_ConfigureAppsCpuWakeupStateCb wdiConfigureAppsCpuWakeupStateCb,
4169 void* pUserData
4170)
4171{
4172 WDI_EventInfoType wdiEventData;
4173 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4174
4175 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004176 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 ------------------------------------------------------------------------*/
4178 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4179 {
4180 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4181 "WDI API call before module is initialized - Fail request");
4182
Jeff Johnsone7245742012-09-05 17:12:55 -07004183 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 }
4185
4186 /*------------------------------------------------------------------------
4187 Fill in Event data and post to the Main FSM
4188 ------------------------------------------------------------------------*/
4189 wdiEventData.wdiRequest = WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004190 wdiEventData.pEventData = pwdiConfigureAppsCpuWakeupStateReqParams;
4191 wdiEventData.uEventDataSize = sizeof(*pwdiConfigureAppsCpuWakeupStateReqParams);
4192 wdiEventData.pCBfnc = wdiConfigureAppsCpuWakeupStateCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 wdiEventData.pUserData = pUserData;
4194
4195 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4196}/*WDI_ConfigureAppsCpuWakeupStateReq*/
4197/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004198 @brief WDI_FlushAcReq will be called when the upper MAC wants
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 to to perform a flush operation on a given AC. Upon the
4200 call of this API the WLAN DAL will pack and send a HAL
4201 Flush AC request message to the lower RIVA sub-system if
4202 DAL is in state STARTED.
4203
4204 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004205 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004206
4207 WDI_AddBAReq must have been called.
4208
Jeff Johnsone7245742012-09-05 17:12:55 -07004209 @param pwdiFlushAcReqParams: the Flush AC parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004211
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 wdiFlushAcRspCb: callback for passing back the response
4213 of the Flush AC operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004214
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004216 callback
4217
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 @see WDI_AddBAReq
4219 @return Result of the function call
4220*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004221WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004222WDI_FlushAcReq
4223(
4224 WDI_FlushAcReqParamsType* pwdiFlushAcReqParams,
4225 WDI_FlushAcRspCb wdiFlushAcRspCb,
4226 void* pUserData
4227)
4228{
4229 WDI_EventInfoType wdiEventData;
4230 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4231
4232 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004233 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 ------------------------------------------------------------------------*/
4235 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4236 {
4237 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4238 "WDI API call before module is initialized - Fail request");
4239
Jeff Johnsone7245742012-09-05 17:12:55 -07004240 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 }
4242
4243 /*------------------------------------------------------------------------
4244 Fill in Event data and post to the Main FSM
4245 ------------------------------------------------------------------------*/
4246 wdiEventData.wdiRequest = WDI_FLUSH_AC_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004247 wdiEventData.pEventData = pwdiFlushAcReqParams;
4248 wdiEventData.uEventDataSize = sizeof(*pwdiFlushAcReqParams);
4249 wdiEventData.pCBfnc = wdiFlushAcRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 wdiEventData.pUserData = pUserData;
4251
4252 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4253
4254}/*WDI_FlushAcReq*/
4255
4256/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004257 @brief WDI_BtAmpEventReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 wants to notify the lower mac on a BT AMP event. This is
4259 to inform BTC-SLM that some BT AMP event occurred. Upon
4260 the call of this API the WLAN DAL will pack and send a
4261 HAL BT AMP event request message to the lower RIVA
4262 sub-system if DAL is in state STARTED.
4263
4264 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004265 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004266
Jeff Johnsone7245742012-09-05 17:12:55 -07004267
4268 @param wdiBtAmpEventReqParams: the BT AMP event parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004270
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 wdiBtAmpEventRspCb: callback for passing back the
4272 response of the BT AMP event operation received from the
4273 device
Jeff Johnsone7245742012-09-05 17:12:55 -07004274
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004276 callback
4277
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 @return Result of the function call
4279*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004280WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004281WDI_BtAmpEventReq
4282(
4283 WDI_BtAmpEventParamsType* pwdiBtAmpEventReqParams,
4284 WDI_BtAmpEventRspCb wdiBtAmpEventRspCb,
4285 void* pUserData
4286)
4287{
4288 WDI_EventInfoType wdiEventData;
4289 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4290
4291 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004292 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 ------------------------------------------------------------------------*/
4294 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4295 {
4296 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4297 "WDI API call before module is initialized - Fail request");
4298
Jeff Johnsone7245742012-09-05 17:12:55 -07004299 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 }
4301
4302 /*------------------------------------------------------------------------
4303 Fill in Event data and post to the Main FSM
4304 ------------------------------------------------------------------------*/
4305 wdiEventData.wdiRequest = WDI_BTAMP_EVENT_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004306 wdiEventData.pEventData = pwdiBtAmpEventReqParams;
4307 wdiEventData.uEventDataSize = sizeof(*pwdiBtAmpEventReqParams);
4308 wdiEventData.pCBfnc = wdiBtAmpEventRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 wdiEventData.pUserData = pUserData;
4310
4311 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4312
4313}/*WDI_BtAmpEventReq*/
4314
Jeff Johnsone7245742012-09-05 17:12:55 -07004315#ifdef FEATURE_OEM_DATA_SUPPORT
4316/**
4317 @brief WDI_Start Oem Data Req will be called when the upper MAC
4318 wants to notify the lower mac on a oem data Req event.Upon
4319 the call of this API the WLAN DAL will pack and send a
4320 HAL OEM Data Req event request message to the lower RIVA
4321 sub-system if DAL is in state STARTED.
4322
4323 In state BUSY this request will be queued. Request won't
4324 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004325
4326
Jeff Johnsone7245742012-09-05 17:12:55 -07004327
4328 @param pwdiOemDataReqParams: the Oem Data Req as
4329 specified by the Device Interface
4330
4331 wdiStartOemDataRspCb: callback for passing back the
4332 response of the Oem Data Req received from the
4333 device
4334
4335 pUserData: user data will be passed back with the
4336 callback
4337
4338 @return Result of the function call
4339*/
4340WDI_Status
4341WDI_StartOemDataReq
4342(
4343 WDI_oemDataReqParamsType* pwdiOemDataReqParams,
4344 WDI_oemDataRspCb wdiOemDataRspCb,
4345 void* pUserData
4346)
4347{
4348 WDI_EventInfoType wdiEventData;
4349 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4350
4351 /*------------------------------------------------------------------------
4352 Sanity Check
4353 ------------------------------------------------------------------------*/
4354 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4355 {
4356 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4357 "WDI API call before module is initialized - Fail request");
4358
4359 return WDI_STATUS_E_NOT_ALLOWED;
4360 }
4361
4362 /*------------------------------------------------------------------------
4363 Fill in Event data and post to the Main FSM
4364 ------------------------------------------------------------------------*/
4365 wdiEventData.wdiRequest = WDI_START_OEM_DATA_REQ;
4366 wdiEventData.pEventData = pwdiOemDataReqParams;
4367 wdiEventData.uEventDataSize = sizeof(*pwdiOemDataReqParams);
4368 wdiEventData.pCBfnc = wdiOemDataRspCb;
4369 wdiEventData.pUserData = pUserData;
4370
4371 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4372
4373
4374}
4375
4376#endif
4377
4378
4379/*========================================================================
4380
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 CONTROL APIs
Jeff Johnsone7245742012-09-05 17:12:55 -07004382
Jeff Johnson295189b2012-06-20 16:38:30 -07004383==========================================================================*/
4384/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004385 @brief WDI_SwitchChReq will be called when the upper MAC wants
Jeff Johnson295189b2012-06-20 16:38:30 -07004386 the WLAN HW to change the current channel of operation.
4387 Upon the call of this API the WLAN DAL will pack and
4388 send a HAL Start request message to the lower RIVA
4389 sub-system if DAL is in state STARTED.
4390
4391 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004392 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004393
4394 WDI_Start must have been called.
4395
Jeff Johnsone7245742012-09-05 17:12:55 -07004396 @param wdiSwitchChReqParams: the switch ch parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004397 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004398
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 wdiSwitchChRspCb: callback for passing back the response
4400 of the switch ch operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004403 callback
4404
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 @see WDI_Start
4406 @return Result of the function call
4407*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004408WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004409WDI_SwitchChReq
4410(
4411 WDI_SwitchChReqParamsType* pwdiSwitchChReqParams,
4412 WDI_SwitchChRspCb wdiSwitchChRspCb,
4413 void* pUserData
4414)
4415{
4416 WDI_EventInfoType wdiEventData;
4417 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4418
4419 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004420 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 ------------------------------------------------------------------------*/
4422 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4423 {
4424 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4425 "WDI API call before module is initialized - Fail request");
4426
Jeff Johnsone7245742012-09-05 17:12:55 -07004427 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 }
4429
4430 /*------------------------------------------------------------------------
4431 Fill in Event data and post to the Main FSM
4432 ------------------------------------------------------------------------*/
4433 wdiEventData.wdiRequest = WDI_CH_SWITCH_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004434 wdiEventData.pEventData = pwdiSwitchChReqParams;
4435 wdiEventData.uEventDataSize = sizeof(*pwdiSwitchChReqParams);
4436 wdiEventData.pCBfnc = wdiSwitchChRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 wdiEventData.pUserData = pUserData;
4438
4439 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4440
4441}/*WDI_SwitchChReq*/
4442
4443
4444/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004445 @brief WDI_ConfigSTAReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 wishes to add or update a STA in HW. Upon the call of
4447 this API the WLAN DAL will pack and send a HAL Start
4448 message request message to the lower RIVA sub-system if
4449 DAL is in state STARTED.
4450
4451 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004452 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004453
4454 WDI_Start must have been called.
4455
Jeff Johnsone7245742012-09-05 17:12:55 -07004456 @param wdiConfigSTAReqParams: the config STA parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004458
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 wdiConfigSTARspCb: callback for passing back the
4460 response of the config STA operation received from the
4461 device
Jeff Johnsone7245742012-09-05 17:12:55 -07004462
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004464 callback
4465
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 @see WDI_Start
4467 @return Result of the function call
4468*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004469WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004470WDI_ConfigSTAReq
4471(
4472 WDI_ConfigSTAReqParamsType* pwdiConfigSTAReqParams,
4473 WDI_ConfigSTARspCb wdiConfigSTARspCb,
4474 void* pUserData
4475)
4476{
4477 WDI_EventInfoType wdiEventData;
4478 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4479
4480 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004481 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 ------------------------------------------------------------------------*/
4483 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4484 {
4485 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4486 "WDI API call before module is initialized - Fail request");
4487
Jeff Johnsone7245742012-09-05 17:12:55 -07004488 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 }
4490
4491 /*------------------------------------------------------------------------
4492 Fill in Event data and post to the Main FSM
4493 ------------------------------------------------------------------------*/
4494 wdiEventData.wdiRequest = WDI_CONFIG_STA_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004495 wdiEventData.pEventData = pwdiConfigSTAReqParams;
4496 wdiEventData.uEventDataSize = sizeof(*pwdiConfigSTAReqParams);
4497 wdiEventData.pCBfnc = wdiConfigSTARspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 wdiEventData.pUserData = pUserData;
4499
4500 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4501
4502}/*WDI_ConfigSTAReq*/
4503
4504/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004505 @brief WDI_SetLinkStateReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 wants to change the state of an ongoing link. Upon the
4507 call of this API the WLAN DAL will pack and send a HAL
4508 Start message request message to the lower RIVA
4509 sub-system if DAL is in state STARTED.
4510
4511 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004512 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004513
4514 WDI_JoinStartReq must have been called.
4515
Jeff Johnsone7245742012-09-05 17:12:55 -07004516 @param wdiSetLinkStateReqParams: the set link state parameters
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 as specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004518
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 wdiSetLinkStateRspCb: callback for passing back the
4520 response of the set link state operation received from
4521 the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004522
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004524 callback
4525
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 @see WDI_JoinStartReq
4527 @return Result of the function call
4528*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004529WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004530WDI_SetLinkStateReq
4531(
4532 WDI_SetLinkReqParamsType* pwdiSetLinkStateReqParams,
4533 WDI_SetLinkStateRspCb wdiSetLinkStateRspCb,
4534 void* pUserData
4535)
4536{
4537 WDI_EventInfoType wdiEventData;
4538 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4539
4540 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004541 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 ------------------------------------------------------------------------*/
4543 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4544 {
4545 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4546 "WDI API call before module is initialized - Fail request");
4547
Jeff Johnsone7245742012-09-05 17:12:55 -07004548 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 }
4550
4551 /*------------------------------------------------------------------------
4552 Fill in Event data and post to the Main FSM
4553 ------------------------------------------------------------------------*/
4554 wdiEventData.wdiRequest = WDI_SET_LINK_ST_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004555 wdiEventData.pEventData = pwdiSetLinkStateReqParams;
4556 wdiEventData.uEventDataSize = sizeof(*pwdiSetLinkStateReqParams);
4557 wdiEventData.pCBfnc = wdiSetLinkStateRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 wdiEventData.pUserData = pUserData;
4559
4560 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4561
4562}/*WDI_SetLinkStateReq*/
4563
4564
4565/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004566 @brief WDI_GetStatsReq will be called when the upper MAC wants
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 to get statistics (MIB counters) from the device. Upon
4568 the call of this API the WLAN DAL will pack and send a
4569 HAL Start request message to the lower RIVA sub-system
4570 if DAL is in state STARTED.
4571
4572 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004573 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004574
4575 WDI_Start must have been called.
4576
Jeff Johnsone7245742012-09-05 17:12:55 -07004577 @param wdiGetStatsReqParams: the stats parameters to get as
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004579
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 wdiGetStatsRspCb: callback for passing back the response
4581 of the get stats operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004582
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004584 callback
4585
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 @see WDI_Start
4587 @return Result of the function call
4588*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004589WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004590WDI_GetStatsReq
4591(
4592 WDI_GetStatsReqParamsType* pwdiGetStatsReqParams,
4593 WDI_GetStatsRspCb wdiGetStatsRspCb,
4594 void* pUserData
4595)
4596{
4597 WDI_EventInfoType wdiEventData;
4598 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4599
4600 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004601 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 ------------------------------------------------------------------------*/
4603 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4604 {
4605 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4606 "WDI API call before module is initialized - Fail request");
4607
Jeff Johnsone7245742012-09-05 17:12:55 -07004608 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 }
4610
4611 /*------------------------------------------------------------------------
4612 Fill in Event data and post to the Main FSM
4613 ------------------------------------------------------------------------*/
4614 wdiEventData.wdiRequest = WDI_GET_STATS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004615 wdiEventData.pEventData = pwdiGetStatsReqParams;
4616 wdiEventData.uEventDataSize = sizeof(*pwdiGetStatsReqParams);
4617 wdiEventData.pCBfnc = wdiGetStatsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 wdiEventData.pUserData = pUserData;
4619
4620 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4621
4622}/*WDI_GetStatsReq*/
4623
4624
4625/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004626 @brief WDI_UpdateCfgReq will be called when the upper MAC when
Jeff Johnson295189b2012-06-20 16:38:30 -07004627 it wishes to change the configuration of the WLAN
4628 Device. Upon the call of this API the WLAN DAL will pack
4629 and send a HAL Update CFG request message to the lower
4630 RIVA sub-system if DAL is in state STARTED.
4631
4632 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004633 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004634
4635 WDI_Start must have been called.
4636
Jeff Johnsone7245742012-09-05 17:12:55 -07004637 @param wdiUpdateCfgReqParams: the update cfg parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004639
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 wdiUpdateCfgsRspCb: callback for passing back the
4641 response of the update cfg operation received from the
4642 device
Jeff Johnsone7245742012-09-05 17:12:55 -07004643
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004645 callback
4646
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 @see WDI_Start
4648 @return Result of the function call
4649*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004650WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004651WDI_UpdateCfgReq
4652(
4653 WDI_UpdateCfgReqParamsType* pwdiUpdateCfgReqParams,
4654 WDI_UpdateCfgRspCb wdiUpdateCfgsRspCb,
4655 void* pUserData
4656)
4657{
4658 WDI_EventInfoType wdiEventData;
4659 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4660
4661 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004662 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 ------------------------------------------------------------------------*/
4664 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4665 {
4666 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4667 "WDI API call before module is initialized - Fail request");
4668
Jeff Johnsone7245742012-09-05 17:12:55 -07004669 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 }
4671
4672 /*------------------------------------------------------------------------
4673 Fill in Event data and post to the Main FSM
4674 ------------------------------------------------------------------------*/
4675 wdiEventData.wdiRequest = WDI_UPDATE_CFG_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004676 wdiEventData.pEventData = pwdiUpdateCfgReqParams;
4677 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateCfgReqParams);
4678 wdiEventData.pCBfnc = wdiUpdateCfgsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 wdiEventData.pUserData = pUserData;
4680
4681 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4682
4683}/*WDI_UpdateCfgReq*/
4684
4685
4686
4687/**
4688 @brief WDI_AddBAReq will be called when the upper MAC has setup
4689 successfully a BA session and needs to notify the HW for
4690 the appropriate settings to take place. Upon the call of
4691 this API the WLAN DAL will pack and send a HAL Add BA
4692 request message to the lower RIVA sub-system if DAL is
4693 in state STARTED.
4694
4695 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004696 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004697
4698 WDI_PostAssocReq must have been called.
4699
4700 @param wdiAddBAReqParams: the add BA parameters as specified by
4701 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004702
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 wdiAddBARspCb: callback for passing back the response of
4704 the add BA operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004705
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004707 callback
4708
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 @see WDI_PostAssocReq
4710 @return Result of the function call
4711*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004712WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004713WDI_AddBAReq
4714(
4715 WDI_AddBAReqParamsType* pwdiAddBAReqParams,
4716 WDI_AddBARspCb wdiAddBARspCb,
4717 void* pUserData
4718)
4719{
4720 WDI_EventInfoType wdiEventData;
4721 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4722
4723 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004724 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 ------------------------------------------------------------------------*/
4726 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4727 {
4728 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4729 "WDI API call before module is initialized - Fail request");
4730
Jeff Johnsone7245742012-09-05 17:12:55 -07004731 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 }
4733
4734 /*------------------------------------------------------------------------
4735 Fill in Event data and post to the Main FSM
4736 ------------------------------------------------------------------------*/
4737 wdiEventData.wdiRequest = WDI_ADD_BA_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004738 wdiEventData.pEventData = pwdiAddBAReqParams;
4739 wdiEventData.uEventDataSize = sizeof(*pwdiAddBAReqParams);
4740 wdiEventData.pCBfnc = wdiAddBARspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 wdiEventData.pUserData = pUserData;
4742
4743 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4744
4745}/*WDI_AddBAReq*/
4746
4747
4748/**
4749 @brief WDI_TriggerBAReq will be called when the upper MAC has setup
4750 successfully a BA session and needs to notify the HW for
4751 the appropriate settings to take place. Upon the call of
4752 this API the WLAN DAL will pack and send a HAL Add BA
4753 request message to the lower RIVA sub-system if DAL is
4754 in state STARTED.
4755
4756 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004757 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004758
4759 WDI_PostAssocReq must have been called.
4760
4761 @param wdiAddBAReqParams: the add BA parameters as specified by
4762 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004763
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 wdiAddBARspCb: callback for passing back the response of
4765 the add BA operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004766
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004768 callback
4769
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 @see WDI_PostAssocReq
4771 @return Result of the function call
4772*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004773WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004774WDI_TriggerBAReq
4775(
4776 WDI_TriggerBAReqParamsType* pwdiTriggerBAReqParams,
4777 WDI_TriggerBARspCb wdiTriggerBARspCb,
4778 void* pUserData
4779)
4780{
4781 WDI_EventInfoType wdiEventData;
4782 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4783
4784 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004785 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 ------------------------------------------------------------------------*/
4787 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4788 {
4789 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4790 "WDI API call before module is initialized - Fail request");
4791
Jeff Johnsone7245742012-09-05 17:12:55 -07004792 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 }
4794
4795 /*------------------------------------------------------------------------
4796 Fill in Event data and post to the Main FSM
4797 ------------------------------------------------------------------------*/
4798 wdiEventData.wdiRequest = WDI_TRIGGER_BA_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004799 wdiEventData.pEventData = pwdiTriggerBAReqParams;
4800 wdiEventData.uEventDataSize = sizeof(*pwdiTriggerBAReqParams);
4801 wdiEventData.pCBfnc = wdiTriggerBARspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004802 wdiEventData.pUserData = pUserData;
4803
4804 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4805
4806}/*WDI_AddBAReq*/
4807
4808/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004809 @brief WDI_UpdateBeaconParamsReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 wishes to update any of the Beacon parameters used by HW.
4811 Upon the call of this API the WLAN DAL will pack and send a HAL Update Beacon Params request
4812 message to the lower RIVA sub-system if DAL is in state
4813 STARTED.
4814
4815 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004816 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004817
4818 WDI_PostAssocReq must have been called.
4819
Jeff Johnsone7245742012-09-05 17:12:55 -07004820 @param wdiUpdateBeaconParams: the Beacon parameters as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004822
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 wdiUpdateBeaconParamsRspCb: callback for passing back the
4824 response of the start operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004825
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004827 callback
4828
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 @see WDI_PostAssocReq
4830 @return Result of the function call
4831*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004832WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004833WDI_UpdateBeaconParamsReq
4834(
4835 WDI_UpdateBeaconParamsType* pwdiUpdateBeaconParams,
4836 WDI_UpdateBeaconParamsRspCb wdiUpdateBeaconParamsRspCb,
4837 void* pUserData
4838)
4839{
4840 WDI_EventInfoType wdiEventData;
4841 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4842
4843 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004844 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 ------------------------------------------------------------------------*/
4846 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4847 {
4848 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4849 "WDI API call before module is initialized - Fail request");
4850
Jeff Johnsone7245742012-09-05 17:12:55 -07004851 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 }
4853
4854 /*------------------------------------------------------------------------
4855 Fill in Event data and post to the Main FSM
4856 ------------------------------------------------------------------------*/
4857 wdiEventData.wdiRequest = WDI_UPD_BCON_PRMS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004858 wdiEventData.pEventData = pwdiUpdateBeaconParams;
4859 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateBeaconParams);
4860 wdiEventData.pCBfnc = wdiUpdateBeaconParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 wdiEventData.pUserData = pUserData;
4862
4863 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4864
4865}/*WDI_UpdateBeaconParamsReq*/
4866
4867/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004868 @brief WDI_SendBeaconParamsReq will be called when the upper MAC
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 wishes to update the Beacon template used by HW.
4870 Upon the call of this API the WLAN DAL will pack and send a HAL Update Beacon template request
4871 message to the lower RIVA sub-system if DAL is in state
4872 STARTED.
4873
4874 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004875 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004876
4877 WDI_PostAssocReq must have been called.
4878
Jeff Johnsone7245742012-09-05 17:12:55 -07004879 @param wdiSendBeaconParams: the Beacon parameters as specified
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004881
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 wdiSendBeaconParamsRspCb: callback for passing back the
4883 response of the start operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004884
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004886 callback
4887
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 @see WDI_PostAssocReq
4889 @return Result of the function call
4890*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004891WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004892WDI_SendBeaconParamsReq
4893(
4894 WDI_SendBeaconParamsType* pwdiSendBeaconParams,
4895 WDI_SendBeaconParamsRspCb wdiSendBeaconParamsRspCb,
4896 void* pUserData
4897)
4898{
4899 WDI_EventInfoType wdiEventData;
4900 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4901
4902 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004903 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 ------------------------------------------------------------------------*/
4905 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4906 {
4907 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4908 "WDI API call before module is initialized - Fail request");
4909
Jeff Johnsone7245742012-09-05 17:12:55 -07004910 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 }
4912
4913 /*------------------------------------------------------------------------
4914 Fill in Event data and post to the Main FSM
4915 ------------------------------------------------------------------------*/
4916 wdiEventData.wdiRequest = WDI_SND_BCON_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004917 wdiEventData.pEventData = pwdiSendBeaconParams;
4918 wdiEventData.uEventDataSize = sizeof(*pwdiSendBeaconParams);
4919 wdiEventData.pCBfnc = wdiSendBeaconParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 wdiEventData.pUserData = pUserData;
4921
4922 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4923
4924}/*WDI_SendBeaconParamsReq*/
4925
4926/**
Jeff Johnsone7245742012-09-05 17:12:55 -07004927 @brief WDI_UpdateProbeRspTemplateReq will be called when the
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 upper MAC wants to update the probe response template to
4929 be transmitted as Soft AP
4930 Upon the call of this API the WLAN DAL will
4931 pack and send the probe rsp template message to the
4932 lower RIVA sub-system if DAL is in state STARTED.
4933
4934 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07004935 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07004936
4937
Jeff Johnsone7245742012-09-05 17:12:55 -07004938 @param pwdiUpdateProbeRspParams: the Update Beacon parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004940
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 wdiSendBeaconParamsRspCb: callback for passing back the
4942 response of the Send Beacon Params operation received
4943 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004944
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004946 callback
4947
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 @see WDI_AddBAReq
4949 @return Result of the function call
4950*/
4951
Jeff Johnsone7245742012-09-05 17:12:55 -07004952WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07004953WDI_UpdateProbeRspTemplateReq
4954(
4955 WDI_UpdateProbeRspTemplateParamsType* pwdiUpdateProbeRspParams,
4956 WDI_UpdateProbeRspTemplateRspCb wdiUpdateProbeRspParamsRspCb,
4957 void* pUserData
4958)
4959{
4960 WDI_EventInfoType wdiEventData;
4961 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
4962
4963 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07004964 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 ------------------------------------------------------------------------*/
4966 if ( eWLAN_PAL_FALSE == gWDIInitialized )
4967 {
4968 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
4969 "WDI API call before module is initialized - Fail request");
4970
Jeff Johnsone7245742012-09-05 17:12:55 -07004971 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 }
4973
4974 /*------------------------------------------------------------------------
4975 Fill in Event data and post to the Main FSM
4976 ------------------------------------------------------------------------*/
4977 wdiEventData.wdiRequest = WDI_UPD_PROBE_RSP_TEMPLATE_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004978 wdiEventData.pEventData = pwdiUpdateProbeRspParams;
4979 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateProbeRspParams);
4980 wdiEventData.pCBfnc = wdiUpdateProbeRspParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 wdiEventData.pUserData = pUserData;
4982
4983 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
4984
4985}/*WDI_UpdateProbeRspTemplateReq*/
4986
4987/**
4988 @brief WDI_NvDownloadReq will be called by the UMAC to download the NV blob
4989 to the NV memory.
4990
4991
4992 @param wdiNvDownloadReqParams: the NV Download parameters as specified by
4993 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07004994
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 wdiNvDownloadRspCb: callback for passing back the response of
4996 the NV Download operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07004997
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07004999 callback
5000
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 @see WDI_PostAssocReq
5002 @return Result of the function call
5003*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005004WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005005WDI_NvDownloadReq
5006(
5007 WDI_NvDownloadReqParamsType* pwdiNvDownloadReqParams,
5008 WDI_NvDownloadRspCb wdiNvDownloadRspCb,
5009 void* pUserData
5010)
5011{
5012 WDI_EventInfoType wdiEventData;
5013
5014 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005015 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 ------------------------------------------------------------------------*/
5017 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5018 {
5019 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5020 "WDI API call before module is initialized - Fail request");
5021
Jeff Johnsone7245742012-09-05 17:12:55 -07005022 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 }
5024
5025 /*------------------------------------------------------------------------
5026 Fill in Event data and post to the Main FSM
5027 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005028 wdiEventData.wdiRequest = WDI_NV_DOWNLOAD_REQ;
5029 wdiEventData.pEventData = (void *)pwdiNvDownloadReqParams;
5030 wdiEventData.uEventDataSize = sizeof(*pwdiNvDownloadReqParams);
5031 wdiEventData.pCBfnc = wdiNvDownloadRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 wdiEventData.pUserData = pUserData;
5033
5034 return WDI_PostMainEvent(&gWDICb, WDI_START_EVENT, &wdiEventData);
5035
5036}/*WDI_NVDownloadReq*/
5037
5038#ifdef WLAN_FEATURE_P2P
5039/**
Jeff Johnsone7245742012-09-05 17:12:55 -07005040 @brief WDI_SetP2PGONOAReq will be called when the
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 upper MAC wants to send Notice of Absence
5042 Upon the call of this API the WLAN DAL will
5043 pack and send the probe rsp template message to the
5044 lower RIVA sub-system if DAL is in state STARTED.
5045
5046 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005047 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005048
5049
Jeff Johnsone7245742012-09-05 17:12:55 -07005050 @param pwdiUpdateProbeRspParams: the Update Beacon parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005052
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 wdiSendBeaconParamsRspCb: callback for passing back the
5054 response of the Send Beacon Params operation received
5055 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07005056
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005058 callback
5059
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 @see WDI_AddBAReq
5061 @return Result of the function call
5062*/
5063WDI_Status
5064WDI_SetP2PGONOAReq
5065(
5066 WDI_SetP2PGONOAReqParamsType* pwdiP2PGONOAReqParams,
5067 WDI_SetP2PGONOAReqParamsRspCb wdiP2PGONOAReqParamsRspCb,
5068 void* pUserData
5069)
5070{
5071 WDI_EventInfoType wdiEventData;
5072 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5073
5074 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005075 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 ------------------------------------------------------------------------*/
5077 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5078 {
5079 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5080 "WDI API call before module is initialized - Fail request");
5081
Jeff Johnsone7245742012-09-05 17:12:55 -07005082 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 }
5084
5085 /*------------------------------------------------------------------------
5086 Fill in Event data and post to the Main FSM
5087 ------------------------------------------------------------------------*/
5088 wdiEventData.wdiRequest = WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005089 wdiEventData.pEventData = pwdiP2PGONOAReqParams;
5090 wdiEventData.uEventDataSize = sizeof(*pwdiP2PGONOAReqParams);
5091 wdiEventData.pCBfnc = wdiP2PGONOAReqParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 wdiEventData.pUserData = pUserData;
5093
5094 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5095
5096}/*WDI_SetP2PGONOAReq*/
5097#endif
5098
5099/**
Jeff Johnsone7245742012-09-05 17:12:55 -07005100 @brief WDI_AddSTASelfReq will be called when the
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 UMAC wanted to add STA self while opening any new session
5102 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005103 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005104
5105
Jeff Johnsone7245742012-09-05 17:12:55 -07005106 @param pwdiAddSTASelfParams: the add sta self parameters as
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005108
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005110 callback
5111
5112 @see
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 @return Result of the function call
5114*/
5115WDI_Status
5116WDI_AddSTASelfReq
5117(
5118 WDI_AddSTASelfReqParamsType* pwdiAddSTASelfReqParams,
5119 WDI_AddSTASelfParamsRspCb wdiAddSTASelfReqParamsRspCb,
5120 void* pUserData
5121)
5122{
5123 WDI_EventInfoType wdiEventData;
5124 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5125
5126 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005127 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 ------------------------------------------------------------------------*/
5129 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5130 {
5131 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5132 "WDI API call before module is initialized - Fail request");
5133
Jeff Johnsone7245742012-09-05 17:12:55 -07005134 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 }
5136
5137 /*------------------------------------------------------------------------
5138 Fill in Event data and post to the Main FSM
5139 ------------------------------------------------------------------------*/
5140 wdiEventData.wdiRequest = WDI_ADD_STA_SELF_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005141 wdiEventData.pEventData = pwdiAddSTASelfReqParams;
5142 wdiEventData.uEventDataSize = sizeof(*pwdiAddSTASelfReqParams);
5143 wdiEventData.pCBfnc = wdiAddSTASelfReqParamsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 wdiEventData.pUserData = pUserData;
5145
5146 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5147
5148}/*WDI_AddSTASelfReq*/
5149
5150
Jeff Johnsone7245742012-09-05 17:12:55 -07005151#ifdef WLAN_FEATURE_VOWIFI_11R
Jeff Johnson295189b2012-06-20 16:38:30 -07005152/**
5153 @brief WDI_AggrAddTSReq will be called when the upper MAC to inform
5154 the device of a successful add TSpec negotiation. HW
5155 needs to receive the TSpec Info from the UMAC in order
5156 to configure properly the QoS data traffic. Upon the
5157 call of this API the WLAN DAL will pack and send a HAL
5158 Add TS request message to the lower RIVA sub-system if
5159 DAL is in state STARTED.
5160
5161 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005162 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005163
5164 WDI_PostAssocReq must have been called.
5165
5166 @param wdiAddTsReqParams: the add TS parameters as specified by
5167 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005168
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 wdiAddTsRspCb: callback for passing back the response of
5170 the add TS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07005171
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005173 callback
5174
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 @see WDI_PostAssocReq
5176 @return Result of the function call
5177*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005178WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005179WDI_AggrAddTSReq
5180(
5181 WDI_AggrAddTSReqParamsType* pwdiAggrAddTsReqParams,
5182 WDI_AggrAddTsRspCb wdiAggrAddTsRspCb,
5183 void* pUserData
5184)
5185{
5186 WDI_EventInfoType wdiEventData;
5187 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5188
5189 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005190 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 ------------------------------------------------------------------------*/
5192 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5193 {
5194 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5195 "WDI API call before module is initialized - Fail request");
5196
Jeff Johnsone7245742012-09-05 17:12:55 -07005197 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 }
5199
5200 /*------------------------------------------------------------------------
5201 Fill in Event data and post to the Main FSM
5202 ------------------------------------------------------------------------*/
5203 wdiEventData.wdiRequest = WDI_AGGR_ADD_TS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005204 wdiEventData.pEventData = pwdiAggrAddTsReqParams;
5205 wdiEventData.uEventDataSize = sizeof(*pwdiAggrAddTsReqParams);
5206 wdiEventData.pCBfnc = wdiAggrAddTsRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 wdiEventData.pUserData = pUserData;
5208
5209 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5210
5211}/*WDI_AggrAddTSReq*/
5212
5213#endif /* WLAN_FEATURE_VOWIFI_11R */
5214
5215#ifdef ANI_MANF_DIAG
5216/**
5217 @brief WDI_FTMCommandReq
5218 Post FTM Command Event
Jeff Johnsone7245742012-09-05 17:12:55 -07005219
5220 @param ftmCommandReq: FTM Command Body
5221 @param ftmCommandRspCb: FTM Response from HAL CB
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 @param pUserData: Client Data
Jeff Johnsone7245742012-09-05 17:12:55 -07005223
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 @see
5225 @return Result of the function call
5226*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005227WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005228WDI_FTMCommandReq
5229(
5230 WDI_FTMCommandReqType *ftmCommandReq,
5231 WDI_FTMCommandRspCb ftmCommandRspCb,
5232 void *pUserData
5233)
5234{
5235 WDI_EventInfoType wdiEventData;
5236 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5237
5238 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005239 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 ------------------------------------------------------------------------*/
5241 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5242 {
5243 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5244 "WDI API call before module is initialized - Fail request");
5245
Jeff Johnsone7245742012-09-05 17:12:55 -07005246 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 }
5248
5249 /*------------------------------------------------------------------------
5250 Fill in Event data and post to the Main FSM
5251 ------------------------------------------------------------------------*/
5252 wdiEventData.wdiRequest = WDI_FTM_CMD_REQ;
5253 wdiEventData.pEventData = (void *)ftmCommandReq;
5254 wdiEventData.uEventDataSize = ftmCommandReq->bodyLength + sizeof(wpt_uint32);
5255 wdiEventData.pCBfnc = ftmCommandRspCb;
5256 wdiEventData.pUserData = pUserData;
5257
5258 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5259}
Jeff Johnsone7245742012-09-05 17:12:55 -07005260#endif /* ANI_MANF_DIAG */
Jeff Johnson295189b2012-06-20 16:38:30 -07005261/**
Jeff Johnsone7245742012-09-05 17:12:55 -07005262 @brief WDI_HostResumeReq will be called
Jeff Johnson295189b2012-06-20 16:38:30 -07005263
5264 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005265 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005266
5267
5268 @param pwdiResumeReqParams: as specified by
5269 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005270
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 wdiResumeReqRspCb: callback for passing back the response of
5272 the Resume Req received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07005273
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005275 callback
5276
5277 @see
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 @return Result of the function call
5279*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005280WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005281WDI_HostResumeReq
5282(
5283 WDI_ResumeParamsType* pwdiResumeReqParams,
5284 WDI_HostResumeEventRspCb wdiResumeReqRspCb,
5285 void* pUserData
5286)
5287{
5288 WDI_EventInfoType wdiEventData;
5289 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5290
5291 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005292 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 ------------------------------------------------------------------------*/
5294 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5295 {
5296 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5297 "WDI API call before module is initialized - Fail request");
5298
Jeff Johnsone7245742012-09-05 17:12:55 -07005299 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 }
5301
5302 /*------------------------------------------------------------------------
5303 Fill in Event data and post to the Main FSM
5304 ------------------------------------------------------------------------*/
5305 wdiEventData.wdiRequest = WDI_HOST_RESUME_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005306 wdiEventData.pEventData = pwdiResumeReqParams;
5307 wdiEventData.uEventDataSize = sizeof(*pwdiResumeReqParams);
5308 wdiEventData.pCBfnc = wdiResumeReqRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 wdiEventData.pUserData = pUserData;
5310
5311 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5312
5313}/*WDI_HostResumeReq*/
5314
5315/**
Jeff Johnsone7245742012-09-05 17:12:55 -07005316 @brief WDI_DelSTASelfReq will be called
Jeff Johnson295189b2012-06-20 16:38:30 -07005317
5318 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005319 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005320
5321
5322 @param pwdiDelStaSelfReqParams: as specified by
5323 the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005324
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 wdiDelStaSelfRspCb: callback for passing back the response of
5326 the add TS operation received from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07005327
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005329 callback
5330
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 @see WDI_PostAssocReq
5332 @return Result of the function call
5333*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005334WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005335WDI_DelSTASelfReq
5336(
5337 WDI_DelSTASelfReqParamsType* pwdiDelStaSelfReqParams,
5338 WDI_DelSTASelfRspCb wdiDelStaSelfRspCb,
5339 void* pUserData
5340)
5341{
5342 WDI_EventInfoType wdiEventData;
5343 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5344
5345 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005346 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 ------------------------------------------------------------------------*/
5348 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5349 {
5350 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5351 "WDI API call before module is initialized - Fail request");
5352
Jeff Johnsone7245742012-09-05 17:12:55 -07005353 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 }
5355
5356 /*------------------------------------------------------------------------
5357 Fill in Event data and post to the Main FSM
5358 ------------------------------------------------------------------------*/
5359 wdiEventData.wdiRequest = WDI_DEL_STA_SELF_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005360 wdiEventData.pEventData = pwdiDelStaSelfReqParams;
5361 wdiEventData.uEventDataSize = sizeof(*pwdiDelStaSelfReqParams);
5362 wdiEventData.pCBfnc = wdiDelStaSelfRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 wdiEventData.pUserData = pUserData;
5364
5365 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5366
5367}/*WDI_AggrAddTSReq*/
5368
5369/**
Jeff Johnsone7245742012-09-05 17:12:55 -07005370 @brief WDI_SetTxPerTrackingReq will be called when the upper MAC
5371 wants to set the Tx Per Tracking configurations.
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 Upon the call of this API the WLAN DAL will pack
5373 and send a HAL Set Tx Per Tracking request message to the
5374 lower RIVA sub-system if DAL is in state STARTED.
5375
5376 In state BUSY this request will be queued. Request won't
Jeff Johnsone7245742012-09-05 17:12:55 -07005377 be allowed in any other state.
Jeff Johnson295189b2012-06-20 16:38:30 -07005378
Jeff Johnsone7245742012-09-05 17:12:55 -07005379 @param pwdiSetTxPerTrackingReqParams: the Set Tx PER Tracking configurations as
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -07005381
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 pwdiSetTxPerTrackingRspCb: callback for passing back the
5383 response of the set Tx PER Tracking configurations operation received
5384 from the device
Jeff Johnsone7245742012-09-05 17:12:55 -07005385
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -07005387 callback
5388
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 @return Result of the function call
5390*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005391WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005392WDI_SetTxPerTrackingReq
5393(
5394 WDI_SetTxPerTrackingReqParamsType* pwdiSetTxPerTrackingReqParams,
5395 WDI_SetTxPerTrackingRspCb pwdiSetTxPerTrackingRspCb,
5396 void* pUserData
5397)
5398{
5399 WDI_EventInfoType wdiEventData;
5400 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5401
5402 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005403 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 ------------------------------------------------------------------------*/
5405 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5406 {
5407 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5408 "WDI API call before module is initialized - Fail request");
5409
Jeff Johnsone7245742012-09-05 17:12:55 -07005410 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 }
5412
5413 /*------------------------------------------------------------------------
5414 Fill in Event data and post to the Main FSM
5415 ------------------------------------------------------------------------*/
5416 wdiEventData.wdiRequest = WDI_SET_TX_PER_TRACKING_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005417 wdiEventData.pEventData = pwdiSetTxPerTrackingReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 wdiEventData.uEventDataSize = sizeof(*pwdiSetTxPerTrackingReqParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07005419 wdiEventData.pCBfnc = pwdiSetTxPerTrackingRspCb;
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 wdiEventData.pUserData = pUserData;
5421
5422 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5423
5424}/*WDI_SetTxPerTrackingReq*/
5425
5426/**
5427 @brief WDI_SetTmLevelReq
5428 If HW Thermal condition changed, driver should react based on new
5429 HW thermal condition.
5430
5431 @param pwdiSetTmLevelReq: New thermal condition information
5432
5433 pwdiSetTmLevelRspCb: callback
5434
5435 usrData: user data will be passed back with the
5436 callback
5437
5438 @return Result of the function call
5439*/
5440WDI_Status
5441WDI_SetTmLevelReq
5442(
5443 WDI_SetTmLevelReqType *pwdiSetTmLevelReq,
5444 WDI_SetTmLevelCb pwdiSetTmLevelRspCb,
5445 void *usrData
5446)
5447{
5448 WDI_EventInfoType wdiEventData;
5449 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5450
5451 /*------------------------------------------------------------------------
5452 Sanity Check
5453 ------------------------------------------------------------------------*/
5454 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5455 {
5456 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5457 "WDI API call before module is initialized - Fail request");
5458
5459 return WDI_STATUS_E_NOT_ALLOWED;
5460 }
5461
5462 /*------------------------------------------------------------------------
5463 Fill in Event data and post to the Main FSM
5464 ------------------------------------------------------------------------*/
5465 wdiEventData.wdiRequest = WDI_SET_TM_LEVEL_REQ;
5466 wdiEventData.pEventData = pwdiSetTmLevelReq;
5467 wdiEventData.uEventDataSize = sizeof(*pwdiSetTmLevelReq);
5468 wdiEventData.pCBfnc = pwdiSetTmLevelRspCb;
5469 wdiEventData.pUserData = usrData;
5470
5471 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5472}
5473
5474/**
5475 @brief WDI_HostSuspendInd
5476
5477 Suspend Indication from the upper layer will be sent
5478 down to HAL
Jeff Johnsone7245742012-09-05 17:12:55 -07005479
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 @param WDI_SuspendResumeIndParamsType
Jeff Johnsone7245742012-09-05 17:12:55 -07005481
5482 @see
5483
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 @return Status of the request
5485*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005486WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -07005487WDI_HostSuspendInd
5488(
5489 WDI_SuspendParamsType* pwdiSuspendIndParams
5490)
5491{
5492
5493 WDI_EventInfoType wdiEventData;
5494 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5495
5496 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005497 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 ------------------------------------------------------------------------*/
5499 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5500 {
5501 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5502 "WDI API call before module is initialized - Fail request");
5503
Jeff Johnsone7245742012-09-05 17:12:55 -07005504 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 }
5506
5507 /*------------------------------------------------------------------------
5508 Fill in Event data and post to the Main FSM
5509 ------------------------------------------------------------------------*/
5510 wdiEventData.wdiRequest = WDI_HOST_SUSPEND_IND;
Jeff Johnsone7245742012-09-05 17:12:55 -07005511 wdiEventData.pEventData = pwdiSuspendIndParams;
5512 wdiEventData.uEventDataSize = sizeof(*pwdiSuspendIndParams);
5513 wdiEventData.pCBfnc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 wdiEventData.pUserData = NULL;
5515
5516 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5517
5518}/*WDI_HostSuspendInd*/
5519
5520/**
5521 @brief WDI_HALDumpCmdReq
5522 Post HAL DUMP Command Event
Jeff Johnsone7245742012-09-05 17:12:55 -07005523
5524 @param halDumpCmdReqParams: Hal Dump Command Body
5525 @param halDumpCmdRspCb: HAL DUMP Response from HAL CB
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 @param pUserData: Client Data
Jeff Johnsone7245742012-09-05 17:12:55 -07005527
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 @see
5529 @return Result of the function call
5530*/
5531WDI_Status WDI_HALDumpCmdReq
5532(
5533 WDI_HALDumpCmdReqParamsType *halDumpCmdReqParams,
5534 WDI_HALDumpCmdRspCb halDumpCmdRspCb,
5535 void *pUserData
5536)
5537{
5538 WDI_EventInfoType wdiEventData;
5539 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5540
5541 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005542 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 ------------------------------------------------------------------------*/
5544 if ( eWLAN_PAL_FALSE == gWDIInitialized )
5545 {
5546 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5547 "WDI API call before module is initialized - Fail request");
5548
Jeff Johnsone7245742012-09-05 17:12:55 -07005549 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 }
5551
5552 /*------------------------------------------------------------------------
5553 Fill in Event data and post to the Main FSM
5554 ------------------------------------------------------------------------*/
5555 wdiEventData.wdiRequest = WDI_HAL_DUMP_CMD_REQ;
5556 wdiEventData.pEventData = (void *)halDumpCmdReqParams;
5557 wdiEventData.uEventDataSize = sizeof(WDI_HALDumpCmdReqParamsType);
5558 wdiEventData.pCBfnc = halDumpCmdRspCb;
5559 wdiEventData.pUserData = pUserData;
5560
5561 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
5562}
5563
Jeff Johnsone7245742012-09-05 17:12:55 -07005564/*============================================================================
5565
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 DAL Control Path Main FSM Function Implementation
Jeff Johnsone7245742012-09-05 17:12:55 -07005567
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 ============================================================================*/
5569
5570/**
5571 @brief Main FSM Start function for all states except BUSY
5572
Jeff Johnsone7245742012-09-05 17:12:55 -07005573
5574 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 wdiEV: event posted to the main DAL FSM
5576 pEventData: pointer to the event information
Jeff Johnsone7245742012-09-05 17:12:55 -07005577 structure
5578
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 @see
5580 @return Result of the function call
5581*/
5582WDI_Status
5583WDI_PostMainEvent
5584(
Jeff Johnsone7245742012-09-05 17:12:55 -07005585 WDI_ControlBlockType* pWDICtx,
5586 WDI_MainEventType wdiEV,
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 WDI_EventInfoType* pEventData
Jeff Johnsone7245742012-09-05 17:12:55 -07005588
Jeff Johnson295189b2012-06-20 16:38:30 -07005589)
5590{
Jeff Johnsone7245742012-09-05 17:12:55 -07005591 WDI_Status wdiStatus;
5592 WDI_MainFuncType pfnWDIMainEvHdlr;
5593 WDI_MainStateType wdiOldState;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5595
5596 /*-------------------------------------------------------------------------
5597 Sanity check
5598 -------------------------------------------------------------------------*/
5599 if (( pWDICtx->uGlobalState >= WDI_MAX_ST ) ||
5600 ( wdiEV >= WDI_MAX_EVENT ))
5601 {
5602 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
5603 "Invalid state or event in Post Main Ev function ST: %d EV: %d",
5604 pWDICtx->uGlobalState, wdiEV);
Jeff Johnsone7245742012-09-05 17:12:55 -07005605 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 }
5607
5608 /*Access to the global state must be locked */
5609 wpalMutexAcquire(&pWDICtx->wptMutex);
5610
5611 /*Fetch event handler for state*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005612 pfnWDIMainEvHdlr = wdiMainFSM[pWDICtx->uGlobalState].pfnMainTbl[wdiEV];
Jeff Johnson295189b2012-06-20 16:38:30 -07005613
5614 wdiOldState = pWDICtx->uGlobalState;
5615
5616 /*
Jeff Johnsone7245742012-09-05 17:12:55 -07005617 --Incase of WDI event is WDI_RESPONSE_EVENT and this is called when a
5618 response comes from CCPU for the request sent by host:
5619 the WDI global state will be in WDI_BUSY_ST already, so do not set it to BUSY again.
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 This state will be set to WDI_STARTED_ST in WDI_MainRsp, if it is a expected response.
Jeff Johnsone7245742012-09-05 17:12:55 -07005621 --Incase of WDI event is WDI_RESPONSE_EVENT and it is an indication from the
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 CCPU:
5623 don't change the state */
5624 if ( WDI_RESPONSE_EVENT != wdiEV)
5625 {
5626 /*Transition to BUSY State - the request is now being processed by the FSM,
5627 if the request fails we shall transition back to the old state, if not
5628 the request will manage its own state transition*/
5629 WDI_STATE_TRANSITION( pWDICtx, WDI_BUSY_ST);
5630 }
5631 /* If the state function associated with the EV is NULL it means that this
5632 event is not allowed in this state*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005633 if ( NULL != pfnWDIMainEvHdlr )
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 {
5635 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005636 "Posting event %d in state: %d to the Main FSM",
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiEV, wdiOldState);
Jeff Johnsone7245742012-09-05 17:12:55 -07005638 wdiStatus = pfnWDIMainEvHdlr( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 }
5640 else
5641 {
5642 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07005643 "Unexpected event %d in state: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 wdiEV, wdiOldState);
Jeff Johnsone7245742012-09-05 17:12:55 -07005645 wdiStatus = WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 }
5647
5648 /* If a request handles itself well it will end up in a success or in a
5649 pending
5650 Success - means that the request was processed and the proper state
5651 transition already occurred or will occur when the resp is received
5652 - NO other state transition or dequeueing is required
Jeff Johnsone7245742012-09-05 17:12:55 -07005653
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 Pending - means the request could not be processed at this moment in time
5655 because the FSM was already busy so no state transition or dequeueing
5656 is necessary anymore
Jeff Johnsone7245742012-09-05 17:12:55 -07005657
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 Success for synchronous case means that the transition may occur and
5659 processing of pending requests may continue - so it should go through
5660 and restores the state and continue processing queued requests*/
5661 if (( WDI_STATUS_SUCCESS != wdiStatus )&&
5662 ( WDI_STATUS_PENDING != wdiStatus ))
5663 {
5664 if ( WDI_RESPONSE_EVENT != wdiEV)
5665 {
5666 /*The request has failed or could not be processed - transition back to
5667 the old state - check to see if anything was queued and try to execute
5668 The dequeue logic should post a message to a thread and return - no
5669 actual processing can occur */
5670 WDI_STATE_TRANSITION( pWDICtx, wdiOldState);
5671 }
5672 WDI_DequeuePendingReq(pWDICtx);
Jeff Johnsone7245742012-09-05 17:12:55 -07005673
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 }
5675
5676 /* we have completed processing the event */
5677 wpalMutexRelease(&pWDICtx->wptMutex);
5678
Jeff Johnsone7245742012-09-05 17:12:55 -07005679 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005680
5681}/*WDI_PostMainEvent*/
5682
5683
5684/*--------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005685 INIT State Functions
Jeff Johnson295189b2012-06-20 16:38:30 -07005686--------------------------------------------------------------------------*/
5687/**
5688 @brief Main FSM Start function for all states except BUSY
5689
Jeff Johnsone7245742012-09-05 17:12:55 -07005690
5691 @param pWDICtx: pointer to the WLAN DAL context
5692 pEventData: pointer to the event information structure
5693
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 @see
5695 @return Result of the function call
5696*/
5697WDI_Status
5698WDI_MainStart
Jeff Johnsone7245742012-09-05 17:12:55 -07005699(
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 WDI_ControlBlockType* pWDICtx,
5701 WDI_EventInfoType* pEventData
5702)
5703{
5704
5705 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005706 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 ----------------------------------------------------------------------*/
5708 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5709 {
5710 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005711 "Invalid parameters on Main Start %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 pWDICtx, pEventData);
5713 return WDI_STATUS_E_FAILURE;
5714 }
5715
5716 wpalMutexAcquire(&pWDICtx->wptMutex);
5717
5718 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005719 Check if the Control Transport has been opened
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 ----------------------------------------------------------------------*/
5721 if ( eWLAN_PAL_FALSE == pWDICtx->bCTOpened )
5722 {
5723 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
5724 "Control Transport not yet Open - queueing the request");
5725
5726 WDI_STATE_TRANSITION( pWDICtx, WDI_INIT_ST);
Jeff Johnsone7245742012-09-05 17:12:55 -07005727 WDI_QueuePendingReq( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07005728
5729 wpalMutexRelease(&pWDICtx->wptMutex);
5730 return WDI_STATUS_PENDING;
5731 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005732
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 wpalMutexRelease(&pWDICtx->wptMutex);
5734
5735 /*Return Success*/
5736 return WDI_ProcessRequest( pWDICtx, pEventData );
5737
5738}/*WDI_MainStart*/
5739
5740/**
5741 @brief Main FSM Response function for state INIT
5742
Jeff Johnsone7245742012-09-05 17:12:55 -07005743
5744 @param pWDICtx: pointer to the WLAN DAL context
5745 pEventData: pointer to the event information structure
5746
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 @see
5748 @return Result of the function call
5749*/
5750WDI_Status
5751WDI_MainRspInit
Jeff Johnsone7245742012-09-05 17:12:55 -07005752(
Jeff Johnson295189b2012-06-20 16:38:30 -07005753 WDI_ControlBlockType* pWDICtx,
5754 WDI_EventInfoType* pEventData
5755)
5756{
5757 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005758 Not expecting a response from the device before it is started
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005760 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761
5762 /*Return Success*/
5763 return WDI_STATUS_E_NOT_ALLOWED;
5764}/* WDI_MainRspInit */
5765
5766/**
5767 @brief Main FSM Close function for all states except BUSY
5768
Jeff Johnsone7245742012-09-05 17:12:55 -07005769
5770 @param pWDICtx: pointer to the WLAN DAL context
5771 pEventData: pointer to the event information structure
5772
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 @see
5774 @return Result of the function call
5775*/
5776WDI_Status
5777WDI_MainClose
Jeff Johnsone7245742012-09-05 17:12:55 -07005778(
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 WDI_ControlBlockType* pWDICtx,
5780 WDI_EventInfoType* pEventData
5781)
5782{
5783
5784 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005785 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 ----------------------------------------------------------------------*/
5787 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5788 {
5789 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005790 "Invalid parameters on Main Close %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 pWDICtx, pEventData);
5792 return WDI_STATUS_E_FAILURE;
5793 }
5794
5795 /*Return Success*/
5796 return WDI_ProcessRequest( pWDICtx, pEventData );
5797
5798}/*WDI_MainClose*/
5799/*--------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005800 STARTED State Functions
Jeff Johnson295189b2012-06-20 16:38:30 -07005801--------------------------------------------------------------------------*/
5802/**
5803 @brief Main FSM Start function for state STARTED
5804
Jeff Johnsone7245742012-09-05 17:12:55 -07005805
5806 @param pWDICtx: pointer to the WLAN DAL context
5807 pEventData: pointer to the event information structure
5808
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 @see
5810 @return Result of the function call
5811*/
5812WDI_Status
5813WDI_MainStartStarted
Jeff Johnsone7245742012-09-05 17:12:55 -07005814(
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 WDI_ControlBlockType* pWDICtx,
5816 WDI_EventInfoType* pEventData
5817)
5818{
5819 WDI_StartRspCb wdiStartRspCb = NULL;
5820 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
5821
5822 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005823 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 ----------------------------------------------------------------------*/
5825 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5826 {
5827 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005828 "Invalid parameters on Main Start %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 pWDICtx, pEventData);
5830 return WDI_STATUS_E_FAILURE;
5831 }
5832
5833 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005834 Nothing to do transport was already started
Jeff Johnson295189b2012-06-20 16:38:30 -07005835 ----------------------------------------------------------------------*/
5836 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005837 "Received start while transport was already started - nothing to do");
Jeff Johnson295189b2012-06-20 16:38:30 -07005838
5839 wpalMutexAcquire(&pWDICtx->wptMutex);
5840
5841 /*Transition back to started because the post function transitioned us to
5842 busy*/
5843 WDI_STATE_TRANSITION( pWDICtx, WDI_STARTED_ST);
5844
5845 /*Check to see if any request is pending*/
5846 WDI_DequeuePendingReq(pWDICtx);
Jeff Johnsone7245742012-09-05 17:12:55 -07005847
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 wpalMutexRelease(&pWDICtx->wptMutex);
5849
5850 /*Tell UMAC Success*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005851 wdiStartRspCb = (WDI_StartRspCb)pEventData->pCBfnc;
5852
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 /*Notify UMAC*/
5854 wdiStartRspCb( &pWDICtx->wdiCachedStartRspParams, pWDICtx->pRspCBUserData);
5855
5856 /*Return Success*/
5857 return WDI_STATUS_SUCCESS;
5858
5859}/*WDI_MainStartStarted*/
5860
5861/**
5862 @brief Main FSM Stop function for state STARTED
5863
Jeff Johnsone7245742012-09-05 17:12:55 -07005864
5865 @param pWDICtx: pointer to the WLAN DAL context
5866 pEventData: pointer to the event information structure
5867
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 @see
5869 @return Result of the function call
5870*/
5871WDI_Status
5872WDI_MainStopStarted
Jeff Johnsone7245742012-09-05 17:12:55 -07005873(
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 WDI_ControlBlockType* pWDICtx,
5875 WDI_EventInfoType* pEventData
5876)
5877{
5878 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005879 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 ----------------------------------------------------------------------*/
5881 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5882 {
5883 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07005884 "Invalid parameters on Main Start %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 pWDICtx, pEventData);
5886 return WDI_STATUS_E_FAILURE;
5887 }
5888
5889 /*State at this point is BUSY - because we enter this state before posting
5890 an event to the FSM in order to prevent potential race conditions*/
5891
5892 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
5893 "Processing stop request in FSM");
5894
5895 /*Return Success*/
5896 return WDI_ProcessRequest( pWDICtx, pEventData );
5897
5898}/*WDI_MainStopStarted*/
5899/**
5900 @brief Main FSM Request function for state started
5901
Jeff Johnsone7245742012-09-05 17:12:55 -07005902
5903 @param pWDICtx: pointer to the WLAN DAL context
5904 pEventData: pointer to the event information structure
5905
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 @see
5907 @return Result of the function call
5908*/
5909WDI_Status
5910WDI_MainReqStarted
Jeff Johnsone7245742012-09-05 17:12:55 -07005911(
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 WDI_ControlBlockType* pWDICtx,
5913 WDI_EventInfoType* pEventData
5914)
5915{
5916
5917 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005918 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 ----------------------------------------------------------------------*/
5920 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5921 {
5922 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005923 "Invalid parameters on Main Req Started %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 pWDICtx, pEventData);
5925 return WDI_STATUS_E_FAILURE;
5926 }
5927
5928 /*State at this point is BUSY - because we enter this state before posting
5929 an event to the FSM in order to prevent potential race conditions*/
5930
5931 /*Return Success*/
5932 return WDI_ProcessRequest( pWDICtx, pEventData );
5933
5934}/*WDI_MainReqStarted*/
5935
5936/**
5937 @brief Main FSM Response function for all states except INIT
5938
Jeff Johnsone7245742012-09-05 17:12:55 -07005939
5940 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 pEventData: pointer to the event information structure
Jeff Johnsone7245742012-09-05 17:12:55 -07005942
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 @see
5944 @return Result of the function call
5945*/
5946WDI_Status
5947WDI_MainRsp
Jeff Johnsone7245742012-09-05 17:12:55 -07005948(
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 WDI_ControlBlockType* pWDICtx,
5950 WDI_EventInfoType* pEventData
5951)
5952{
Jeff Johnsone7245742012-09-05 17:12:55 -07005953 WDI_Status wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 wpt_boolean expectedResponse;
5955
5956 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07005957 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 ----------------------------------------------------------------------*/
5959 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
5960 {
5961 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07005962 "Invalid parameters on Main Response %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 pWDICtx, pEventData);
5964 return WDI_STATUS_E_FAILURE;
5965 }
5966
5967 if ( pEventData->wdiResponse == pWDICtx->wdiExpectedResponse )
5968 {
5969 /* we received an expected response */
5970 expectedResponse = eWLAN_PAL_TRUE;
5971
5972 /*We expect that we will transition to started after this processing*/
5973 pWDICtx->ucExpectedStateTransition = WDI_STARTED_ST;
5974
5975 /* we are no longer expecting a response */
5976 pWDICtx->wdiExpectedResponse = WDI_MAX_RESP;
5977 }
5978 else
5979 {
5980 /* we received an indication or unexpected response */
5981 expectedResponse = eWLAN_PAL_FALSE;
5982 /* for indications no need to update state from what it is right
5983 now, unless it explicitly does it in the indication handler (say
5984 for device failure ind) */
5985 pWDICtx->ucExpectedStateTransition = pWDICtx->uGlobalState;
5986 }
5987
5988 /*Process the response and indication */
5989 wdiStatus = WDI_ProcessResponse( pWDICtx, pEventData );
5990
5991 /*Lock the CB as we are about to do a state transition*/
5992 wpalMutexAcquire(&pWDICtx->wptMutex);
5993
5994 /*Transition to the expected state after the response processing
5995 - this should always be started state with the following exceptions:
5996 1. processing of a failed start response
5997 2. device failure detected while processing response
5998 3. stop response received*/
5999 WDI_STATE_TRANSITION( pWDICtx, pWDICtx->ucExpectedStateTransition);
Jeff Johnsone7245742012-09-05 17:12:55 -07006000
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 /*Dequeue request that may have been queued while we were waiting for the
6002 response */
6003 if ( expectedResponse )
6004 {
Jeff Johnsone7245742012-09-05 17:12:55 -07006005 WDI_DequeuePendingReq(pWDICtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 }
6007
6008 wpalMutexRelease(&pWDICtx->wptMutex);
6009
6010 /*Return Success - always */
Jeff Johnsone7245742012-09-05 17:12:55 -07006011 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012
6013}/*WDI_MainRsp*/
6014
6015/*--------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006016 STOPPED State Functions
Jeff Johnson295189b2012-06-20 16:38:30 -07006017--------------------------------------------------------------------------*/
6018/**
6019 @brief Main FSM Stop function for state STOPPED
6020
Jeff Johnsone7245742012-09-05 17:12:55 -07006021
6022 @param pWDICtx: pointer to the WLAN DAL context
6023 pEventData: pointer to the event information structure
6024
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 @see
6026 @return Result of the function call
6027*/
6028WDI_Status
6029WDI_MainStopStopped
Jeff Johnsone7245742012-09-05 17:12:55 -07006030(
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 WDI_ControlBlockType* pWDICtx,
6032 WDI_EventInfoType* pEventData
6033)
6034{
6035 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006036 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 ----------------------------------------------------------------------*/
6038 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6039 {
6040 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07006041 "Invalid parameters on Main Stop Stopped %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 pWDICtx, pEventData);
6043 return WDI_STATUS_E_FAILURE;
6044 }
6045
6046 /*We should normally not get a STOP request if we are already stopped
6047 since we should normally be stopped by the UMAC. However in some
6048 error situations we put ourselves in the stopped state without the
6049 UMAC knowing, so when we get a STOP request in this state we still
6050 process it since we need to clean up the underlying state */
6051 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6052 "Processing stop request while stopped in FSM");
6053
6054 /*Return Success*/
6055 return WDI_ProcessRequest( pWDICtx, pEventData );
6056
6057}/*WDI_MainStopStopped*/
6058
6059/*--------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006060 BUSY State Functions
Jeff Johnson295189b2012-06-20 16:38:30 -07006061--------------------------------------------------------------------------*/
6062/**
6063 @brief Main FSM Start function for state BUSY
6064
Jeff Johnsone7245742012-09-05 17:12:55 -07006065
6066 @param pWDICtx: pointer to the WLAN DAL context
6067 pEventData: pointer to the event information structure
6068
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 @see
6070 @return Result of the function call
6071*/
6072WDI_Status
6073WDI_MainStartBusy
Jeff Johnsone7245742012-09-05 17:12:55 -07006074(
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 WDI_ControlBlockType* pWDICtx,
6076 WDI_EventInfoType* pEventData
6077)
6078{
6079 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006080 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 ----------------------------------------------------------------------*/
6082 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6083 {
6084 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07006085 "Invalid parameters on Main Start in BUSY %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 pWDICtx, pEventData);
6087 return WDI_STATUS_E_FAILURE;
6088 }
6089
6090 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006091 Check if the Control Transport has been opened
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 ----------------------------------------------------------------------*/
6093 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6094 "WDI Busy state - queue start request");
6095
6096 /*Queue the start request*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006097 WDI_QueuePendingReq( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07006098
6099 /*Return Success*/
6100 return WDI_STATUS_PENDING;
6101}/*WDI_MainStartBusy*/
6102
6103/**
6104 @brief Main FSM Stop function for state BUSY
6105
Jeff Johnsone7245742012-09-05 17:12:55 -07006106
6107 @param pWDICtx: pointer to the WLAN DAL context
6108 pEventData: pointer to the event information structure
6109
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 @see
6111 @return Result of the function call
6112*/
6113WDI_Status
6114WDI_MainStopBusy
Jeff Johnsone7245742012-09-05 17:12:55 -07006115(
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 WDI_ControlBlockType* pWDICtx,
6117 WDI_EventInfoType* pEventData
6118)
6119{
6120 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006121 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 ----------------------------------------------------------------------*/
6123 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6124 {
6125 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07006126 "Invalid parameters on Main Stop in BUSY %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 pWDICtx, pEventData);
6128 return WDI_STATUS_E_FAILURE;
6129 }
6130
6131 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006132 Check if the Control Transport has been opened
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 ----------------------------------------------------------------------*/
6134 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6135 "WDI Busy state - queue stop request");
6136
Jeff Johnsone7245742012-09-05 17:12:55 -07006137 WDI_QueuePendingReq( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 return WDI_STATUS_PENDING;
Jeff Johnsone7245742012-09-05 17:12:55 -07006139
Jeff Johnson295189b2012-06-20 16:38:30 -07006140}/*WDI_MainStopBusy*/
6141
6142/**
6143 @brief Main FSM Request function for state BUSY
6144
Jeff Johnsone7245742012-09-05 17:12:55 -07006145
6146 @param pWDICtx: pointer to the WLAN DAL context
6147 pEventData: pointer to the event information structure
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 @see
6150 @return Result of the function call
6151*/
6152WDI_Status
6153WDI_MainReqBusy
Jeff Johnsone7245742012-09-05 17:12:55 -07006154(
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 WDI_ControlBlockType* pWDICtx,
6156 WDI_EventInfoType* pEventData
6157)
6158{
6159 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006160 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 ----------------------------------------------------------------------*/
6162 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6163 {
6164 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07006165 "Invalid parameters on Main Request in BUSY %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 pWDICtx, pEventData);
6167 return WDI_STATUS_E_FAILURE;
6168 }
6169
6170 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006171 Check if the Control Transport has been opened
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 ----------------------------------------------------------------------*/
6173 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6174 "WDI Busy state - queue request %d because waiting for response %d",
6175 pEventData->wdiRequest, pWDICtx->wdiExpectedResponse);
6176
Jeff Johnsone7245742012-09-05 17:12:55 -07006177 WDI_QueuePendingReq( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 return WDI_STATUS_PENDING;
Jeff Johnsone7245742012-09-05 17:12:55 -07006179
Jeff Johnson295189b2012-06-20 16:38:30 -07006180}/*WDI_MainReqBusy*/
6181/**
6182 @brief Main FSM Close function for state BUSY
6183
Jeff Johnsone7245742012-09-05 17:12:55 -07006184
6185 @param pWDICtx: pointer to the WLAN DAL context
6186 pEventData: pointer to the event information structure
6187
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 @see
6189 @return Result of the function call
6190*/
6191WDI_Status
6192WDI_MainCloseBusy
Jeff Johnsone7245742012-09-05 17:12:55 -07006193(
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 WDI_ControlBlockType* pWDICtx,
6195 WDI_EventInfoType* pEventData
6196)
6197{
6198 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006199 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 ----------------------------------------------------------------------*/
6201 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6202 {
6203 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -07006204 "Invalid parameters on Main Close in BUSY %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 pWDICtx, pEventData);
6206 return WDI_STATUS_E_FAILURE;
6207 }
6208
6209 /*--------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006210 Check if the Control Transport has been opened
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 ----------------------------------------------------------------------*/
6212 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6213 "WDI Busy state - queue close request");
6214
Jeff Johnsone7245742012-09-05 17:12:55 -07006215 WDI_QueuePendingReq( pWDICtx, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07006216 return WDI_STATUS_PENDING;
Jeff Johnsone7245742012-09-05 17:12:55 -07006217
Jeff Johnson295189b2012-06-20 16:38:30 -07006218}/*WDI_MainCloseBusy*/
6219
6220/**
6221 @brief Main FSM Shutdown function for INIT & STARTED states
6222
6223
6224 @param pWDICtx: pointer to the WLAN DAL context
6225 pEventData: pointer to the event information structure
6226
6227 @see
6228 @return Result of the function call
6229*/
6230WDI_Status
6231WDI_MainShutdown
6232(
6233 WDI_ControlBlockType* pWDICtx,
6234 WDI_EventInfoType* pEventData
6235)
6236{
6237 /*--------------------------------------------------------------------
6238 Sanity Check
6239 ----------------------------------------------------------------------*/
6240 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6241 {
6242 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6243 "Invalid parameters on Main Start %x %x",
6244 pWDICtx, pEventData);
6245 return WDI_STATUS_E_FAILURE;
6246 }
6247
6248 /*State at this point is BUSY - because we enter this state before posting
6249 an event to the FSM in order to prevent potential race conditions*/
6250
6251 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
6252 "Processing shutdown request in FSM");
6253
6254 /*Return Success*/
6255 return WDI_ProcessRequest( pWDICtx, pEventData );
6256
6257}/*WDI_MainShutdown*/
6258
6259/**
6260 @brief Main FSM Shutdown function for BUSY state
6261
6262
6263 @param pWDICtx: pointer to the WLAN DAL context
6264 pEventData: pointer to the event information structure
6265
6266 @see
6267 @return Result of the function call
6268*/
6269WDI_Status
6270WDI_MainShutdownBusy
6271(
6272 WDI_ControlBlockType* pWDICtx,
6273 WDI_EventInfoType* pEventData
6274)
6275{
6276 /*--------------------------------------------------------------------
6277 Sanity Check
6278 ----------------------------------------------------------------------*/
6279 if (( NULL == pWDICtx ) || ( NULL == pEventData ))
6280 {
6281 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6282 "Invalid parameters on Main Start %x %x",
6283 pWDICtx, pEventData);
6284 return WDI_STATUS_E_FAILURE;
6285 }
6286
6287 /* If you are waiting for a HAL response at this stage, you are not
6288 * going to get it. Riva is already shutdown/crashed.
6289 */
6290 wpalTimerStop(&gWDICb.wptResponseTimer);
6291
6292 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
6293 "Processing shutdown request in FSM: Busy state ");
6294
6295 return WDI_ProcessRequest( pWDICtx, pEventData );
6296
6297}/*WDI_MainShutdownBusy*/
6298
6299
Jeff Johnsone7245742012-09-05 17:12:55 -07006300/*=======================================================================
6301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 WLAN DAL Control Path Main Processing Functions
Jeff Johnsone7245742012-09-05 17:12:55 -07006303
Jeff Johnson295189b2012-06-20 16:38:30 -07006304*=======================================================================*/
6305
6306/*========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -07006307 Main DAL Control Path Request Processing API
Jeff Johnson295189b2012-06-20 16:38:30 -07006308========================================================================*/
6309/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006310 @brief Process Start Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006312
6313 @param pWDICtx: pointer to the WLAN DAL context
6314 pEventData: pointer to the event information structure
6315
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 @see
6317 @return Result of the function call
6318*/
6319WDI_Status
6320WDI_ProcessStartReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006321(
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 WDI_ControlBlockType* pWDICtx,
6323 WDI_EventInfoType* pEventData
6324)
6325{
6326 WDI_StartReqParamsType* pwdiStartParams = NULL;
6327 WDI_StartRspCb wdiStartRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07006328 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 wpt_uint16 usDataOffset = 0;
6330 wpt_uint16 usSendSize = 0;
6331
Jeff Johnsone7245742012-09-05 17:12:55 -07006332 tHalMacStartReqMsg halStartReq;
6333 wpt_uint16 usLen = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6335
6336 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006337 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 -------------------------------------------------------------------------*/
6339 if (( NULL == pEventData ) ||
6340 ( NULL == (pwdiStartParams = (WDI_StartReqParamsType*)pEventData->pEventData)) ||
6341 ( NULL == (wdiStartRspCb = (WDI_StartRspCb)pEventData->pCBfnc)))
6342 {
6343 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
6344 "%s: Invalid parameters", __FUNCTION__);
6345 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006346 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 }
6348
6349 /*-----------------------------------------------------------------------
6350 Get message buffer
6351 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006352 usLen = sizeof(halStartReq.startReqParams) +
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 pwdiStartParams->usConfigBufferLen;
6354
Jeff Johnsone7245742012-09-05 17:12:55 -07006355 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_START_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 usLen,
6357 &pSendBuffer, &usDataOffset, &usSendSize))||
6358 ( usSendSize < (usDataOffset + usLen )))
6359 {
6360 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
6361 "Unable to get send buffer in start req %x %x %x",
6362 pEventData, pwdiStartParams, wdiStartRspCb);
6363 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006364 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 }
6366
6367 /*-----------------------------------------------------------------------
6368 Fill in the message
6369 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006370 halStartReq.startReqParams.driverType =
6371 WDI_2_HAL_DRV_TYPE(pwdiStartParams->wdiDriverType);
Jeff Johnson295189b2012-06-20 16:38:30 -07006372
Jeff Johnsone7245742012-09-05 17:12:55 -07006373 halStartReq.startReqParams.uConfigBufferLen =
6374 pwdiStartParams->usConfigBufferLen;
6375 wpalMemoryCopy( pSendBuffer+usDataOffset,
6376 &halStartReq.startReqParams,
6377 sizeof(halStartReq.startReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006378
Jeff Johnsone7245742012-09-05 17:12:55 -07006379 usDataOffset += sizeof(halStartReq.startReqParams);
6380 wpalMemoryCopy( pSendBuffer+usDataOffset,
6381 pwdiStartParams->pConfigBuffer,
6382 pwdiStartParams->usConfigBufferLen);
Jeff Johnson295189b2012-06-20 16:38:30 -07006383
6384 pWDICtx->wdiReqStatusCB = pwdiStartParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006385 pWDICtx->pReqStatusUserData = pwdiStartParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006386
6387 /*Save Low Level Ind CB and associated user data - it will be used further
6388 on when an indication is coming from the lower MAC*/
6389 pWDICtx->wdiLowLevelIndCB = pwdiStartParams->wdiLowLevelIndCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006390 pWDICtx->pIndUserData = pwdiStartParams->pIndUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006391
Jeff Johnsone7245742012-09-05 17:12:55 -07006392 pWDICtx->bFrameTransEnabled = pwdiStartParams->bFrameTransEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006394 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006396 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 wdiStartRspCb, pEventData->pUserData, WDI_START_RESP);
6398
Jeff Johnsone7245742012-09-05 17:12:55 -07006399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400}/*WDI_ProcessStartReq*/
6401
6402/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006403 @brief Process Stop Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006405
6406 @param pWDICtx: pointer to the WLAN DAL context
6407 pEventData: pointer to the event information structure
6408
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 @see
6410 @return Result of the function call
6411*/
6412WDI_Status
6413WDI_ProcessStopReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006414(
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 WDI_ControlBlockType* pWDICtx,
6416 WDI_EventInfoType* pEventData
6417)
6418{
6419 WDI_StopReqParamsType* pwdiStopParams = NULL;
6420 WDI_StopRspCb wdiStopRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07006421 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 wpt_uint16 usDataOffset = 0;
6423 wpt_uint16 usSendSize = 0;
Jeff Johnson43971f52012-07-17 12:26:56 -07006424 wpt_status status;
Jeff Johnsone7245742012-09-05 17:12:55 -07006425 tHalMacStopReqMsg halStopReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07006426 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6427
6428 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006429 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 -------------------------------------------------------------------------*/
6431 if (( NULL == pEventData ) ||
6432 ( NULL == (pwdiStopParams = (WDI_StopReqParamsType*)pEventData->pEventData)) ||
6433 ( NULL == (wdiStopRspCb = (WDI_StopRspCb)pEventData->pCBfnc)))
6434 {
6435 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6436 "%s: Invalid parameters", __FUNCTION__);
6437 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006438 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 }
6440
6441 /*-----------------------------------------------------------------------
6442 Get message buffer
6443 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006444 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_STOP_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006445 sizeof(halStopReq.stopReqParams),
6446 &pSendBuffer, &usDataOffset, &usSendSize))||
6447 ( usSendSize < (usDataOffset + sizeof(halStopReq.stopReqParams) )))
6448 {
6449 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6450 "Unable to get send buffer in stop req %x %x %x",
6451 pEventData, pwdiStopParams, wdiStopRspCb);
6452 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006453 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 }
6455
6456 /*-----------------------------------------------------------------------
6457 Fill in the message
6458 -----------------------------------------------------------------------*/
6459 halStopReq.stopReqParams.reason = WDI_2_HAL_STOP_REASON(
6460 pwdiStopParams->wdiStopReason);
6461
Jeff Johnsone7245742012-09-05 17:12:55 -07006462 wpalMemoryCopy( pSendBuffer+usDataOffset,
6463 &halStopReq.stopReqParams,
6464 sizeof(halStopReq.stopReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006465
6466 pWDICtx->wdiReqStatusCB = pwdiStopParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006467 pWDICtx->pReqStatusUserData = pwdiStopParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006468
6469 /*! TO DO: stop the data services */
6470 if ( eDRIVER_TYPE_MFG != pWDICtx->driverMode )
6471 {
6472 /*Stop the STA Table !UT- check this logic again
6473 It is safer to do it here than on the response - because a stop is imminent*/
6474 WDI_STATableStop(pWDICtx);
6475
6476 /* Reset the event to be not signalled */
Jeff Johnson43971f52012-07-17 12:26:56 -07006477 status = wpalEventReset(&pWDICtx->setPowerStateEvent);
6478 if (eWLAN_PAL_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 {
6480 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6481 "WDI Init failed to reset power state event");
6482
Jeff Johnsone7245742012-09-05 17:12:55 -07006483 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 return VOS_STATUS_E_FAILURE;
6485 }
6486 /* Stop Transport Driver, DXE */
6487 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_DOWN, WDI_SetPowerStateCb);
6488 /*
Jeff Johnsone7245742012-09-05 17:12:55 -07006489 * Wait for the event to be set once the ACK comes back from DXE
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 */
Jeff Johnson43971f52012-07-17 12:26:56 -07006491 status = wpalEventWait(&pWDICtx->setPowerStateEvent,
6492 WDI_SET_POWER_STATE_TIMEOUT);
6493 if (eWLAN_PAL_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 {
6495 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6496 "WDI Init failed to wait on an event");
6497
Jeff Johnsone7245742012-09-05 17:12:55 -07006498 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 return VOS_STATUS_E_FAILURE;
6500 }
6501 }
6502
6503 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006504 Send Stop Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006506 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 wdiStopRspCb, pEventData->pUserData, WDI_STOP_RESP);
6508
6509}/*WDI_ProcessStopReq*/
6510
6511/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006512 @brief Process Close Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006514
6515 @param pWDICtx: pointer to the WLAN DAL context
6516 pEventData: pointer to the event information structure
6517
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 @see
6519 @return Result of the function call
6520*/
6521WDI_Status
6522WDI_ProcessCloseReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006523(
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 WDI_ControlBlockType* pWDICtx,
6525 WDI_EventInfoType* pEventData
6526)
6527{
Jeff Johnsone7245742012-09-05 17:12:55 -07006528 wpt_status wptStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6530
6531 /*Lock control block for cleanup*/
6532 wpalMutexAcquire(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07006533
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 /*Clear all pending request*/
6535 WDI_ClearPendingRequests(pWDICtx);
6536
6537 /* Close Control transport*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006538 WCTS_CloseTransport(pWDICtx->wctsHandle);
Jeff Johnson295189b2012-06-20 16:38:30 -07006539
6540 /* Close Data transport*/
6541 /* FTM mode does not open Data Path */
6542 if ( eDRIVER_TYPE_MFG != pWDICtx->driverMode )
6543 {
6544 WDTS_Close(pWDICtx);
6545 }
6546
6547 /*Close the STA Table !UT- check this logic again*/
6548 WDI_STATableClose(pWDICtx);
6549
6550 /*close the PAL */
6551 wptStatus = wpalClose(pWDICtx->pPALContext);
6552 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
6553 {
6554 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6555 "Failed to wpal Close %d", wptStatus);
6556 WDI_ASSERT(0);
6557 }
6558
6559 /*Transition back to init state*/
6560 WDI_STATE_TRANSITION( pWDICtx, WDI_INIT_ST);
6561
6562 wpalMutexRelease(&pWDICtx->wptMutex);
6563
6564 /*Make sure the expected state is properly defaulted to Init*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006565 pWDICtx->ucExpectedStateTransition = WDI_INIT_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07006566
Jeff Johnsone7245742012-09-05 17:12:55 -07006567 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006568}/*WDI_ProcessCloseReq*/
6569
6570
6571/*===========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -07006572 SCANING REQUEST PROCESSING API
Jeff Johnson295189b2012-06-20 16:38:30 -07006573===========================================================================*/
6574
6575/**
6576 @brief Process Init Scan Request function (called when Main FSM
6577 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006578
6579 @param pWDICtx: pointer to the WLAN DAL context
6580 pEventData: pointer to the event information structure
6581
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 @see
6583 @return Result of the function call
6584*/
6585WDI_Status
6586WDI_ProcessInitScanReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006587(
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 WDI_ControlBlockType* pWDICtx,
6589 WDI_EventInfoType* pEventData
6590)
6591{
6592 WDI_InitScanReqParamsType* pwdiInitScanParams = NULL;
6593 WDI_InitScanRspCb wdiInitScanRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07006594 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 wpt_uint16 usDataOffset = 0;
6596 wpt_uint16 usSendSize = 0;
6597 wpt_uint8 i = 0;
6598
6599 tHalInitScanReqMsg halInitScanReqMsg;
6600
Jeff Johnsone7245742012-09-05 17:12:55 -07006601 /*This is temporary fix.
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 * It shold be removed once host and riva changes are in sync*/
6603 tHalInitScanConReqMsg halInitScanConReqMsg;
6604
6605 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6606
6607 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006608 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 -------------------------------------------------------------------------*/
6610 if (( NULL == pEventData ) ||
6611 ( NULL == (pwdiInitScanParams = (WDI_InitScanReqParamsType*)pEventData->pEventData)) ||
6612 ( NULL == (wdiInitScanRspCb = (WDI_InitScanRspCb)pEventData->pCBfnc)))
6613 {
6614 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6615 "%s: Invalid parameters", __FUNCTION__);
6616 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006617 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 }
6619
6620#if 0
6621 wpalMutexAcquire(&pWDICtx->wptMutex);
6622 /*-----------------------------------------------------------------------
6623 Check to see if SCAN is already in progress - if so reject the req
6624 We only allow one scan at a time
Jeff Johnsone7245742012-09-05 17:12:55 -07006625 ! TO DO: - revisit this constraint
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 -----------------------------------------------------------------------*/
6627 if ( pWDICtx->bScanInProgress )
6628 {
6629 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6630 "Scan is already in progress - subsequent scan is not allowed"
6631 " until the first scan completes");
6632
6633 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07006634 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 }
6636
Jeff Johnsone7245742012-09-05 17:12:55 -07006637 pWDICtx->bScanInProgress = eWLAN_PAL_TRUE;
6638 pWDICtx->uScanState = WDI_SCAN_INITIALIZED_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07006639
6640 wpalMutexRelease(&pWDICtx->wptMutex);
6641#endif
6642
6643 if (pwdiInitScanParams->wdiReqInfo.bUseNOA)
6644 {
Jeff Johnsone7245742012-09-05 17:12:55 -07006645 /*This is temporary fix.
Jeff Johnson295189b2012-06-20 16:38:30 -07006646 * It shold be removed once host and riva changes are in sync*/
6647 /*-----------------------------------------------------------------------
6648 Get message buffer
6649 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006650 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_INIT_SCAN_CON_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 sizeof(halInitScanConReqMsg.initScanParams),
6652 &pSendBuffer, &usDataOffset, &usSendSize))||
6653 ( usSendSize < (usDataOffset + sizeof(halInitScanConReqMsg.initScanParams) )))
6654 {
6655 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6656 "Unable to get send buffer in init scan req %x %x %x",
6657 pEventData, pwdiInitScanParams, wdiInitScanRspCb);
6658 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006659 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 }
6661
6662
6663 /*-----------------------------------------------------------------------
6664 Fill in the message
6665 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006666 halInitScanConReqMsg.initScanParams.scanMode =
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 WDI_2_HAL_SCAN_MODE(pwdiInitScanParams->wdiReqInfo.wdiScanMode);
6668
6669 wpalMemoryCopy(halInitScanConReqMsg.initScanParams.bssid,
6670 pwdiInitScanParams->wdiReqInfo.macBSSID, WDI_MAC_ADDR_LEN);
6671
Jeff Johnsone7245742012-09-05 17:12:55 -07006672 halInitScanConReqMsg.initScanParams.notifyBss =
Jeff Johnson295189b2012-06-20 16:38:30 -07006673 pwdiInitScanParams->wdiReqInfo.bNotifyBSS;
Jeff Johnsone7245742012-09-05 17:12:55 -07006674 halInitScanConReqMsg.initScanParams.frameType =
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 pwdiInitScanParams->wdiReqInfo.ucFrameType;
Jeff Johnsone7245742012-09-05 17:12:55 -07006676 halInitScanConReqMsg.initScanParams.frameLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 pwdiInitScanParams->wdiReqInfo.ucFrameLength;
6678
6679 WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr( &halInitScanConReqMsg.initScanParams.macMgmtHdr,
6680 &pwdiInitScanParams->wdiReqInfo.wdiMACMgmtHdr);
6681
6682#ifdef WLAN_FEATURE_P2P
6683 halInitScanConReqMsg.initScanParams.useNoA = pwdiInitScanParams->wdiReqInfo.bUseNOA;
6684 halInitScanConReqMsg.initScanParams.scanDuration = pwdiInitScanParams->wdiReqInfo.scanDuration;
6685#endif
6686
Jeff Johnsone7245742012-09-05 17:12:55 -07006687 halInitScanConReqMsg.initScanParams.scanEntry.activeBSScnt =
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 pwdiInitScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt;
6689
6690 for (i=0; i < pwdiInitScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt; i++)
6691 {
Jeff Johnsone7245742012-09-05 17:12:55 -07006692 halInitScanConReqMsg.initScanParams.scanEntry.bssIdx[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 pwdiInitScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i];
6694 }
6695
Jeff Johnsone7245742012-09-05 17:12:55 -07006696 wpalMemoryCopy( pSendBuffer+usDataOffset,
6697 &halInitScanConReqMsg.initScanParams,
6698 sizeof(halInitScanConReqMsg.initScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 }
6700 else
6701 {
6702 /*-----------------------------------------------------------------------
6703 Get message buffer
6704 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006705 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_INIT_SCAN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 sizeof(halInitScanReqMsg.initScanParams),
6707 &pSendBuffer, &usDataOffset, &usSendSize))||
6708 ( usSendSize < (usDataOffset + sizeof(halInitScanReqMsg.initScanParams) )))
6709 {
6710 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6711 "Unable to get send buffer in init scan req %x %x %x",
6712 pEventData, pwdiInitScanParams, wdiInitScanRspCb);
6713 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006714 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 }
6716
6717
6718 /*-----------------------------------------------------------------------
6719 Fill in the message
6720 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006721 halInitScanReqMsg.initScanParams.scanMode =
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 WDI_2_HAL_SCAN_MODE(pwdiInitScanParams->wdiReqInfo.wdiScanMode);
6723
6724 wpalMemoryCopy(halInitScanReqMsg.initScanParams.bssid,
6725 pwdiInitScanParams->wdiReqInfo.macBSSID, WDI_MAC_ADDR_LEN);
6726
Jeff Johnsone7245742012-09-05 17:12:55 -07006727 halInitScanReqMsg.initScanParams.notifyBss =
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 pwdiInitScanParams->wdiReqInfo.bNotifyBSS;
Jeff Johnsone7245742012-09-05 17:12:55 -07006729 halInitScanReqMsg.initScanParams.frameType =
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 pwdiInitScanParams->wdiReqInfo.ucFrameType;
Jeff Johnsone7245742012-09-05 17:12:55 -07006731 halInitScanReqMsg.initScanParams.frameLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07006732 pwdiInitScanParams->wdiReqInfo.ucFrameLength;
6733
6734 WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr( &halInitScanReqMsg.initScanParams.macMgmtHdr,
6735 &pwdiInitScanParams->wdiReqInfo.wdiMACMgmtHdr);
6736
Jeff Johnsone7245742012-09-05 17:12:55 -07006737 halInitScanReqMsg.initScanParams.scanEntry.activeBSScnt =
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 pwdiInitScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt;
6739
6740 for (i=0; i < pwdiInitScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt; i++)
6741 {
Jeff Johnsone7245742012-09-05 17:12:55 -07006742 halInitScanReqMsg.initScanParams.scanEntry.bssIdx[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 pwdiInitScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i];
6744 }
6745
Jeff Johnsone7245742012-09-05 17:12:55 -07006746 wpalMemoryCopy( pSendBuffer+usDataOffset,
6747 &halInitScanReqMsg.initScanParams,
6748 sizeof(halInitScanReqMsg.initScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 }
6750
6751 pWDICtx->wdiReqStatusCB = pwdiInitScanParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006752 pWDICtx->pReqStatusUserData = pwdiInitScanParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753
6754 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006755 Send Init Scan Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006757 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 wdiInitScanRspCb, pEventData->pUserData, WDI_INIT_SCAN_RESP);
6759
6760}/*WDI_ProcessInitScanReq*/
6761
6762/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006763 @brief Process Start Scan Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006765
6766 @param pWDICtx: pointer to the WLAN DAL context
6767 pEventData: pointer to the event information structure
6768
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 @see
6770 @return Result of the function call
6771*/
6772WDI_Status
6773WDI_ProcessStartScanReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006774(
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 WDI_ControlBlockType* pWDICtx,
6776 WDI_EventInfoType* pEventData
6777)
6778{
6779 WDI_StartScanReqParamsType* pwdiStartScanParams = NULL;
6780 WDI_StartScanRspCb wdiStartScanRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07006781 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 wpt_uint16 usDataOffset = 0;
6783 wpt_uint16 usSendSize = 0;
6784
Jeff Johnsone7245742012-09-05 17:12:55 -07006785 tHalStartScanReqMsg halStartScanReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6787
6788 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006789 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 -------------------------------------------------------------------------*/
6791 if (( NULL == pEventData ) ||
6792 ( NULL == (pwdiStartScanParams = (WDI_StartScanReqParamsType*)pEventData->pEventData)) ||
6793 ( NULL == (wdiStartScanRspCb = (WDI_StartScanRspCb)pEventData->pCBfnc)))
6794 {
6795 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6796 "%s: Invalid parameters", __FUNCTION__);
6797 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006798 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 }
6800
6801#if 0
6802 wpalMutexAcquire(&pWDICtx->wptMutex);
6803 /*-----------------------------------------------------------------------
6804 Check to see if SCAN is already in progress - start scan is only
6805 allowed when a scan is ongoing and the state of the scan procedure
Jeff Johnsone7245742012-09-05 17:12:55 -07006806 is either init or end
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006808 if (( !pWDICtx->bScanInProgress ) ||
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 (( WDI_SCAN_INITIALIZED_ST != pWDICtx->uScanState ) &&
6810 ( WDI_SCAN_ENDED_ST != pWDICtx->uScanState )))
6811 {
6812 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
6813 "Scan start not allowed in this state %d %d",
6814 pWDICtx->bScanInProgress, pWDICtx->uScanState);
Jeff Johnsone7245742012-09-05 17:12:55 -07006815
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07006817 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 }
6819
Jeff Johnsone7245742012-09-05 17:12:55 -07006820 pWDICtx->uScanState = WDI_SCAN_STARTED_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821
6822 wpalMutexRelease(&pWDICtx->wptMutex);
6823#endif
6824
6825 /*-----------------------------------------------------------------------
6826 Get message buffer
6827 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006828 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_START_SCAN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 sizeof(halStartScanReqMsg.startScanParams),
6830 &pSendBuffer, &usDataOffset, &usSendSize))||
6831 ( usSendSize < (usDataOffset + sizeof(halStartScanReqMsg.startScanParams) )))
6832 {
6833 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6834 "Unable to get send buffer in start scan req %x %x %x",
6835 pEventData, pwdiStartScanParams, wdiStartScanRspCb);
6836 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006837 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 }
6839
Jeff Johnsone7245742012-09-05 17:12:55 -07006840 halStartScanReqMsg.startScanParams.scanChannel =
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 pwdiStartScanParams->ucChannel;
Jeff Johnsone7245742012-09-05 17:12:55 -07006842 wpalMemoryCopy( pSendBuffer+usDataOffset,
6843 &halStartScanReqMsg.startScanParams,
6844 sizeof(halStartScanReqMsg.startScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006845
6846 pWDICtx->wdiReqStatusCB = pwdiStartScanParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006847 pWDICtx->pReqStatusUserData = pwdiStartScanParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848
6849 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006850 Send Start Scan Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006852 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 wdiStartScanRspCb, pEventData->pUserData, WDI_START_SCAN_RESP);
6854}/*WDI_ProcessStartScanReq*/
6855
6856
6857/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006858 @brief Process End Scan Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006860
6861 @param pWDICtx: pointer to the WLAN DAL context
6862 pEventData: pointer to the event information structure
6863
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 @see
6865 @return Result of the function call
6866*/
6867WDI_Status
6868WDI_ProcessEndScanReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006869(
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 WDI_ControlBlockType* pWDICtx,
6871 WDI_EventInfoType* pEventData
6872)
6873{
6874 WDI_EndScanReqParamsType* pwdiEndScanParams = NULL;
6875 WDI_EndScanRspCb wdiEndScanRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07006876 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 wpt_uint16 usDataOffset = 0;
6878 wpt_uint16 usSendSize = 0;
6879
Jeff Johnsone7245742012-09-05 17:12:55 -07006880 tHalEndScanReqMsg halEndScanReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6882
6883 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006884 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 -------------------------------------------------------------------------*/
6886 if (( NULL == pEventData ) ||
6887 ( NULL == (pwdiEndScanParams = (WDI_EndScanReqParamsType*)pEventData->pEventData)) ||
6888 ( NULL == (wdiEndScanRspCb = (WDI_EndScanRspCb)pEventData->pCBfnc)))
6889 {
6890 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6891 "%s: Invalid parameters", __FUNCTION__);
6892 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006893 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 }
6895
Jeff Johnsone7245742012-09-05 17:12:55 -07006896 /* commenting this check as UMAC is sending END_SCAN_REQ after FINISH_SCAN
6897 * sometimes because of this check the scan request is not being
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 * forwarded to HAL and result in hang*/
6899#if 0
6900 wpalMutexAcquire(&pWDICtx->wptMutex);
6901 /*-----------------------------------------------------------------------
6902 Check to see if SCAN is already in progress - end scan is only
6903 allowed when a scan is ongoing and the state of the scan procedure
6904 is started
6905 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006906 if (( !pWDICtx->bScanInProgress ) ||
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 ( WDI_SCAN_STARTED_ST != pWDICtx->uScanState ))
6908 {
6909 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6910 "End start not allowed in this state %d %d",
6911 pWDICtx->bScanInProgress, pWDICtx->uScanState);
Jeff Johnsone7245742012-09-05 17:12:55 -07006912
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07006914 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 }
6916
Jeff Johnsone7245742012-09-05 17:12:55 -07006917 pWDICtx->uScanState = WDI_SCAN_ENDED_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918
6919 wpalMutexRelease(&pWDICtx->wptMutex);
6920#endif
6921
6922 /*-----------------------------------------------------------------------
6923 Get message buffer
6924 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006925 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_END_SCAN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 sizeof(halEndScanReqMsg.endScanParams),
6927 &pSendBuffer, &usDataOffset, &usSendSize))||
6928 ( usSendSize < (usDataOffset + sizeof(halEndScanReqMsg.endScanParams) )))
6929 {
6930 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6931 "Unable to get send buffer in start scan req %x %x %x",
6932 pEventData, pwdiEndScanParams, wdiEndScanRspCb);
6933 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006934 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 }
6936
6937 halEndScanReqMsg.endScanParams.scanChannel = pwdiEndScanParams->ucChannel;
6938
Jeff Johnsone7245742012-09-05 17:12:55 -07006939 wpalMemoryCopy( pSendBuffer+usDataOffset,
6940 &halEndScanReqMsg.endScanParams,
6941 sizeof(halEndScanReqMsg.endScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07006942
6943 pWDICtx->wdiReqStatusCB = pwdiEndScanParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07006944 pWDICtx->pReqStatusUserData = pwdiEndScanParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006945
6946 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006947 Send End Scan Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07006949 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 wdiEndScanRspCb, pEventData->pUserData, WDI_END_SCAN_RESP);
6951}/*WDI_ProcessEndScanReq*/
6952
6953
6954/**
Jeff Johnsone7245742012-09-05 17:12:55 -07006955 @brief Process Finish Scan Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07006957
6958 @param pWDICtx: pointer to the WLAN DAL context
6959 pEventData: pointer to the event information structure
6960
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 @see
6962 @return Result of the function call
6963*/
6964WDI_Status
6965WDI_ProcessFinishScanReq
Jeff Johnsone7245742012-09-05 17:12:55 -07006966(
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 WDI_ControlBlockType* pWDICtx,
6968 WDI_EventInfoType* pEventData
6969)
6970{
6971 WDI_FinishScanReqParamsType* pwdiFinishScanParams;
6972 WDI_FinishScanRspCb wdiFinishScanRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07006973 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 wpt_uint16 usDataOffset = 0;
6975 wpt_uint16 usSendSize = 0;
6976 wpt_uint8 i = 0;
6977
Jeff Johnsone7245742012-09-05 17:12:55 -07006978 tHalFinishScanReqMsg halFinishScanReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6980
6981 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07006982 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 -------------------------------------------------------------------------*/
6984 if (( NULL == pEventData ) ||
6985 ( NULL == pEventData->pEventData) ||
6986 ( NULL == pEventData->pCBfnc))
6987 {
6988 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
6989 "%s: Invalid parameters", __FUNCTION__);
6990 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07006991 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 }
6993
6994 pwdiFinishScanParams = (WDI_FinishScanReqParamsType*)pEventData->pEventData;
6995 wdiFinishScanRspCb = (WDI_FinishScanRspCb)pEventData->pCBfnc;
Jeff Johnsone7245742012-09-05 17:12:55 -07006996 /* commenting this check as UMAC is sending END_SCAN_REQ after FINISH_SCAN
6997 * sometimes because of this check the scan request is not being
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 * forwarded to HAL and result in hang*/
6999#if 0
7000 wpalMutexAcquire(&pWDICtx->wptMutex);
7001 /*-----------------------------------------------------------------------
7002 Check to see if SCAN is already in progress
7003 Finish scan gets invoked any scan states. ie. abort scan
7004 It should be allowed in any states.
7005 -----------------------------------------------------------------------*/
7006 if ( !pWDICtx->bScanInProgress )
7007 {
7008 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7009 "Finish start not allowed in this state %d",
7010 pWDICtx->bScanInProgress );
7011
7012 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007013 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 }
7015
7016 /*-----------------------------------------------------------------------
7017 It is safe to reset the scan flags here because until the response comes
Jeff Johnsone7245742012-09-05 17:12:55 -07007018 back all subsequent requests will be blocked at BUSY state
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007020 pWDICtx->uScanState = WDI_SCAN_FINISHED_ST;
7021 pWDICtx->bScanInProgress = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 wpalMutexRelease(&pWDICtx->wptMutex);
7023#endif
7024
7025 if ( pWDICtx->bInBmps )
7026 {
7027 // notify DTS that we are entering BMPS
7028 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_BMPS, NULL);
7029 }
7030
7031 /*-----------------------------------------------------------------------
7032 Get message buffer
7033 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007034 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_FINISH_SCAN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 sizeof(halFinishScanReqMsg.finishScanParams),
7036 &pSendBuffer, &usDataOffset, &usSendSize))||
7037 ( usSendSize < (usDataOffset + sizeof(halFinishScanReqMsg.finishScanParams) )))
7038 {
7039 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7040 "Unable to get send buffer in start scan req %x %x %x",
7041 pEventData, pwdiFinishScanParams, wdiFinishScanRspCb);
7042 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007043 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 }
7045
Jeff Johnsone7245742012-09-05 17:12:55 -07007046 halFinishScanReqMsg.finishScanParams.scanMode =
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 WDI_2_HAL_SCAN_MODE(pwdiFinishScanParams->wdiReqInfo.wdiScanMode);
7048
Jeff Johnsone7245742012-09-05 17:12:55 -07007049 halFinishScanReqMsg.finishScanParams.currentOperChannel =
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 pwdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel;
7051
Jeff Johnsone7245742012-09-05 17:12:55 -07007052 halFinishScanReqMsg.finishScanParams.cbState =
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 WDI_2_HAL_CB_STATE(pwdiFinishScanParams->wdiReqInfo.wdiCBState);
7054
7055 wpalMemoryCopy(halFinishScanReqMsg.finishScanParams.bssid,
7056 pwdiFinishScanParams->wdiReqInfo.macBSSID, WDI_MAC_ADDR_LEN);
7057
Jeff Johnsone7245742012-09-05 17:12:55 -07007058 halFinishScanReqMsg.finishScanParams.notifyBss =
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 pwdiFinishScanParams->wdiReqInfo.bNotifyBSS ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007060 halFinishScanReqMsg.finishScanParams.frameType =
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 pwdiFinishScanParams->wdiReqInfo.ucFrameType ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007062 halFinishScanReqMsg.finishScanParams.frameLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 pwdiFinishScanParams->wdiReqInfo.ucFrameLength ;
7064
Jeff Johnsone7245742012-09-05 17:12:55 -07007065 halFinishScanReqMsg.finishScanParams.scanEntry.activeBSScnt =
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 pwdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt ;
7067
7068 for (i = 0; i < pwdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt; i++)
7069 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007070 halFinishScanReqMsg.finishScanParams.scanEntry.bssIdx[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 pwdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] ;
7072 }
7073
7074 WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr( &halFinishScanReqMsg.finishScanParams.macMgmtHdr,
7075 &pwdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr);
7076
Jeff Johnsone7245742012-09-05 17:12:55 -07007077 wpalMemoryCopy( pSendBuffer+usDataOffset,
7078 &halFinishScanReqMsg.finishScanParams,
7079 sizeof(halFinishScanReqMsg.finishScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007080
7081 pWDICtx->wdiReqStatusCB = pwdiFinishScanParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007082 pWDICtx->pReqStatusUserData = pwdiFinishScanParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007083
7084 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007085 Send Finish Scan Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007087 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 wdiFinishScanRspCb, pEventData->pUserData, WDI_FINISH_SCAN_RESP);
7089}/*WDI_ProcessFinishScanReq*/
7090
7091
7092/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -07007093 ASSOCIATION REQUEST API
Jeff Johnson295189b2012-06-20 16:38:30 -07007094==========================================================================*/
7095/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007096 @brief Process BSS Join for a given Session
7097
7098 @param pWDICtx: pointer to the WLAN DAL context
7099 pEventData: pointer to the event information structure
7100
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 @see
7102 @return Result of the function call
7103*/
7104WDI_Status
7105WDI_ProcessBSSSessionJoinReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007106(
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 WDI_ControlBlockType* pWDICtx,
7108 WDI_JoinReqParamsType* pwdiJoinParams,
7109 WDI_JoinRspCb wdiJoinRspCb,
7110 void* pUserData
7111)
7112{
7113 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007114 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 wpt_uint16 usDataOffset = 0;
7116 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007117 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007118
Jeff Johnsone7245742012-09-05 17:12:55 -07007119 tHalJoinReqMsg halJoinReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7121
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007122 wpalMutexAcquire(&pWDICtx->wptMutex);
7123
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 /*------------------------------------------------------------------------
7125 Check to see if we have any session with this BSSID already stored, we
7126 should not
7127 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007128 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
7129 pwdiJoinParams->wdiReqInfo.macBSSID,
7130 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007131
7132 if ( NULL != pBSSSes )
7133 {
7134 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007135 "Association for this BSSID: " MAC_ADDRESS_STR " is already in place",
7136 MAC_ADDR_ARRAY(pwdiJoinParams->wdiReqInfo.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07007137
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007138 /*reset the bAssociationInProgress otherwise the next
7139 *join request will be queued*/
7140 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
7141 wpalMutexRelease(&pWDICtx->wptMutex);
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -07007142 /* Reload the driver if we hit this error condition */
7143 wpalWlanReload();
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007144 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 }
7146
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007148 Fetch an empty session block
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007150 ucCurrentBSSSesIdx = WDI_FindEmptySession( pWDICtx, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 if ( NULL == pBSSSes )
7152 {
7153
7154 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7155 "DAL has no free sessions - cannot run another join");
7156
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007157 /*reset the bAssociationInProgress otherwise the next
7158 *join request will be queued*/
7159 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007161 return WDI_STATUS_RES_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 }
7163
7164 /*Save BSS Session Info*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007165 pBSSSes->bInUse = eWLAN_PAL_TRUE;
7166 wpalMemoryCopy( pBSSSes->macBSSID, pwdiJoinParams->wdiReqInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 WDI_MAC_ADDR_LEN);
7168
7169 /*Transition to state Joining*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007170 pBSSSes->wdiAssocState = WDI_ASSOC_JOINING_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 pWDICtx->ucCurrentBSSSesIdx = ucCurrentBSSSesIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -07007172
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 wpalMutexRelease(&pWDICtx->wptMutex);
7174
7175 /*-----------------------------------------------------------------------
7176 Get message buffer
7177 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007178 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_JOIN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 sizeof(halJoinReqMsg.joinReqParams),
7180 &pSendBuffer, &usDataOffset, &usSendSize))||
7181 ( usSendSize < (usDataOffset + sizeof(halJoinReqMsg.joinReqParams) )))
7182 {
7183 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7184 "Unable to get send buffer in join req %x %x %x",
7185 pUserData, pwdiJoinParams, wdiJoinRspCb);
7186 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007187 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 }
7189
7190 wpalMemoryCopy(halJoinReqMsg.joinReqParams.bssId,
Jeff Johnsone7245742012-09-05 17:12:55 -07007191 pwdiJoinParams->wdiReqInfo.macBSSID, WDI_MAC_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192
7193 wpalMemoryCopy(halJoinReqMsg.joinReqParams.selfStaMacAddr,
Jeff Johnsone7245742012-09-05 17:12:55 -07007194 pwdiJoinParams->wdiReqInfo.macSTASelf,
7195 WDI_MAC_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -07007196
Jeff Johnsone7245742012-09-05 17:12:55 -07007197 halJoinReqMsg.joinReqParams.ucChannel =
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 pwdiJoinParams->wdiReqInfo.wdiChannelInfo.ucChannel;
7199
7200 halJoinReqMsg.joinReqParams.linkState = pwdiJoinParams->wdiReqInfo.linkState;
7201
7202#ifndef WLAN_FEATURE_VOWIFI
Jeff Johnsone7245742012-09-05 17:12:55 -07007203 halJoinReqMsg.joinReqParams.ucLocalPowerConstraint =
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 pwdiJoinParams->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint;
7205#endif
7206
Jeff Johnsone7245742012-09-05 17:12:55 -07007207 halJoinReqMsg.joinReqParams.secondaryChannelOffset =
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 WDI_2_HAL_SEC_CH_OFFSET(pwdiJoinParams->wdiReqInfo.wdiChannelInfo.
7209 wdiSecondaryChannelOffset);
7210
Jeff Johnsone7245742012-09-05 17:12:55 -07007211 wpalMemoryCopy( pSendBuffer+usDataOffset,
7212 &halJoinReqMsg.joinReqParams,
7213 sizeof(halJoinReqMsg.joinReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007214
7215 pWDICtx->wdiReqStatusCB = pwdiJoinParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007216 pWDICtx->pReqStatusUserData = pwdiJoinParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007217
7218 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007219 Send Join Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007221 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
7222 wdiJoinRspCb, pUserData, WDI_JOIN_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07007223
7224}/*WDI_ProcessBSSSessionJoinReq*/
7225
7226/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007227 @brief Process Join Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007229
7230 @param pWDICtx: pointer to the WLAN DAL context
7231 pEventData: pointer to the event information structure
7232
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 @see
7234 @return Result of the function call
7235*/
7236WDI_Status
7237WDI_ProcessJoinReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007238(
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 WDI_ControlBlockType* pWDICtx,
7240 WDI_EventInfoType* pEventData
7241)
7242{
7243 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
7244 WDI_JoinReqParamsType* pwdiJoinParams = NULL;
7245 WDI_JoinRspCb wdiJoinRspCb = NULL;
7246 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7247
7248 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007249 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 -------------------------------------------------------------------------*/
7251 if (( NULL == pEventData ) ||
7252 ( NULL == (pwdiJoinParams = (WDI_JoinReqParamsType*)pEventData->pEventData)) ||
7253 ( NULL == (wdiJoinRspCb = (WDI_JoinRspCb)pEventData->pCBfnc)))
7254 {
7255 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7256 "%s: Invalid parameters", __FUNCTION__);
7257 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007258 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007260
Jeff Johnson295189b2012-06-20 16:38:30 -07007261 /*-------------------------------------------------------------------------
7262 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07007263 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 -------------------------------------------------------------------------*/
7265 wpalMutexAcquire(&pWDICtx->wptMutex);
7266
7267 if ( eWLAN_PAL_FALSE != pWDICtx->bAssociationInProgress )
7268 {
7269 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7270 "Association is currently in progress, queueing new join req");
7271
7272 /*Association is in progress - queue current one*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007273 wdiStatus = WDI_QueueNewAssocRequest(pWDICtx, pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 pwdiJoinParams->wdiReqInfo.macBSSID);
7275
7276 wpalMutexRelease(&pWDICtx->wptMutex);
7277
Jeff Johnsone7245742012-09-05 17:12:55 -07007278 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 }
7280
7281 /*Starting a new association */
7282 pWDICtx->bAssociationInProgress = eWLAN_PAL_TRUE;
7283 wpalMutexRelease(&pWDICtx->wptMutex);
7284
7285 /*Process the Join Request*/
7286 return WDI_ProcessBSSSessionJoinReq( pWDICtx, pwdiJoinParams,
7287 wdiJoinRspCb,pEventData->pUserData);
7288
7289}/*WDI_ProcessJoinReq*/
7290
7291
7292/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007293 @brief Process Config BSS Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007295
7296 @param pWDICtx: pointer to the WLAN DAL context
7297 pEventData: pointer to the event information structure
7298
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 @see
7300 @return Result of the function call
7301*/
7302WDI_Status
7303WDI_ProcessConfigBSSReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007304(
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 WDI_ControlBlockType* pWDICtx,
7306 WDI_EventInfoType* pEventData
7307)
7308{
7309 WDI_ConfigBSSReqParamsType* pwdiConfigBSSParams;
7310 WDI_ConfigBSSRspCb wdiConfigBSSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07007311 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007313 wpt_uint16 uMsgSize = 0;
7314 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 wpt_uint16 usDataOffset = 0;
7316 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007317 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007318
Jeff Johnsone7245742012-09-05 17:12:55 -07007319 tConfigBssReqMsg halConfigBssReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7321
7322 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007323 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007324 -------------------------------------------------------------------------*/
7325 if (( NULL == pEventData ) ||
7326 ( NULL == pEventData->pEventData ) ||
7327 ( NULL == pEventData->pCBfnc ))
7328 {
7329 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7330 "%s: Invalid parameters", __FUNCTION__);
7331 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007332 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 }
7334
7335 pwdiConfigBSSParams = (WDI_ConfigBSSReqParamsType*)pEventData->pEventData;
7336 wdiConfigBSSRspCb = (WDI_ConfigBSSRspCb)pEventData->pCBfnc;
7337 /*-------------------------------------------------------------------------
7338 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07007339 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07007340 -------------------------------------------------------------------------*/
7341 wpalMutexAcquire(&pWDICtx->wptMutex);
7342
7343 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007344 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007346 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
7347 pwdiConfigBSSParams->wdiReqInfo.macBSSID,
7348 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007349
Jeff Johnsone7245742012-09-05 17:12:55 -07007350 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 {
7352#ifdef WLAN_FEATURE_VOWIFI_11R
7353 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007354 Fetch an empty session block
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007356 ucCurrentBSSSesIdx = WDI_FindEmptySession( pWDICtx, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 if ( NULL == pBSSSes )
7358 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007359
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7361 "DAL has no free sessions - cannot run another join");
Jeff Johnsone7245742012-09-05 17:12:55 -07007362
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007364 return WDI_STATUS_RES_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007366
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 /*Save BSS Session Info*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007368 pBSSSes->bInUse = eWLAN_PAL_TRUE;
7369 wpalMemoryCopy( pBSSSes->macBSSID, pwdiConfigBSSParams->wdiReqInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07007371
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 /*Transition to state Joining*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007373 pBSSSes->wdiAssocState = WDI_ASSOC_JOINING_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07007374 pWDICtx->ucCurrentBSSSesIdx = ucCurrentBSSSesIdx;
7375#else
Jeff Johnsone7245742012-09-05 17:12:55 -07007376 /* If the BSS type is IBSS create the session here as there is no Join
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 * Request in case of IBSS*/
7378 if((pwdiConfigBSSParams->wdiReqInfo.wdiBSSType == WDI_IBSS_MODE) ||
7379 (pwdiConfigBSSParams->wdiReqInfo.wdiBSSType == WDI_INFRA_AP_MODE) ||
7380 (pwdiConfigBSSParams->wdiReqInfo.wdiBSSType == WDI_BTAMP_AP_MODE) ||
7381 (pwdiConfigBSSParams->wdiReqInfo.wdiBSSType == WDI_BTAMP_STA_MODE))
7382 {
7383 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007384 Fetch an empty session block
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007386 ucCurrentBSSSesIdx = WDI_FindEmptySession( pWDICtx, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 if ( NULL == pBSSSes )
7388 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007389
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7391 "DAL has no free sessions - cannot run another join");
Jeff Johnsone7245742012-09-05 17:12:55 -07007392
Jeff Johnson295189b2012-06-20 16:38:30 -07007393 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007394 return WDI_STATUS_RES_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007396
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 /*Save BSS Session Info*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007398 pBSSSes->bInUse = eWLAN_PAL_TRUE;
7399 wpalMemoryCopy( pBSSSes->macBSSID, pwdiConfigBSSParams->wdiReqInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07007401
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 /*Transition to state Joining*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007403 pBSSSes->wdiAssocState = WDI_ASSOC_JOINING_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 pWDICtx->ucCurrentBSSSesIdx = ucCurrentBSSSesIdx;
7405 }
7406 else
7407 {
7408 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07007409 "%s: Association sequence for this BSS does not yet exist." MAC_ADDRESS_STR "wdiBssType %d",
7410 __func__, MAC_ADDR_ARRAY(pwdiConfigBSSParams->wdiReqInfo.macBSSID),
7411 pwdiConfigBSSParams->wdiReqInfo.wdiBSSType);
7412
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 /* for IBSS testing */
7414 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007415 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 }
7417#endif
7418 }
7419
7420 /*------------------------------------------------------------------------
7421 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07007422 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 ------------------------------------------------------------------------*/
7424 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
7425 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007426 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7427 "%s: Association sequence for this BSS exists but currently queued. " MAC_ADDRESS_STR " bssIdx %d",
7428 __func__, MAC_ADDR_ARRAY(pwdiConfigBSSParams->wdiReqInfo.macBSSID),
7429 ucCurrentBSSSesIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07007430
Jeff Johnsone7245742012-09-05 17:12:55 -07007431 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07007432
7433 wpalMutexRelease(&pWDICtx->wptMutex);
7434
Jeff Johnsone7245742012-09-05 17:12:55 -07007435 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 }
7437
7438 /* Cache the request for response processing */
Jeff Johnsone7245742012-09-05 17:12:55 -07007439 wpalMemoryCopy(&pWDICtx->wdiCachedConfigBssReq,
7440 pwdiConfigBSSParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 sizeof(pWDICtx->wdiCachedConfigBssReq));
7442
7443 wpalMutexRelease(&pWDICtx->wptMutex);
7444
Jeff Johnsone7245742012-09-05 17:12:55 -07007445 /* Allocation of BssReqMsg Memory Based on Firmware Capabilities */
7446#ifdef WLAN_FEATURE_11AC
7447 if (WDI_getFwWlanFeatCaps(DOT11AC))
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007448 uMsgSize = sizeof(halConfigBssReqMsg.uBssParams.configBssParams_V1); // Version - 1 For 11AC
Jeff Johnsone7245742012-09-05 17:12:55 -07007449 else
7450#endif
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007451 uMsgSize = sizeof(halConfigBssReqMsg.uBssParams.configBssParams); // default Version - 0 Structure
Jeff Johnson295189b2012-06-20 16:38:30 -07007452
7453 /*-----------------------------------------------------------------------
7454 Get message buffer
7455 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007456 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CONFIG_BSS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 uMsgSize, &pSendBuffer, &usDataOffset, &usSendSize))||
7458 ( usSendSize < (usDataOffset + uMsgSize )))
7459 {
7460 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7461 "Unable to get send buffer in config bss req %x %x %x",
7462 pEventData, pwdiConfigBSSParams, wdiConfigBSSRspCb);
7463 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007464 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 }
7466
7467 /*Copy the BSS request */
Madan Mohan Koyyalamudia208d102012-10-15 15:18:18 -07007468#ifdef WLAN_FEATURE_11AC
7469 if (WDI_getFwWlanFeatCaps(DOT11AC))
7470 WDI_CopyWDIConfigBSSToHALConfigBSS( (tConfigBssParams*)&halConfigBssReqMsg.uBssParams.configBssParams_V1,
7471 &pwdiConfigBSSParams->wdiReqInfo);
7472 else
7473#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07007474 WDI_CopyWDIConfigBSSToHALConfigBSS( &halConfigBssReqMsg.uBssParams.configBssParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 &pwdiConfigBSSParams->wdiReqInfo);
7476
7477 /* Need to fill in the STA Index to invalid, since at this point we have not
7478 yet received it from HAL */
Jeff Johnsone7245742012-09-05 17:12:55 -07007479 halConfigBssReqMsg.uBssParams.configBssParams.staContext.staIdx = WDI_STA_INVALID_IDX;
Jeff Johnson295189b2012-06-20 16:38:30 -07007480
7481 /* Need to fill in the BSS index */
Jeff Johnsone7245742012-09-05 17:12:55 -07007482 halConfigBssReqMsg.uBssParams.configBssParams.staContext.bssIdx = pBSSSes->ucBSSIdx;
7483
7484 wpalMemoryCopy( pSendBuffer+usDataOffset,
7485 &halConfigBssReqMsg.uBssParams.configBssParams,
7486 uMsgSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007487
7488 pWDICtx->wdiReqStatusCB = pwdiConfigBSSParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007489 pWDICtx->pReqStatusUserData = pwdiConfigBSSParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490
7491 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007492 Send Config BSS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007494 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
7495 wdiConfigBSSRspCb, pEventData->pUserData,
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 WDI_CONFIG_BSS_RESP);
7497
7498}/*WDI_ProcessConfigBSSReq*/
7499
7500
7501/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007502 @brief Process Del BSS Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007504
7505 @param pWDICtx: pointer to the WLAN DAL context
7506 pEventData: pointer to the event information structure
7507
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 @see
7509 @return Result of the function call
7510*/
7511WDI_Status
7512WDI_ProcessDelBSSReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007513(
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 WDI_ControlBlockType* pWDICtx,
7515 WDI_EventInfoType* pEventData
7516)
7517{
7518 WDI_DelBSSReqParamsType* pwdiDelBSSParams = NULL;
7519 WDI_DelBSSRspCb wdiDelBSSRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007520 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007522 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 wpt_uint16 usDataOffset = 0;
7524 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007525 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526
Jeff Johnsone7245742012-09-05 17:12:55 -07007527 tDeleteBssReqMsg halBssReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7529
7530 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007531 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 -------------------------------------------------------------------------*/
7533 if (( NULL == pEventData ) ||
7534 ( NULL == (pwdiDelBSSParams = (WDI_DelBSSReqParamsType*)pEventData->pEventData)) ||
7535 ( NULL == (wdiDelBSSRspCb = (WDI_DelBSSRspCb)pEventData->pCBfnc)))
7536 {
7537 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7538 "%s: Invalid parameters", __FUNCTION__);
7539 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007540 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 }
7542
7543 /*-------------------------------------------------------------------------
7544 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07007545 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 -------------------------------------------------------------------------*/
7547 wpalMutexAcquire(&pWDICtx->wptMutex);
7548
7549 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007550 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007552 ucCurrentBSSSesIdx = WDI_FindAssocSessionByBSSIdx( pWDICtx,
7553 pwdiDelBSSParams->ucBssIdx,
7554 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555
Jeff Johnsone7245742012-09-05 17:12:55 -07007556 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07007557 {
7558 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07007559 "%s: BSS does not yet exist. ucBssIdx %d",
7560 __func__, pwdiDelBSSParams->ucBssIdx);
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -07007561 /* Allow the DEL_BSS to be processed by the HAL ,
7562 * This can come if some error condition happens
7563 * during the join process
7564 * Hit this condition if WDI cleans up BSS table
7565 * as part of the set link state with WDI_LINK_IDLE_STATE*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 }
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -07007567 else
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 {
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -07007569 /*------------------------------------------------------------------------
7570 Check if this BSS is being currently processed or queued,
7571 if queued - queue the new request as well
7572 ------------------------------------------------------------------------*/
7573 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
7574 {
7575 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7576 "%s: Association sequence for this BSS exists but currently queued. ucBssIdx %d",
7577 __func__, pwdiDelBSSParams->ucBssIdx);
7578
7579 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
7580
7581 wpalMutexRelease(&pWDICtx->wptMutex);
7582
7583 return wdiStatus;
7584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 /*-----------------------------------------------------------------------
7587 If we receive a Del BSS request for an association that is already in
7588 progress, it indicates that the assoc has failed => we no longer have
7589 an association in progress => we must check for pending associations
Jeff Johnsone7245742012-09-05 17:12:55 -07007590 that were queued and start as soon as the Del BSS response is received
Jeff Johnson295189b2012-06-20 16:38:30 -07007591 -----------------------------------------------------------------------*/
7592 if ( ucCurrentBSSSesIdx == pWDICtx->ucCurrentBSSSesIdx )
7593 {
7594 /*We can switch to false here because even if a subsequent Join comes in
7595 it will only be processed when DAL transitions out of BUSY state which
7596 happens when the Del BSS request comes */
7597 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
7598
7599 /*Former association is complete - prepare next pending assoc for
7600 processing */
7601 WDI_DequeueAssocRequest(pWDICtx);
7602 }
7603
7604 wpalMutexRelease(&pWDICtx->wptMutex);
7605 /*-----------------------------------------------------------------------
7606 Get message buffer
7607 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007608 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_DEL_BSS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 sizeof(halBssReqMsg.deleteBssParams),
7610 &pSendBuffer, &usDataOffset, &usSendSize))||
7611 ( usSendSize < (usDataOffset + sizeof(halBssReqMsg.deleteBssParams) )))
7612 {
7613 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7614 "Unable to get send buffer in start req %x %x %x",
7615 pEventData, pwdiDelBSSParams, wdiDelBSSRspCb);
7616 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007617 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 }
7619
7620 /*Fill in the message request structure*/
7621
7622 /*BSS Index is saved on config BSS response and Post Assoc Response */
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -07007623 halBssReqMsg.deleteBssParams.bssIdx = pwdiDelBSSParams->ucBssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007624
Jeff Johnsone7245742012-09-05 17:12:55 -07007625 wpalMemoryCopy( pSendBuffer+usDataOffset,
7626 &halBssReqMsg.deleteBssParams,
7627 sizeof(halBssReqMsg.deleteBssParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007628
7629 pWDICtx->wdiReqStatusCB = pwdiDelBSSParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007630 pWDICtx->pReqStatusUserData = pwdiDelBSSParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631
Jeff Johnsone7245742012-09-05 17:12:55 -07007632
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007634 Send Del BSS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007636 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 wdiDelBSSRspCb, pEventData->pUserData, WDI_DEL_BSS_RESP);
7638
Jeff Johnsone7245742012-09-05 17:12:55 -07007639
Jeff Johnson295189b2012-06-20 16:38:30 -07007640}/*WDI_ProcessDelBSSReq*/
7641
7642/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007643 @brief Process Post Assoc Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007645
7646 @param pWDICtx: pointer to the WLAN DAL context
7647 pEventData: pointer to the event information structure
7648
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 @see
7650 @return Result of the function call
7651*/
7652WDI_Status
7653WDI_ProcessPostAssocReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007654(
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 WDI_ControlBlockType* pWDICtx,
7656 WDI_EventInfoType* pEventData
7657)
7658{
7659 WDI_PostAssocReqParamsType* pwdiPostAssocParams = NULL;
7660 WDI_PostAssocRspCb wdiPostAssocRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007661 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007663 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 wpt_uint16 usDataOffset = 0;
7665 wpt_uint16 usSendSize = 0;
7666 wpt_uint16 uMsgSize = 0;
7667 wpt_uint16 uOffset = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007668 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007669
Jeff Johnsone7245742012-09-05 17:12:55 -07007670 tPostAssocReqMsg halPostAssocReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7672
7673 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007674 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 -------------------------------------------------------------------------*/
7676 if (( NULL == pEventData ) ||
7677 ( NULL == (pwdiPostAssocParams = (WDI_PostAssocReqParamsType*)pEventData->pEventData)) ||
7678 ( NULL == (wdiPostAssocRspCb = (WDI_PostAssocRspCb)pEventData->pCBfnc)))
7679 {
7680 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7681 "%s: Invalid parameters", __FUNCTION__);
7682 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007683 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 }
7685
7686 /*-------------------------------------------------------------------------
7687 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07007688 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 -------------------------------------------------------------------------*/
7690 wpalMutexAcquire(&pWDICtx->wptMutex);
7691
7692 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007693 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07007694 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007695 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
7696 pwdiPostAssocParams->wdiBSSParams.macBSSID,
7697 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07007698
7699 if ( NULL == pBSSSes )
7700 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007701 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7702 "%s: Association sequence for this BSS does not yet exist - "
7703 "operation not allowed. macBSSID " MAC_ADDRESS_STR,
7704 __func__, MAC_ADDR_ARRAY(pwdiPostAssocParams->wdiBSSParams.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07007705
7706 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007707 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 }
7709
7710 /*------------------------------------------------------------------------
7711 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07007712 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 ------------------------------------------------------------------------*/
7714 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
7715 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007716 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7717 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
7718 __func__, MAC_ADDR_ARRAY(pwdiPostAssocParams->wdiBSSParams.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07007719
Jeff Johnsone7245742012-09-05 17:12:55 -07007720 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07007721
7722 wpalMutexRelease(&pWDICtx->wptMutex);
7723
Jeff Johnsone7245742012-09-05 17:12:55 -07007724 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007725 }
7726
7727 /*-----------------------------------------------------------------------
7728 If Post Assoc was not yet received - the current association must
7729 be in progress
7730 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007731 if (( ucCurrentBSSSesIdx != pWDICtx->ucCurrentBSSSesIdx ) ||
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 ( eWLAN_PAL_FALSE == pWDICtx->bAssociationInProgress ))
7733 {
7734 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7735 "Association sequence for this BSS association no longer in "
7736 "progress - not allowed");
7737
7738 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007739 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 }
7741
7742 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007743 Post Assoc Request is only allowed in Joining state
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 -----------------------------------------------------------------------*/
7745 if ( WDI_ASSOC_JOINING_ST != pBSSSes->wdiAssocState)
7746 {
7747 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7748 "Post Assoc not allowed before JOIN - failing request");
7749
7750 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007751 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 }
7753
7754 wpalMutexRelease(&pWDICtx->wptMutex);
7755
7756 uMsgSize = sizeof(halPostAssocReqMsg.postAssocReqParams.configStaParams) +
7757 sizeof(halPostAssocReqMsg.postAssocReqParams.configBssParams) ;
7758 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007759 Fill message for tx over the bus
Jeff Johnson295189b2012-06-20 16:38:30 -07007760 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007761 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_POST_ASSOC_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 uMsgSize,&pSendBuffer, &usDataOffset, &usSendSize))||
7763 ( usSendSize < (usDataOffset + uMsgSize )))
7764 {
7765 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7766 "Unable to get send buffer in start req %x %x %x",
7767 pEventData, pwdiPostAssocParams, wdiPostAssocRspCb);
7768 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007769 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 }
7771
7772 /*Copy the STA parameters */
7773 WDI_CopyWDIStaCtxToHALStaCtx(&halPostAssocReqMsg.postAssocReqParams.configStaParams,
7774 &pwdiPostAssocParams->wdiSTAParams );
7775
7776 /* Need to fill in the self STA Index */
Jeff Johnsone7245742012-09-05 17:12:55 -07007777 if ( WDI_STATUS_SUCCESS !=
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 WDI_STATableFindStaidByAddr(pWDICtx,
7779 pwdiPostAssocParams->wdiSTAParams.macSTA,
7780 (wpt_uint8*)&halPostAssocReqMsg.postAssocReqParams.configStaParams.staIdx ))
7781 {
7782 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7783 "This station does not exist in the WDI Station Table %d");
7784 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007785 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 }
7787
7788 /* Need to fill in the BSS index */
Jeff Johnsone7245742012-09-05 17:12:55 -07007789 halPostAssocReqMsg.postAssocReqParams.configStaParams.bssIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 pBSSSes->ucBSSIdx;
7791
7792 /*Copy the BSS parameters */
7793 WDI_CopyWDIConfigBSSToHALConfigBSS( &halPostAssocReqMsg.postAssocReqParams.configBssParams,
7794 &pwdiPostAssocParams->wdiBSSParams);
7795
7796 /* Need to fill in the STA index of the peer */
Jeff Johnsone7245742012-09-05 17:12:55 -07007797 if ( WDI_STATUS_SUCCESS !=
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 WDI_STATableFindStaidByAddr(pWDICtx,
7799 pwdiPostAssocParams->wdiBSSParams.wdiSTAContext.macSTA,
Jeff Johnsone7245742012-09-05 17:12:55 -07007800 (wpt_uint8*)&halPostAssocReqMsg.postAssocReqParams.configBssParams.staContext.staIdx))
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 {
7802 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7803 "This station does not exist in the WDI Station Table %d");
7804 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007805 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 }
7807
7808 /* Need to fill in the BSS index */
Jeff Johnsone7245742012-09-05 17:12:55 -07007809 halPostAssocReqMsg.postAssocReqParams.configStaParams.bssIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 pBSSSes->ucBSSIdx;
7811
Jeff Johnsone7245742012-09-05 17:12:55 -07007812
7813 wpalMemoryCopy( pSendBuffer+usDataOffset,
7814 &halPostAssocReqMsg.postAssocReqParams.configStaParams,
7815 sizeof(halPostAssocReqMsg.postAssocReqParams.configStaParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007816
7817 uOffset = sizeof(halPostAssocReqMsg.postAssocReqParams.configStaParams);
7818
Jeff Johnsone7245742012-09-05 17:12:55 -07007819 wpalMemoryCopy( pSendBuffer+usDataOffset + uOffset,
7820 &halPostAssocReqMsg.postAssocReqParams.configBssParams,
7821 sizeof(halPostAssocReqMsg.postAssocReqParams.configBssParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007822
Jeff Johnsone7245742012-09-05 17:12:55 -07007823
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 pWDICtx->wdiReqStatusCB = pwdiPostAssocParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007825 pWDICtx->pReqStatusUserData = pwdiPostAssocParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007826
Jeff Johnsone7245742012-09-05 17:12:55 -07007827
7828 wpalMemoryCopy( &pWDICtx->wdiCachedPostAssocReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 pwdiPostAssocParams,
Jeff Johnsone7245742012-09-05 17:12:55 -07007830 sizeof(pWDICtx->wdiCachedPostAssocReq));
Jeff Johnson295189b2012-06-20 16:38:30 -07007831
7832 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007833 Send Post Assoc Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007835 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 wdiPostAssocRspCb, pEventData->pUserData, WDI_POST_ASSOC_RESP);
7837
Jeff Johnsone7245742012-09-05 17:12:55 -07007838
Jeff Johnson295189b2012-06-20 16:38:30 -07007839}/*WDI_ProcessPostAssocReq*/
7840
7841/**
Jeff Johnsone7245742012-09-05 17:12:55 -07007842 @brief Process Del STA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007844
7845 @param pWDICtx: pointer to the WLAN DAL context
7846 pEventData: pointer to the event information structure
7847
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 @see
7849 @return Result of the function call
7850*/
7851WDI_Status
7852WDI_ProcessDelSTAReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007853(
Jeff Johnson295189b2012-06-20 16:38:30 -07007854 WDI_ControlBlockType* pWDICtx,
7855 WDI_EventInfoType* pEventData
7856)
7857{
7858 WDI_DelSTAReqParamsType* pwdiDelSTAParams;
7859 WDI_DelSTARspCb wdiDelSTARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07007860 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007862 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 wpt_uint16 usDataOffset = 0;
7864 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007865 wpt_macAddr macBSSID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
7867
Jeff Johnsone7245742012-09-05 17:12:55 -07007868 tDeleteStaReqMsg halDelStaReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7870
7871 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007872 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 -------------------------------------------------------------------------*/
7874 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
7875 ( NULL == pEventData->pCBfnc ))
7876 {
7877 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7878 "%s: Invalid parameters", __FUNCTION__);
7879 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007880 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 }
7882
7883 pwdiDelSTAParams = (WDI_DelSTAReqParamsType*)pEventData->pEventData;
7884 wdiDelSTARspCb = (WDI_DelSTARspCb)pEventData->pCBfnc;
7885 /*-------------------------------------------------------------------------
7886 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07007887 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 -------------------------------------------------------------------------*/
7889 wpalMutexAcquire(&pWDICtx->wptMutex);
7890
7891 /*------------------------------------------------------------------------
7892 Find the BSS for which the request is made and identify WDI session
7893 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007894 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
7895 pwdiDelSTAParams->ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 &macBSSID))
7897 {
7898 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7899 "This station does not exist in the WDI Station Table %d");
7900 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007901 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 }
7903
Jeff Johnsone7245742012-09-05 17:12:55 -07007904 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
7905 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007907 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
7908 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
7909 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07007910
7911 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007912 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 }
7914
7915 /*------------------------------------------------------------------------
7916 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07007917 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 ------------------------------------------------------------------------*/
7919 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
7920 {
Jeff Johnsone7245742012-09-05 17:12:55 -07007921 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7922 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
7923 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07007924
Jeff Johnsone7245742012-09-05 17:12:55 -07007925 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07007927 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 }
7929
7930 wpalMutexRelease(&pWDICtx->wptMutex);
7931 /*-----------------------------------------------------------------------
7932 Get message buffer
7933 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007934 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_DEL_STA_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 sizeof(halDelStaReqMsg.delStaParams),
7936 &pSendBuffer, &usDataOffset, &usSendSize))||
7937 ( usSendSize < (usDataOffset + sizeof(halDelStaReqMsg.delStaParams) )))
7938 {
7939 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
7940 "Unable to get send buffer in start req %x %x %x",
7941 pEventData, pwdiDelSTAParams, wdiDelSTARspCb);
7942 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07007943 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 }
7945
Jeff Johnsone7245742012-09-05 17:12:55 -07007946 halDelStaReqMsg.delStaParams.staIdx = pwdiDelSTAParams->ucSTAIdx;
7947 wpalMemoryCopy( pSendBuffer+usDataOffset,
7948 &halDelStaReqMsg.delStaParams,
7949 sizeof(halDelStaReqMsg.delStaParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07007950
7951 pWDICtx->wdiReqStatusCB = pwdiDelSTAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07007952 pWDICtx->pReqStatusUserData = pwdiDelSTAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007953
7954 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007955 Send Del STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07007957 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 wdiDelSTARspCb, pEventData->pUserData, WDI_DEL_STA_RESP);
7959
7960}/*WDI_ProcessDelSTAReq*/
7961
7962
7963/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -07007964 SECURITY REQUEST PROCESSING API
Jeff Johnson295189b2012-06-20 16:38:30 -07007965==========================================================================*/
7966/**
7967 @brief Process Set BSS Key Request function (called when Main FSM
7968 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07007969
7970 @param pWDICtx: pointer to the WLAN DAL context
7971 pEventData: pointer to the event information structure
7972
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 @see
7974 @return Result of the function call
7975*/
7976WDI_Status
7977WDI_ProcessSetBssKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07007978(
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 WDI_ControlBlockType* pWDICtx,
7980 WDI_EventInfoType* pEventData
7981)
7982{
7983 WDI_SetBSSKeyReqParamsType* pwdiSetBSSKeyParams;
7984 WDI_SetBSSKeyRspCb wdiSetBSSKeyRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07007985 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07007987 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 wpt_uint16 usDataOffset = 0;
7989 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07007990 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 tSetBssKeyReqMsg halSetBssKeyReqMsg = {{0}};
7992 wpt_uint8 keyIndex = 0;
7993
7994 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
7995
7996 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07007997 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 -------------------------------------------------------------------------*/
7999 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8000 ( NULL == pEventData->pCBfnc ))
8001 {
8002 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8003 "%s: Invalid parameters", __FUNCTION__);
8004 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008005 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 }
8007
8008 pwdiSetBSSKeyParams = (WDI_SetBSSKeyReqParamsType*)pEventData->pEventData;
8009 wdiSetBSSKeyRspCb = (WDI_SetBSSKeyRspCb)pEventData->pCBfnc;
8010 /*-------------------------------------------------------------------------
8011 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008012 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 -------------------------------------------------------------------------*/
8014 wpalMutexAcquire(&pWDICtx->wptMutex);
8015
8016 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008017 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008019 ucCurrentBSSSesIdx = WDI_FindAssocSessionByBSSIdx( pWDICtx,
8020 pwdiSetBSSKeyParams->wdiBSSKeyInfo.ucBssIdx,
8021 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07008022
Jeff Johnsone7245742012-09-05 17:12:55 -07008023 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 {
8025 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07008026 "%s: Association sequence for this BSS does not yet exist. ucBssIdx %d",
8027 __func__, pwdiSetBSSKeyParams->wdiBSSKeyInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028
8029 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008030 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 }
8032
8033 /*------------------------------------------------------------------------
8034 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008035 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 ------------------------------------------------------------------------*/
8037 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8038 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008039 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8040 "%s: Association sequence for this BSS exists but currently queued. ucBssIdx %d",
8041 __func__, pwdiSetBSSKeyParams->wdiBSSKeyInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07008042
Jeff Johnsone7245742012-09-05 17:12:55 -07008043 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008045 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 }
8047
8048
8049 wpalMutexRelease(&pWDICtx->wptMutex);
8050 /*-----------------------------------------------------------------------
8051 Get message buffer
8052 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008053 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_BSS_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 sizeof(halSetBssKeyReqMsg.setBssKeyParams),
8055 &pSendBuffer, &usDataOffset, &usSendSize))||
8056 ( usSendSize < (usDataOffset + sizeof(halSetBssKeyReqMsg.setBssKeyParams) )))
8057 {
8058 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8059 "Unable to get send buffer in set bss key req %x %x %x",
8060 pEventData, pwdiSetBSSKeyParams, wdiSetBSSKeyRspCb);
8061 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008062 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 }
8064
8065 /*-----------------------------------------------------------------------
8066 Copy the Key parameters into the HAL message
8067 -----------------------------------------------------------------------*/
8068
Jeff Johnsone7245742012-09-05 17:12:55 -07008069 halSetBssKeyReqMsg.setBssKeyParams.bssIdx = ucCurrentBSSSesIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008070
Jeff Johnsone7245742012-09-05 17:12:55 -07008071 halSetBssKeyReqMsg.setBssKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 WDI_2_HAL_ENC_TYPE (pwdiSetBSSKeyParams->wdiBSSKeyInfo.wdiEncType);
8073
Jeff Johnsone7245742012-09-05 17:12:55 -07008074 halSetBssKeyReqMsg.setBssKeyParams.numKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 pwdiSetBSSKeyParams->wdiBSSKeyInfo.ucNumKeys;
8076
8077 for(keyIndex = 0; keyIndex < pwdiSetBSSKeyParams->wdiBSSKeyInfo.ucNumKeys ;
8078 keyIndex++)
8079 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008080 halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].keyId;
8082 halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].unicast =
8083 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].unicast;
8084 halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].keyDirection =
8085 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection;
8086 wpalMemoryCopy(halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -07008087 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07008089 halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -07008091 halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].keyLength;
8093 wpalMemoryCopy(halSetBssKeyReqMsg.setBssKeyParams.key[keyIndex].key,
Jeff Johnsone7245742012-09-05 17:12:55 -07008094 pwdiSetBSSKeyParams->wdiBSSKeyInfo.aKeys[keyIndex].key,
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 WDI_MAX_KEY_LENGTH);
8096 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008097
8098 wpalMemoryCopy( pSendBuffer+usDataOffset,
8099 &halSetBssKeyReqMsg.setBssKeyParams,
8100 sizeof(halSetBssKeyReqMsg.setBssKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008101
8102 pWDICtx->wdiReqStatusCB = pwdiSetBSSKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008103 pWDICtx->pReqStatusUserData = pwdiSetBSSKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008104
8105 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008106 Send Set BSS Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008108 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
8109 wdiSetBSSKeyRspCb, pEventData->pUserData,
8110 WDI_SET_BSS_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008111
8112}/*WDI_ProcessSetBssKeyReq*/
8113
8114/**
Jeff Johnsone7245742012-09-05 17:12:55 -07008115 @brief Process Remove BSS Key Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008117
8118 @param pWDICtx: pointer to the WLAN DAL context
8119 pEventData: pointer to the event information structure
8120
Jeff Johnson295189b2012-06-20 16:38:30 -07008121 @see
8122 @return Result of the function call
8123*/
8124WDI_Status
8125WDI_ProcessRemoveBssKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008126(
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 WDI_ControlBlockType* pWDICtx,
8128 WDI_EventInfoType* pEventData
8129)
8130{
8131 WDI_RemoveBSSKeyReqParamsType* pwdiRemoveBSSKeyParams;
8132 WDI_RemoveBSSKeyRspCb wdiRemoveBSSKeyRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07008133 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008135 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 wpt_uint16 usDataOffset = 0;
8137 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008138 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 tRemoveBssKeyReqMsg halRemoveBssKeyReqMsg = {{0}};
8140 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8141
8142 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008143 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 -------------------------------------------------------------------------*/
8145 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8146 ( NULL == pEventData->pCBfnc ))
8147 {
8148 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8149 "%s: Invalid parameters", __FUNCTION__);
8150 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008151 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 }
8153
8154 pwdiRemoveBSSKeyParams = (WDI_RemoveBSSKeyReqParamsType*)pEventData->pEventData;
8155 wdiRemoveBSSKeyRspCb = (WDI_RemoveBSSKeyRspCb)pEventData->pCBfnc;
8156 /*-------------------------------------------------------------------------
8157 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008158 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 -------------------------------------------------------------------------*/
8160 wpalMutexAcquire(&pWDICtx->wptMutex);
8161
8162 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008163 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008165 ucCurrentBSSSesIdx = WDI_FindAssocSessionByBSSIdx( pWDICtx,
8166 pwdiRemoveBSSKeyParams->wdiKeyInfo.ucBssIdx,
8167 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07008168
Jeff Johnsone7245742012-09-05 17:12:55 -07008169 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 {
8171 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07008172 "%s: Association sequence for this BSS does not yet exist. ucBssIdx %d",
8173 __func__, pwdiRemoveBSSKeyParams->wdiKeyInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07008174
8175 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008176 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 }
8178
8179 /*------------------------------------------------------------------------
8180 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008181 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 ------------------------------------------------------------------------*/
8183 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8184 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008185 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8186 "%s: Association sequence for this BSS exists but currently queued. ucBssIdx %d",
8187 __func__, pwdiRemoveBSSKeyParams->wdiKeyInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07008188
Jeff Johnsone7245742012-09-05 17:12:55 -07008189 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008191 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 }
8193
8194
8195 wpalMutexRelease(&pWDICtx->wptMutex);
8196
8197 /*-----------------------------------------------------------------------
8198 Get message buffer
8199 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008200 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RMV_BSS_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 sizeof(halRemoveBssKeyReqMsg.removeBssKeyParams),
8202 &pSendBuffer, &usDataOffset, &usSendSize))||
8203 ( usSendSize < (usDataOffset + sizeof(halRemoveBssKeyReqMsg.removeBssKeyParams) )))
8204 {
8205 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8206 "Unable to get send buffer in set bss key req %x %x %x",
8207 pEventData, pwdiRemoveBSSKeyParams, wdiRemoveBSSKeyRspCb);
8208 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008209 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 }
8211 /*-----------------------------------------------------------------------
8212 Copy the Key parameters into the HAL message
8213 -----------------------------------------------------------------------*/
8214 halRemoveBssKeyReqMsg.removeBssKeyParams.bssIdx = ucCurrentBSSSesIdx;
8215
Jeff Johnsone7245742012-09-05 17:12:55 -07008216 halRemoveBssKeyReqMsg.removeBssKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 WDI_2_HAL_ENC_TYPE (pwdiRemoveBSSKeyParams->wdiKeyInfo.wdiEncType);
8218
8219 halRemoveBssKeyReqMsg.removeBssKeyParams.keyId = pwdiRemoveBSSKeyParams->wdiKeyInfo.ucKeyId;
8220
Jeff Johnsone7245742012-09-05 17:12:55 -07008221 halRemoveBssKeyReqMsg.removeBssKeyParams.wepType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 WDI_2_HAL_WEP_TYPE(pwdiRemoveBSSKeyParams->wdiKeyInfo.wdiWEPType);
8223
Jeff Johnsone7245742012-09-05 17:12:55 -07008224 wpalMemoryCopy( pSendBuffer+usDataOffset,
8225 &halRemoveBssKeyReqMsg.removeBssKeyParams,
8226 sizeof(halRemoveBssKeyReqMsg.removeBssKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008227
8228 pWDICtx->wdiReqStatusCB = pwdiRemoveBSSKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008229 pWDICtx->pReqStatusUserData = pwdiRemoveBSSKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008230
8231 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008232 Send Remove BSS Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008234 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 wdiRemoveBSSKeyRspCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -07008236 WDI_RMV_BSS_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237}/*WDI_ProcessRemoveBssKeyReq*/
8238
8239/**
Jeff Johnsone7245742012-09-05 17:12:55 -07008240 @brief Process Set STA KeyRequest function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008242
8243 @param pWDICtx: pointer to the WLAN DAL context
8244 pEventData: pointer to the event information structure
8245
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 @see
8247 @return Result of the function call
8248*/
8249WDI_Status
8250WDI_ProcessSetStaKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008251(
Jeff Johnson295189b2012-06-20 16:38:30 -07008252 WDI_ControlBlockType* pWDICtx,
8253 WDI_EventInfoType* pEventData
8254)
8255{
8256 WDI_SetSTAKeyReqParamsType* pwdiSetSTAKeyParams;
8257 WDI_SetSTAKeyRspCb wdiSetSTAKeyRspCb;
8258 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008259 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 wpt_uint16 usDataOffset = 0;
8261 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008262 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 wpt_macAddr macBSSID;
Jeff Johnsone7245742012-09-05 17:12:55 -07008264 wpt_uint8 ucCurrentBSSSesIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 tSetStaKeyReqMsg halSetStaKeyReqMsg = {{0}};
8266 wpt_uint8 keyIndex = 0;
8267
8268 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8269
8270 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008271 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 -------------------------------------------------------------------------*/
8273 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8274 ( NULL == pEventData->pCBfnc ))
8275 {
8276 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8277 "%s: Invalid parameters", __FUNCTION__);
8278 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008279 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 }
8281
8282 pwdiSetSTAKeyParams = (WDI_SetSTAKeyReqParamsType*)pEventData->pEventData;
8283 wdiSetSTAKeyRspCb = (WDI_SetSTAKeyRspCb)pEventData->pCBfnc;
8284 /*-------------------------------------------------------------------------
8285 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008286 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 -------------------------------------------------------------------------*/
8288 wpalMutexAcquire(&pWDICtx->wptMutex);
8289
8290 /*------------------------------------------------------------------------
8291 Find the BSS for which the request is made and identify WDI session
8292 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008293 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
8294 pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 &macBSSID))
8296 {
8297 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8298 "This station does not exist in the WDI Station Table %d");
8299 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008300 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 }
8302
Jeff Johnsone7245742012-09-05 17:12:55 -07008303 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
8304 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008306 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
8307 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
8308 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008309
8310 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008311 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008313
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 /*------------------------------------------------------------------------
8315 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008316 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 ------------------------------------------------------------------------*/
8318 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8319 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008320 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8321 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
8322 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008323
Jeff Johnsone7245742012-09-05 17:12:55 -07008324 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008326 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 }
8328
8329
8330 wpalMutexRelease(&pWDICtx->wptMutex);
8331 /*-----------------------------------------------------------------------
8332 Get message buffer
8333 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008334 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_STA_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 sizeof(halSetStaKeyReqMsg.setStaKeyParams),
8336 &pSendBuffer, &usDataOffset, &usSendSize))||
8337 ( usSendSize < (usDataOffset + sizeof(halSetStaKeyReqMsg.setStaKeyParams) )))
8338 {
8339 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8340 "Unable to get send buffer in set bss key req %x %x %x",
8341 pEventData, pwdiSetSTAKeyParams, wdiSetSTAKeyRspCb);
8342 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008343 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 }
8345 /*-----------------------------------------------------------------------
8346 Copy the STA Key parameters into the HAL message
8347 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008348 halSetStaKeyReqMsg.setStaKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 WDI_2_HAL_ENC_TYPE (pwdiSetSTAKeyParams->wdiKeyInfo.wdiEncType);
8350
Jeff Johnsone7245742012-09-05 17:12:55 -07008351 halSetStaKeyReqMsg.setStaKeyParams.wepType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 WDI_2_HAL_WEP_TYPE (pwdiSetSTAKeyParams->wdiKeyInfo.wdiWEPType );
8353
8354 halSetStaKeyReqMsg.setStaKeyParams.staIdx = pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx;
8355
8356 halSetStaKeyReqMsg.setStaKeyParams.defWEPIdx = pwdiSetSTAKeyParams->wdiKeyInfo.ucDefWEPIdx;
8357
8358 halSetStaKeyReqMsg.setStaKeyParams.singleTidRc = pwdiSetSTAKeyParams->wdiKeyInfo.ucSingleTidRc;
8359
8360#ifdef WLAN_SOFTAP_FEATURE
8361 for(keyIndex = 0; keyIndex < pwdiSetSTAKeyParams->wdiKeyInfo.ucNumKeys ;
8362 keyIndex++)
8363 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008364 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyId;
8366 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].unicast =
8367 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].unicast;
8368 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyDirection =
8369 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyDirection;
8370 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -07008371 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07008373 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -07008375 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyLength;
8377 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].key,
Jeff Johnsone7245742012-09-05 17:12:55 -07008378 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].key,
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 WDI_MAX_KEY_LENGTH);
8380 }
8381#else
Jeff Johnsone7245742012-09-05 17:12:55 -07008382 halSetStaKeyReqMsg.setStaKeyParams.key.keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyId;
8384 halSetStaKeyReqMsg.setStaKeyParams.key.unicast =
8385 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].unicast;
8386 halSetStaKeyReqMsg.setStaKeyParams.key.keyDirection =
8387 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyDirection;
8388 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key.keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -07008389 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07008391 halSetStaKeyReqMsg.setStaKeyParams.key.paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -07008393 halSetStaKeyReqMsg.setStaKeyParams.key.keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyLength;
8395 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key.key,
Jeff Johnsone7245742012-09-05 17:12:55 -07008396 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].key,
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 WDI_MAX_KEY_LENGTH);
8398#endif
8399
Jeff Johnsone7245742012-09-05 17:12:55 -07008400 wpalMemoryCopy( pSendBuffer+usDataOffset,
8401 &halSetStaKeyReqMsg.setStaKeyParams,
8402 sizeof(halSetStaKeyReqMsg.setStaKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008403
8404 pWDICtx->wdiReqStatusCB = pwdiSetSTAKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008405 pWDICtx->pReqStatusUserData = pwdiSetSTAKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406
8407 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008408 Send Set STA Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008410 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
8411 wdiSetSTAKeyRspCb, pEventData->pUserData,
8412 WDI_SET_STA_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008413
8414}/*WDI_ProcessSetSTAKeyReq*/
8415
8416/**
Jeff Johnsone7245742012-09-05 17:12:55 -07008417 @brief Process Remove STA Key Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008419
8420 @param pWDICtx: pointer to the WLAN DAL context
8421 pEventData: pointer to the event information structure
8422
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 @see
8424 @return Result of the function call
8425*/
8426WDI_Status
8427WDI_ProcessRemoveStaKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008428(
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 WDI_ControlBlockType* pWDICtx,
8430 WDI_EventInfoType* pEventData
8431)
8432{
8433 WDI_RemoveSTAKeyReqParamsType* pwdiRemoveSTAKeyParams;
8434 WDI_RemoveSTAKeyRspCb wdiRemoveSTAKeyRspCb;
8435 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008436 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 wpt_uint16 usDataOffset = 0;
8438 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008439 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 wpt_macAddr macBSSID;
8441 wpt_uint8 ucCurrentBSSSesIdx;
8442 tRemoveStaKeyReqMsg halRemoveStaKeyReqMsg = {{0}};
8443 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8444
8445 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008446 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 -------------------------------------------------------------------------*/
8448 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8449 ( NULL == pEventData->pCBfnc ))
8450 {
8451 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8452 "%s: Invalid parameters", __FUNCTION__);
8453 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008454 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 }
8456
8457 pwdiRemoveSTAKeyParams = (WDI_RemoveSTAKeyReqParamsType*)pEventData->pEventData;
8458 wdiRemoveSTAKeyRspCb = (WDI_RemoveSTAKeyRspCb)pEventData->pCBfnc;
8459 /*-------------------------------------------------------------------------
8460 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008461 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008462 -------------------------------------------------------------------------*/
8463 wpalMutexAcquire(&pWDICtx->wptMutex);
8464
8465 /*------------------------------------------------------------------------
8466 Find the BSS for which the request is made and identify WDI session
8467 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008468 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
8469 pwdiRemoveSTAKeyParams->wdiKeyInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 &macBSSID))
8471 {
8472 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8473 "This station does not exist in the WDI Station Table %d");
8474 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008475 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 }
8477
Jeff Johnsone7245742012-09-05 17:12:55 -07008478 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
8479 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008481 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
8482 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
8483 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008484
8485 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008486 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008488
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 /*------------------------------------------------------------------------
8490 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008491 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 ------------------------------------------------------------------------*/
8493 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8494 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008495 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8496 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
8497 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008498
Jeff Johnsone7245742012-09-05 17:12:55 -07008499 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008501 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 }
8503
8504
8505
8506 wpalMutexRelease(&pWDICtx->wptMutex);
8507 /*-----------------------------------------------------------------------
8508 Get message buffer
8509 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008510 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RMV_STA_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 sizeof(halRemoveStaKeyReqMsg.removeStaKeyParams),
8512 &pSendBuffer, &usDataOffset, &usSendSize))||
8513 ( usSendSize < (usDataOffset + sizeof(halRemoveStaKeyReqMsg.removeStaKeyParams) )))
8514 {
8515 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8516 "Unable to get send buffer in set bss key req %x %x %x",
8517 pEventData, pwdiRemoveSTAKeyParams, wdiRemoveSTAKeyRspCb);
8518 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008519 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 }
8521
8522 /*-----------------------------------------------------------------------
8523 Copy the Key parameters into the HAL message
8524 -----------------------------------------------------------------------*/
8525
Jeff Johnsone7245742012-09-05 17:12:55 -07008526 halRemoveStaKeyReqMsg.removeStaKeyParams.staIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 pwdiRemoveSTAKeyParams->wdiKeyInfo.ucSTAIdx;
8528
Jeff Johnsone7245742012-09-05 17:12:55 -07008529 halRemoveStaKeyReqMsg.removeStaKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 WDI_2_HAL_ENC_TYPE (pwdiRemoveSTAKeyParams->wdiKeyInfo.wdiEncType);
8531
Jeff Johnsone7245742012-09-05 17:12:55 -07008532 halRemoveStaKeyReqMsg.removeStaKeyParams.keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 pwdiRemoveSTAKeyParams->wdiKeyInfo.ucKeyId;
8534
Jeff Johnsone7245742012-09-05 17:12:55 -07008535 halRemoveStaKeyReqMsg.removeStaKeyParams.unicast =
Jeff Johnson295189b2012-06-20 16:38:30 -07008536 pwdiRemoveSTAKeyParams->wdiKeyInfo.ucUnicast;
8537
Jeff Johnsone7245742012-09-05 17:12:55 -07008538 wpalMemoryCopy( pSendBuffer+usDataOffset,
8539 &halRemoveStaKeyReqMsg.removeStaKeyParams,
8540 sizeof(halRemoveStaKeyReqMsg.removeStaKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008541
8542 pWDICtx->wdiReqStatusCB = pwdiRemoveSTAKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008543 pWDICtx->pReqStatusUserData = pwdiRemoveSTAKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008544
8545 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008546 Send Remove STA Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008548 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 wdiRemoveSTAKeyRspCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -07008550 WDI_RMV_STA_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551
8552}/*WDI_ProcessRemoveSTAKeyReq*/
8553
8554/**
Jeff Johnsone7245742012-09-05 17:12:55 -07008555 @brief Process Set STA KeyRequest function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008557
8558 @param pWDICtx: pointer to the WLAN DAL context
8559 pEventData: pointer to the event information structure
8560
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 @see
8562 @return Result of the function call
8563*/
8564WDI_Status
8565WDI_ProcessSetStaBcastKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008566(
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 WDI_ControlBlockType* pWDICtx,
8568 WDI_EventInfoType* pEventData
8569)
8570{
8571 WDI_SetSTAKeyReqParamsType* pwdiSetSTAKeyParams;
8572 WDI_SetSTAKeyRspCb wdiSetSTAKeyRspCb;
8573 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008574 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 wpt_uint16 usDataOffset = 0;
8576 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008577 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 wpt_macAddr macBSSID;
Jeff Johnsone7245742012-09-05 17:12:55 -07008579 wpt_uint8 ucCurrentBSSSesIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 tSetStaKeyReqMsg halSetStaKeyReqMsg = {{0}};
8581 wpt_uint8 keyIndex = 0;
8582
8583 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8584
8585 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008586 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 -------------------------------------------------------------------------*/
8588 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8589 ( NULL == pEventData->pCBfnc ))
8590 {
8591 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8592 "%s: Invalid parameters", __FUNCTION__);
8593 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008594 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 }
8596
8597 pwdiSetSTAKeyParams = (WDI_SetSTAKeyReqParamsType*)pEventData->pEventData;
8598 wdiSetSTAKeyRspCb = (WDI_SetSTAKeyRspCb)pEventData->pCBfnc;
8599 /*-------------------------------------------------------------------------
8600 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008601 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 -------------------------------------------------------------------------*/
8603 wpalMutexAcquire(&pWDICtx->wptMutex);
8604
8605 /*------------------------------------------------------------------------
8606 Find the BSS for which the request is made and identify WDI session
8607 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008608 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
8609 pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 &macBSSID))
8611 {
8612 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8613 "This station does not exist in the WDI Station Table %d");
8614 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008615 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 }
8617
Jeff Johnsone7245742012-09-05 17:12:55 -07008618 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
8619 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 {
8621 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07008622 "Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
8623 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008624
8625 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008626 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008627 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008628
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 /*------------------------------------------------------------------------
8630 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008631 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 ------------------------------------------------------------------------*/
8633 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8634 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008635 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8636 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
8637 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008638
Jeff Johnsone7245742012-09-05 17:12:55 -07008639 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008641 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 }
8643
8644
8645 wpalMutexRelease(&pWDICtx->wptMutex);
8646 /*-----------------------------------------------------------------------
8647 Get message buffer
8648 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008649 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_STA_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 sizeof(halSetStaKeyReqMsg.setStaKeyParams),
8651 &pSendBuffer, &usDataOffset, &usSendSize))||
8652 ( usSendSize < (usDataOffset + sizeof(halSetStaKeyReqMsg.setStaKeyParams) )))
8653 {
8654 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8655 "Unable to get send buffer in set bss key req %x %x %x",
8656 pEventData, pwdiSetSTAKeyParams, wdiSetSTAKeyRspCb);
8657 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008658 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 }
8660 /*-----------------------------------------------------------------------
8661 Copy the STA Key parameters into the HAL message
8662 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008663 halSetStaKeyReqMsg.setStaKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 WDI_2_HAL_ENC_TYPE (pwdiSetSTAKeyParams->wdiKeyInfo.wdiEncType);
8665
Jeff Johnsone7245742012-09-05 17:12:55 -07008666 halSetStaKeyReqMsg.setStaKeyParams.wepType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 WDI_2_HAL_WEP_TYPE (pwdiSetSTAKeyParams->wdiKeyInfo.wdiWEPType );
8668
8669 halSetStaKeyReqMsg.setStaKeyParams.staIdx = pwdiSetSTAKeyParams->wdiKeyInfo.ucSTAIdx;
8670
8671 halSetStaKeyReqMsg.setStaKeyParams.defWEPIdx = pwdiSetSTAKeyParams->wdiKeyInfo.ucDefWEPIdx;
8672
8673 halSetStaKeyReqMsg.setStaKeyParams.singleTidRc = pwdiSetSTAKeyParams->wdiKeyInfo.ucSingleTidRc;
8674
8675#ifdef WLAN_SOFTAP_FEATURE
8676 for(keyIndex = 0; keyIndex < pwdiSetSTAKeyParams->wdiKeyInfo.ucNumKeys ;
8677 keyIndex++)
8678 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008679 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyId;
8681 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].unicast =
8682 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].unicast;
8683 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyDirection =
8684 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyDirection;
8685 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -07008686 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07008688 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -07008690 halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].keyLength;
8692 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key[keyIndex].key,
Jeff Johnsone7245742012-09-05 17:12:55 -07008693 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[keyIndex].key,
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 WDI_MAX_KEY_LENGTH);
8695 }
8696#else
Jeff Johnsone7245742012-09-05 17:12:55 -07008697 halSetStaKeyReqMsg.setStaKeyParams.key.keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyId;
8699 halSetStaKeyReqMsg.setStaKeyParams.key.unicast =
8700 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].unicast;
8701 halSetStaKeyReqMsg.setStaKeyParams.key.keyDirection =
8702 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyDirection;
8703 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key.keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -07008704 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -07008706 halSetStaKeyReqMsg.setStaKeyParams.key.paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -07008708 halSetStaKeyReqMsg.setStaKeyParams.key.keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].keyLength;
8710 wpalMemoryCopy(halSetStaKeyReqMsg.setStaKeyParams.key.key,
Jeff Johnsone7245742012-09-05 17:12:55 -07008711 pwdiSetSTAKeyParams->wdiKeyInfo.wdiKey[0].key,
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 WDI_MAX_KEY_LENGTH);
8713#endif
8714
Jeff Johnsone7245742012-09-05 17:12:55 -07008715 wpalMemoryCopy( pSendBuffer+usDataOffset,
8716 &halSetStaKeyReqMsg.setStaKeyParams,
8717 sizeof(halSetStaKeyReqMsg.setStaKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008718
8719 pWDICtx->wdiReqStatusCB = pwdiSetSTAKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008720 pWDICtx->pReqStatusUserData = pwdiSetSTAKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008721
8722 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008723 Send Set STA Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008725 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
8726 wdiSetSTAKeyRspCb, pEventData->pUserData,
8727 WDI_SET_STA_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728
8729}/*WDI_ProcessSetSTABcastKeyReq*/
8730
8731/**
Jeff Johnsone7245742012-09-05 17:12:55 -07008732 @brief Process Remove STA Key Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008734
8735 @param pWDICtx: pointer to the WLAN DAL context
8736 pEventData: pointer to the event information structure
8737
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 @see
8739 @return Result of the function call
8740*/
8741WDI_Status
8742WDI_ProcessRemoveStaBcastKeyReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008743(
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 WDI_ControlBlockType* pWDICtx,
8745 WDI_EventInfoType* pEventData
8746)
8747{
8748 WDI_RemoveSTAKeyReqParamsType* pwdiRemoveSTABcastKeyParams;
8749 WDI_RemoveSTAKeyRspCb wdiRemoveSTAKeyRspCb;
8750 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008751 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 wpt_uint16 usDataOffset = 0;
8753 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008754 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 wpt_macAddr macBSSID;
8756 wpt_uint8 ucCurrentBSSSesIdx;
8757 tRemoveStaKeyReqMsg halRemoveStaBcastKeyReqMsg = {{0}};
8758 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8759
8760 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008761 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 -------------------------------------------------------------------------*/
8763 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8764 ( NULL == pEventData->pCBfnc ))
8765 {
8766 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8767 "%s: Invalid parameters", __FUNCTION__);
8768 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008769 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 }
8771
8772 pwdiRemoveSTABcastKeyParams = (WDI_RemoveSTAKeyReqParamsType*)pEventData->pEventData;
8773 wdiRemoveSTAKeyRspCb = (WDI_RemoveSTAKeyRspCb)pEventData->pCBfnc;
8774 /*-------------------------------------------------------------------------
8775 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008776 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 -------------------------------------------------------------------------*/
8778 wpalMutexAcquire(&pWDICtx->wptMutex);
8779
8780 /*------------------------------------------------------------------------
8781 Find the BSS for which the request is made and identify WDI session
8782 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008783 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
8784 pwdiRemoveSTABcastKeyParams->wdiKeyInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 &macBSSID))
8786 {
8787 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8788 "This station does not exist in the WDI Station Table %d");
8789 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008790 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 }
8792
Jeff Johnsone7245742012-09-05 17:12:55 -07008793 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
8794 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008796 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
8797 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
8798 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008799
8800 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008801 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008803
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 /*------------------------------------------------------------------------
8805 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008806 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 ------------------------------------------------------------------------*/
8808 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8809 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008810 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8811 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
8812 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008813
Jeff Johnsone7245742012-09-05 17:12:55 -07008814 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008816 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 }
8818
8819
8820
8821 wpalMutexRelease(&pWDICtx->wptMutex);
8822 /*-----------------------------------------------------------------------
8823 Get message buffer
8824 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008825 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RMV_STA_BCAST_KEY_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 sizeof(halRemoveStaBcastKeyReqMsg.removeStaKeyParams),
8827 &pSendBuffer, &usDataOffset, &usSendSize))||
8828 ( usSendSize < (usDataOffset + sizeof(halRemoveStaBcastKeyReqMsg.removeStaKeyParams) )))
8829 {
8830 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8831 "Unable to get send buffer in set bss key req %x %x %x",
8832 pEventData, pwdiRemoveSTABcastKeyParams, wdiRemoveSTAKeyRspCb);
8833 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008834 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 }
8836
8837 /*-----------------------------------------------------------------------
8838 Copy the Key parameters into the HAL message
8839 -----------------------------------------------------------------------*/
8840
Jeff Johnsone7245742012-09-05 17:12:55 -07008841 halRemoveStaBcastKeyReqMsg.removeStaKeyParams.staIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 pwdiRemoveSTABcastKeyParams->wdiKeyInfo.ucSTAIdx;
8843
Jeff Johnsone7245742012-09-05 17:12:55 -07008844 halRemoveStaBcastKeyReqMsg.removeStaKeyParams.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 WDI_2_HAL_ENC_TYPE (pwdiRemoveSTABcastKeyParams->wdiKeyInfo.wdiEncType);
8846
Jeff Johnsone7245742012-09-05 17:12:55 -07008847 halRemoveStaBcastKeyReqMsg.removeStaKeyParams.keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 pwdiRemoveSTABcastKeyParams->wdiKeyInfo.ucKeyId;
8849
Jeff Johnsone7245742012-09-05 17:12:55 -07008850 halRemoveStaBcastKeyReqMsg.removeStaKeyParams.unicast =
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 pwdiRemoveSTABcastKeyParams->wdiKeyInfo.ucUnicast;
8852
Jeff Johnsone7245742012-09-05 17:12:55 -07008853 wpalMemoryCopy( pSendBuffer+usDataOffset,
8854 &halRemoveStaBcastKeyReqMsg.removeStaKeyParams,
8855 sizeof(halRemoveStaBcastKeyReqMsg.removeStaKeyParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07008856
8857 pWDICtx->wdiReqStatusCB = pwdiRemoveSTABcastKeyParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07008858 pWDICtx->pReqStatusUserData = pwdiRemoveSTABcastKeyParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008859
8860 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008861 Send Remove STA Key Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008863 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 wdiRemoveSTAKeyRspCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -07008865 WDI_RMV_STA_KEY_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07008866
8867}/*WDI_ProcessRemoveSTABcastKeyReq*/
8868
8869/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -07008870 QOS and BA PROCESSING REQUEST API
Jeff Johnson295189b2012-06-20 16:38:30 -07008871==========================================================================*/
8872/**
8873 @brief Process Add TSpec Request function (called when Main FSM
8874 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07008875
8876 @param pWDICtx: pointer to the WLAN DAL context
8877 pEventData: pointer to the event information structure
8878
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 @see
8880 @return Result of the function call
8881*/
8882WDI_Status
8883WDI_ProcessAddTSpecReq
Jeff Johnsone7245742012-09-05 17:12:55 -07008884(
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 WDI_ControlBlockType* pWDICtx,
8886 WDI_EventInfoType* pEventData
8887)
8888{
8889 WDI_AddTSReqParamsType* pwdiAddTSParams;
8890 WDI_AddTsRspCb wdiAddTSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07008891 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07008893 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 wpt_uint16 usDataOffset = 0;
8895 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07008896 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07008897 wpt_macAddr macBSSID;
8898 tAddTsParams halAddTsParams = {0};
Jeff Johnsone7245742012-09-05 17:12:55 -07008899
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
8901
8902 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07008903 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 -------------------------------------------------------------------------*/
8905 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
8906 ( NULL == pEventData->pCBfnc ))
8907 {
8908 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8909 "%s: Invalid parameters", __FUNCTION__);
8910 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008911 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 }
8913
8914 pwdiAddTSParams = (WDI_AddTSReqParamsType*)pEventData->pEventData;
8915 wdiAddTSRspCb = (WDI_AddTsRspCb)pEventData->pCBfnc;
8916 /*-------------------------------------------------------------------------
8917 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07008918 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 -------------------------------------------------------------------------*/
8920 wpalMutexAcquire(&pWDICtx->wptMutex);
8921
8922 /*------------------------------------------------------------------------
8923 Find the BSS for which the request is made and identify WDI session
8924 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008925 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
8926 pwdiAddTSParams->wdiTsInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 &macBSSID))
8928 {
8929 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8930 "This station does not exist in the WDI Station Table %d");
8931 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008932 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 }
8934
Jeff Johnsone7245742012-09-05 17:12:55 -07008935 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
8936 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07008937 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008938 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
8939 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
8940 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008941
8942 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008943 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008945
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 /*------------------------------------------------------------------------
8947 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07008948 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 ------------------------------------------------------------------------*/
8950 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
8951 {
Jeff Johnsone7245742012-09-05 17:12:55 -07008952 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8953 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
8954 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07008955
Jeff Johnsone7245742012-09-05 17:12:55 -07008956 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07008958 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 }
8960
8961 wpalMutexRelease(&pWDICtx->wptMutex);
8962 /*-----------------------------------------------------------------------
8963 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07008964 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07008966 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ADD_TS_REQ,
8967 sizeof(halAddTsParams),
8968 &pSendBuffer, &usDataOffset,
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 &usSendSize))||
8970 ( usSendSize < (usDataOffset + sizeof(halAddTsParams) )))
8971 {
8972 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
8973 "Unable to get send buffer in set bss key req %x %x %x",
8974 pEventData, pwdiAddTSParams, wdiAddTSRspCb);
8975 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07008976 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 }
8978
8979 halAddTsParams.staIdx = pwdiAddTSParams->wdiTsInfo.ucSTAIdx;
8980 halAddTsParams.tspecIdx = pwdiAddTSParams->wdiTsInfo.ucTspecIdx;
8981
8982 //TSPEC IE
8983 halAddTsParams.tspec.type = pwdiAddTSParams->wdiTsInfo.wdiTspecIE.ucType;
8984 halAddTsParams.tspec.length = pwdiAddTSParams->wdiTsInfo.wdiTspecIE.ucLength;
Jeff Johnsone7245742012-09-05 17:12:55 -07008985 halAddTsParams.tspec.nomMsduSz =
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.usNomMsduSz;
Jeff Johnsone7245742012-09-05 17:12:55 -07008987 halAddTsParams.tspec.maxMsduSz =
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.usMaxMsduSz;
Jeff Johnsone7245742012-09-05 17:12:55 -07008989 halAddTsParams.tspec.minSvcInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMinSvcInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -07008991 halAddTsParams.tspec.maxSvcInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMaxSvcInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -07008993 halAddTsParams.tspec.inactInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uInactInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -07008995 halAddTsParams.tspec.suspendInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uSuspendInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -07008997 halAddTsParams.tspec.svcStartTime =
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uSvcStartTime;
Jeff Johnsone7245742012-09-05 17:12:55 -07008999 halAddTsParams.tspec.minDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMinDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -07009001 halAddTsParams.tspec.meanDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMeanDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -07009003 halAddTsParams.tspec.peakDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uPeakDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -07009005 halAddTsParams.tspec.maxBurstSz =
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMaxBurstSz;
Jeff Johnsone7245742012-09-05 17:12:55 -07009007 halAddTsParams.tspec.delayBound =
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uDelayBound;
Jeff Johnsone7245742012-09-05 17:12:55 -07009009 halAddTsParams.tspec.minPhyRate =
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.uMinPhyRate;
Jeff Johnsone7245742012-09-05 17:12:55 -07009011 halAddTsParams.tspec.surplusBw =
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.usSurplusBw;
Jeff Johnsone7245742012-09-05 17:12:55 -07009013 halAddTsParams.tspec.mediumTime =
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.usMediumTime;
9015
9016 //TSPEC IE : TS INFO : TRAFFIC
Jeff Johnsone7245742012-09-05 17:12:55 -07009017 halAddTsParams.tspec.tsinfo.traffic.ackPolicy =
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy;
Jeff Johnsone7245742012-09-05 17:12:55 -07009019 halAddTsParams.tspec.tsinfo.traffic.userPrio =
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio;
Jeff Johnsone7245742012-09-05 17:12:55 -07009021 halAddTsParams.tspec.tsinfo.traffic.psb =
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009023 halAddTsParams.tspec.tsinfo.traffic.aggregation =
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation;
Jeff Johnsone7245742012-09-05 17:12:55 -07009025 halAddTsParams.tspec.tsinfo.traffic.direction =
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction;
Jeff Johnsone7245742012-09-05 17:12:55 -07009027 halAddTsParams.tspec.tsinfo.traffic.tsid =
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid;
Jeff Johnsone7245742012-09-05 17:12:55 -07009029 halAddTsParams.tspec.tsinfo.traffic.trafficType =
Jeff Johnson295189b2012-06-20 16:38:30 -07009030 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType;
9031
9032 //TSPEC IE : TS INFO : SCHEDULE
Jeff Johnsone7245742012-09-05 17:12:55 -07009033 halAddTsParams.tspec.tsinfo.schedule.rsvd =
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd;
Jeff Johnsone7245742012-09-05 17:12:55 -07009035 halAddTsParams.tspec.tsinfo.schedule.schedule =
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 pwdiAddTSParams->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule;
9037
Jeff Johnsone7245742012-09-05 17:12:55 -07009038 wpalMemoryCopy( pSendBuffer+usDataOffset,
9039 &halAddTsParams,
9040 sizeof(halAddTsParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07009041
9042 pWDICtx->wdiReqStatusCB = pwdiAddTSParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009043 pWDICtx->pReqStatusUserData = pwdiAddTSParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009044
9045 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009046 Send Add TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009048 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 wdiAddTSRspCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -07009050 WDI_ADD_TS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009051}/*WDI_ProcessAddTSpecReq*/
9052
9053
9054/**
9055 @brief Process Del TSpec Request function (called when Main FSM
9056 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009057
9058 @param pWDICtx: pointer to the WLAN DAL context
9059 pEventData: pointer to the event information structure
9060
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 @see
9062 @return Result of the function call
9063*/
9064WDI_Status
9065WDI_ProcessDelTSpecReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009066(
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 WDI_ControlBlockType* pWDICtx,
9068 WDI_EventInfoType* pEventData
9069)
9070{
9071 WDI_DelTSReqParamsType* pwdiDelTSParams;
9072 WDI_DelTsRspCb wdiDelTSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009073 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07009075 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 wpt_uint16 usDataOffset = 0;
9077 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07009078 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9080
9081 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009082 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 -------------------------------------------------------------------------*/
9084 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9085 ( NULL == pEventData->pCBfnc ))
9086 {
9087 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9088 "%s: Invalid parameters", __FUNCTION__);
9089 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009090 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009091 }
9092
9093 pwdiDelTSParams = (WDI_DelTSReqParamsType*)pEventData->pEventData;
9094 wdiDelTSRspCb = (WDI_DelTsRspCb)pEventData->pCBfnc;
9095
9096 /*-------------------------------------------------------------------------
9097 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07009098 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07009099 -------------------------------------------------------------------------*/
9100 wpalMutexAcquire(&pWDICtx->wptMutex);
9101
9102 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009103 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009105 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
9106 pwdiDelTSParams->wdiDelTSInfo.macBSSID,
9107 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07009108
Jeff Johnsone7245742012-09-05 17:12:55 -07009109 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009111 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9112 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
9113 __func__, MAC_ADDR_ARRAY(pwdiDelTSParams->wdiDelTSInfo.macBSSID));
9114
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009116 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 }
9118
9119 /*------------------------------------------------------------------------
9120 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07009121 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07009122 ------------------------------------------------------------------------*/
9123 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
9124 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009125 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9126 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
9127 __func__, MAC_ADDR_ARRAY(pwdiDelTSParams->wdiDelTSInfo.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07009128
Jeff Johnsone7245742012-09-05 17:12:55 -07009129 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009131 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 }
9133
9134
9135 wpalMutexRelease(&pWDICtx->wptMutex);
9136 /*-----------------------------------------------------------------------
9137 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07009138 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07009139 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009140 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_DEL_TS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 sizeof(pwdiDelTSParams->wdiDelTSInfo),
9142 &pSendBuffer, &usDataOffset, &usSendSize))||
9143 ( usSendSize < (usDataOffset + sizeof(pwdiDelTSParams->wdiDelTSInfo) )))
9144 {
9145 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9146 "Unable to get send buffer in set bss key req %x %x %x",
9147 pEventData, pwdiDelTSParams, wdiDelTSRspCb);
9148 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009149 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 }
9151
Jeff Johnsone7245742012-09-05 17:12:55 -07009152 wpalMemoryCopy( pSendBuffer+usDataOffset,
9153 &pwdiDelTSParams->wdiDelTSInfo,
9154 sizeof(pwdiDelTSParams->wdiDelTSInfo));
Jeff Johnson295189b2012-06-20 16:38:30 -07009155
9156 pWDICtx->wdiReqStatusCB = pwdiDelTSParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009157 pWDICtx->pReqStatusUserData = pwdiDelTSParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009158
9159 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009160 Send Del TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009162 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9163 wdiDelTSRspCb, pEventData->pUserData, WDI_DEL_TS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164}/*WDI_ProcessDelTSpecReq*/
9165
9166/**
9167 @brief Process Update EDCA Params Request function (called when
9168 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009169
9170 @param pWDICtx: pointer to the WLAN DAL context
9171 pEventData: pointer to the event information structure
9172
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 @see
9174 @return Result of the function call
9175*/
9176WDI_Status
9177WDI_ProcessUpdateEDCAParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009178(
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 WDI_ControlBlockType* pWDICtx,
9180 WDI_EventInfoType* pEventData
9181)
9182{
9183 WDI_UpdateEDCAParamsType* pwdiUpdateEDCAParams;
9184 WDI_UpdateEDCAParamsRspCb wdiUpdateEDCARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009185 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07009187 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 wpt_uint16 usDataOffset = 0;
9189 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07009190 WDI_Status wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9192
9193 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009194 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 -------------------------------------------------------------------------*/
9196 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9197 ( NULL == pEventData->pCBfnc ))
9198 {
9199 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9200 "%s: Invalid parameters", __FUNCTION__);
9201 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009202 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 }
9204
9205 pwdiUpdateEDCAParams = (WDI_UpdateEDCAParamsType*)pEventData->pEventData;
9206 wdiUpdateEDCARspCb = (WDI_UpdateEDCAParamsRspCb)pEventData->pCBfnc;
9207 /*-------------------------------------------------------------------------
9208 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07009209 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 -------------------------------------------------------------------------*/
9211 wpalMutexAcquire(&pWDICtx->wptMutex);
9212
9213 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009214 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009216 ucCurrentBSSSesIdx = WDI_FindAssocSessionByBSSIdx( pWDICtx,
9217 pwdiUpdateEDCAParams->wdiEDCAInfo.ucBssIdx,
9218 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07009219
Jeff Johnsone7245742012-09-05 17:12:55 -07009220 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 {
9222 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -07009223 "%s: Association sequence for this BSS does not yet exist. ucBssIdx %d",
9224 __func__, pwdiUpdateEDCAParams->wdiEDCAInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07009225
9226 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009227 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 }
9229
9230 /*------------------------------------------------------------------------
9231 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07009232 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 ------------------------------------------------------------------------*/
9234 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
9235 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009236 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9237 "%s: Association sequence for this BSS exists but currently queued. ucBssIdx %d",
9238 __func__, pwdiUpdateEDCAParams->wdiEDCAInfo.ucBssIdx);
Jeff Johnson295189b2012-06-20 16:38:30 -07009239
Jeff Johnsone7245742012-09-05 17:12:55 -07009240 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009242 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 }
9244
9245
9246 wpalMutexRelease(&pWDICtx->wptMutex);
9247 /*-----------------------------------------------------------------------
9248 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07009249 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009251 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPD_EDCA_PRMS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 sizeof(pwdiUpdateEDCAParams->wdiEDCAInfo),
9253 &pSendBuffer, &usDataOffset, &usSendSize))||
9254 ( usSendSize < (usDataOffset + sizeof(pwdiUpdateEDCAParams->wdiEDCAInfo) )))
9255 {
9256 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9257 "Unable to get send buffer in set bss key req %x %x %x",
9258 pEventData, pwdiUpdateEDCAParams, wdiUpdateEDCARspCb);
9259 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009260 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 }
9262
Jeff Johnsone7245742012-09-05 17:12:55 -07009263 wpalMemoryCopy( pSendBuffer+usDataOffset,
9264 &pwdiUpdateEDCAParams->wdiEDCAInfo,
9265 sizeof(pwdiUpdateEDCAParams->wdiEDCAInfo));
Jeff Johnson295189b2012-06-20 16:38:30 -07009266
9267 pWDICtx->wdiReqStatusCB = pwdiUpdateEDCAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009268 pWDICtx->pReqStatusUserData = pwdiUpdateEDCAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269
9270 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009271 Send Update EDCA Params Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009273 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9274 wdiUpdateEDCARspCb, pEventData->pUserData,
9275 WDI_UPD_EDCA_PRMS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276}/*WDI_ProcessUpdateEDCAParamsReq*/
9277
9278/**
Jeff Johnsone7245742012-09-05 17:12:55 -07009279 @brief Process Add BA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009281
9282 @param pWDICtx: pointer to the WLAN DAL context
9283 pEventData: pointer to the event information structure
9284
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 @see
9286 @return Result of the function call
9287*/
9288WDI_Status
9289WDI_ProcessAddBASessionReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009290(
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 WDI_ControlBlockType* pWDICtx,
9292 WDI_EventInfoType* pEventData
9293)
9294{
9295 WDI_AddBASessionReqParamsType* pwdiAddBASessionParams;
9296 WDI_AddBASessionRspCb wdiAddBASessionRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009297 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07009299 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 wpt_uint16 usDataOffset = 0;
9301 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07009302 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 wpt_macAddr macBSSID;
9304
9305 tAddBASessionReqMsg halAddBASessionReq;
9306 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9307
9308 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009309 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 -------------------------------------------------------------------------*/
9311 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9312 ( NULL == pEventData->pCBfnc ))
9313 {
9314 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9315 "%s: Invalid parameters", __FUNCTION__);
9316 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009317 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 }
9319
Jeff Johnsone7245742012-09-05 17:12:55 -07009320 pwdiAddBASessionParams =
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 (WDI_AddBASessionReqParamsType*)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -07009322 wdiAddBASessionRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 (WDI_AddBASessionRspCb)pEventData->pCBfnc;
9324 /*-------------------------------------------------------------------------
9325 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07009326 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 -------------------------------------------------------------------------*/
9328 wpalMutexAcquire(&pWDICtx->wptMutex);
9329
9330 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009331 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009333 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
9334 pwdiAddBASessionParams->wdiBASessionInfoType.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 &macBSSID))
9336 {
9337 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9338 "This station does not exist in the WDI Station Table %d");
9339 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009340 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 }
9342
9343
Jeff Johnsone7245742012-09-05 17:12:55 -07009344 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345
Jeff Johnsone7245742012-09-05 17:12:55 -07009346 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009348 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9349 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
9350 __func__, MAC_ADDR_ARRAY(macBSSID));
9351
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009353 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 }
9355
9356 /*------------------------------------------------------------------------
9357 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07009358 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 ------------------------------------------------------------------------*/
9360 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
9361 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009362 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9363 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
9364 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07009365
Jeff Johnsone7245742012-09-05 17:12:55 -07009366 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009368 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 }
9370
9371
9372 wpalMutexRelease(&pWDICtx->wptMutex);
9373 /*-----------------------------------------------------------------------
9374 Get message buffer
9375 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009376 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
9377 WDI_ADD_BA_SESSION_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009378 sizeof(halAddBASessionReq.addBASessionParams),
9379 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -07009380 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 (usDataOffset + sizeof(halAddBASessionReq.addBASessionParams) )))
9382 {
9383 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9384 "Unable to get send buffer in Add BA session req %x %x %x",
9385 pEventData, pwdiAddBASessionParams, wdiAddBASessionRspCb);
9386 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009387 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 }
9389
9390 halAddBASessionReq.addBASessionParams.staIdx =
9391 pwdiAddBASessionParams->wdiBASessionInfoType.ucSTAIdx;
9392 wpalMemoryCopy(halAddBASessionReq.addBASessionParams.peerMacAddr,
9393 pwdiAddBASessionParams->wdiBASessionInfoType.macPeerAddr,
9394 WDI_MAC_ADDR_LEN);
9395 halAddBASessionReq.addBASessionParams.baTID =
9396 pwdiAddBASessionParams->wdiBASessionInfoType.ucBaTID;
9397 halAddBASessionReq.addBASessionParams.baPolicy =
9398 pwdiAddBASessionParams->wdiBASessionInfoType.ucBaPolicy;
9399 halAddBASessionReq.addBASessionParams.baBufferSize =
9400 pwdiAddBASessionParams->wdiBASessionInfoType.usBaBufferSize;
9401 halAddBASessionReq.addBASessionParams.baTimeout =
9402 pwdiAddBASessionParams->wdiBASessionInfoType.usBaTimeout;
9403 halAddBASessionReq.addBASessionParams.baSSN =
9404 pwdiAddBASessionParams->wdiBASessionInfoType.usBaSSN;
9405 halAddBASessionReq.addBASessionParams.baDirection =
9406 pwdiAddBASessionParams->wdiBASessionInfoType.ucBaDirection;
9407
Jeff Johnsone7245742012-09-05 17:12:55 -07009408 wpalMemoryCopy( pSendBuffer+usDataOffset,
9409 &halAddBASessionReq.addBASessionParams,
9410 sizeof(halAddBASessionReq.addBASessionParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07009411
9412 pWDICtx->wdiReqStatusCB = pwdiAddBASessionParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009413 pWDICtx->pReqStatusUserData = pwdiAddBASessionParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009414
9415 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009416 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009418 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9419 wdiAddBASessionRspCb, pEventData->pUserData,
9420 WDI_ADD_BA_SESSION_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009421}/*WDI_ProcessAddBASessionReq*/
9422
9423/**
Jeff Johnsone7245742012-09-05 17:12:55 -07009424 @brief Process Del BA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009426
9427 @param pWDICtx: pointer to the WLAN DAL context
9428 pEventData: pointer to the event information structure
9429
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 @see
9431 @return Result of the function call
9432*/
9433WDI_Status
9434WDI_ProcessDelBAReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009435(
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 WDI_ControlBlockType* pWDICtx,
9437 WDI_EventInfoType* pEventData
9438)
9439{
9440 WDI_DelBAReqParamsType* pwdiDelBAParams;
9441 WDI_DelBARspCb wdiDelBARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009442 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -07009444 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 wpt_uint16 usDataOffset = 0;
9446 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07009447 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 wpt_macAddr macBSSID;
9449 tDelBAParams halDelBAparam;
9450 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9451
9452 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009453 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 -------------------------------------------------------------------------*/
9455 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9456 ( NULL == pEventData->pCBfnc ))
9457 {
9458 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9459 "%s: Invalid parameters", __FUNCTION__);
9460 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009461 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 }
9463
9464 pwdiDelBAParams = (WDI_DelBAReqParamsType*)pEventData->pEventData;
9465 wdiDelBARspCb = (WDI_DelBARspCb)pEventData->pCBfnc;
9466 /*-------------------------------------------------------------------------
9467 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -07009468 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 -------------------------------------------------------------------------*/
9470 wpalMutexAcquire(&pWDICtx->wptMutex);
9471
9472 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009473 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009475 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
9476 pwdiDelBAParams->wdiBAInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 &macBSSID))
9478 {
9479 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9480 "This station does not exist in the WDI Station Table %d");
9481 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009482 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 }
9484
Jeff Johnsone7245742012-09-05 17:12:55 -07009485 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486
Jeff Johnsone7245742012-09-05 17:12:55 -07009487 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009489 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9490 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
9491 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07009492
9493 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009494 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 }
9496
9497 /*------------------------------------------------------------------------
9498 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -07009499 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 ------------------------------------------------------------------------*/
9501 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
9502 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009503 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9504 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
9505 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -07009506
Jeff Johnsone7245742012-09-05 17:12:55 -07009507 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009509 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 }
9511
9512 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -07009513 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_DEL_BA_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 sizeof(halDelBAparam),
9515 &pSendBuffer, &usDataOffset, &usSendSize))||
9516 ( usSendSize < (usDataOffset + sizeof(halDelBAparam) )))
9517 {
9518 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9519 "Unable to get send buffer for DEL BA req %x %x %x",
9520 pEventData, pwdiDelBAParams, wdiDelBARspCb);
9521 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009522 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 }
9524
9525 halDelBAparam.staIdx = pwdiDelBAParams->wdiBAInfo.ucSTAIdx;
9526 halDelBAparam.baTID = pwdiDelBAParams->wdiBAInfo.ucBaTID;
9527 halDelBAparam.baDirection = pwdiDelBAParams->wdiBAInfo.ucBaDirection;
9528
Jeff Johnsone7245742012-09-05 17:12:55 -07009529 wpalMemoryCopy( pSendBuffer+usDataOffset,
9530 &halDelBAparam,
9531 sizeof(halDelBAparam));
Jeff Johnson295189b2012-06-20 16:38:30 -07009532
9533 pWDICtx->wdiReqStatusCB = pwdiDelBAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009534 pWDICtx->pReqStatusUserData = pwdiDelBAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535
9536 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009537 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009539 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9540 wdiDelBARspCb, pEventData->pUserData, WDI_DEL_BA_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541}/*WDI_ProcessDelBAReq*/
9542
9543#ifdef FEATURE_WLAN_CCX
9544
9545WDI_Status
9546WDI_ProcessTSMStatsReq
9547(
9548 WDI_ControlBlockType* pWDICtx,
9549 WDI_EventInfoType* pEventData
9550)
9551{
9552 WDI_TSMStatsReqParamsType* pwdiTSMParams;
9553 WDI_TsmRspCb wdiTSMRspCb;
9554 wpt_uint8 ucCurrentBSSSesIdx = 0;
9555 WDI_BSSSessionType* pBSSSes = NULL;
9556 wpt_uint8* pSendBuffer = NULL;
9557 wpt_uint16 usDataOffset = 0;
9558 wpt_uint16 usSendSize = 0;
9559 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
9560 tTsmStatsParams halTsmStatsReqParams = {0};
9561
9562 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9563
9564 /*-------------------------------------------------------------------------
9565 Sanity check
9566 -------------------------------------------------------------------------*/
9567 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9568 ( NULL == pEventData->pCBfnc ))
9569 {
9570 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9571 "%s: Invalid parameters", __FUNCTION__);
9572 WDI_ASSERT(0);
9573 return WDI_STATUS_E_FAILURE;
9574 }
9575
9576 pwdiTSMParams = (WDI_TSMStatsReqParamsType*)pEventData->pEventData;
9577 wdiTSMRspCb = (WDI_TsmRspCb)pEventData->pCBfnc;
9578 /*-------------------------------------------------------------------------
9579 Check to see if we are in the middle of an association, if so queue, if
9580 not it means it is free to process request
9581 -------------------------------------------------------------------------*/
9582 wpalMutexAcquire(&pWDICtx->wptMutex);
9583
9584 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, pwdiTSMParams->wdiTsmStatsParamsInfo.bssid, &pBSSSes);
9585 if ( NULL == pBSSSes )
9586 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009587 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9588 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
9589 __func__, MAC_ADDR_ARRAY(pwdiTSMParams->wdiTsmStatsParamsInfo.bssid));
Jeff Johnson295189b2012-06-20 16:38:30 -07009590
9591 wpalMutexRelease(&pWDICtx->wptMutex);
9592 return WDI_STATUS_E_NOT_ALLOWED;
9593 }
9594
9595 /*------------------------------------------------------------------------
9596 Check if this BSS is being currently processed or queued,
9597 if queued - queue the new request as well
9598 ------------------------------------------------------------------------*/
9599 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
9600 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009601 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9602 "s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
9603 __func__, MAC_ADDR_ARRAY(pwdiTSMParams->wdiTsmStatsParamsInfo.bssid));
Jeff Johnson295189b2012-06-20 16:38:30 -07009604
9605 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
9606 wpalMutexRelease(&pWDICtx->wptMutex);
9607 return wdiStatus;
9608 }
9609
9610 wpalMutexRelease(&pWDICtx->wptMutex);
9611 /*-----------------------------------------------------------------------
9612 Get message buffer
9613 ! TO DO : proper conversion into the HAL Message Request Format
9614 -----------------------------------------------------------------------*/
9615 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_TSM_STATS_REQ,
9616 sizeof(halTsmStatsReqParams),
9617 &pSendBuffer, &usDataOffset, &usSendSize))||
9618 ( usSendSize < (usDataOffset + sizeof(halTsmStatsReqParams) )))
9619 {
9620 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
9621 "Unable to get send buffer in set bss key req %x %x %x",
9622 pEventData, pwdiTSMParams, wdiTSMRspCb);
9623 WDI_ASSERT(0);
9624 return WDI_STATUS_E_FAILURE;
9625 }
9626
9627 halTsmStatsReqParams.tsmTID = pwdiTSMParams->wdiTsmStatsParamsInfo.ucTid;
9628 wpalMemoryCopy(halTsmStatsReqParams.bssId,
9629 pwdiTSMParams->wdiTsmStatsParamsInfo.bssid,
9630 WDI_MAC_ADDR_LEN);
9631 wpalMemoryCopy( pSendBuffer+usDataOffset,
9632 &halTsmStatsReqParams,
9633 sizeof(halTsmStatsReqParams));
9634
9635 pWDICtx->wdiReqStatusCB = pwdiTSMParams->wdiReqStatusCB;
9636 pWDICtx->pReqStatusUserData = pwdiTSMParams->pUserData;
9637
9638 /*-------------------------------------------------------------------------
9639 Send TSM Stats Request to HAL
9640 -------------------------------------------------------------------------*/
9641 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9642 wdiTSMRspCb, pEventData->pUserData,
9643 WDI_TSM_STATS_RESP);
9644}/*WDI_ProcessTSMStatsReq*/
9645
9646#endif
9647
9648
9649/**
Jeff Johnsone7245742012-09-05 17:12:55 -07009650 @brief Process Flush AC Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -07009651 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009652
9653 @param pWDICtx: pointer to the WLAN DAL context
9654 pEventData: pointer to the event information structure
9655
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 @see
9657 @return Result of the function call
9658*/
9659WDI_Status
9660WDI_ProcessFlushAcReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009661(
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 WDI_ControlBlockType* pWDICtx,
9663 WDI_EventInfoType* pEventData
9664)
9665{
9666 WDI_FlushAcReqParamsType* pwdiFlushAcParams = NULL;
9667 WDI_FlushAcRspCb wdiFlushAcRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009668 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 wpt_uint16 usDataOffset = 0;
9670 wpt_uint16 usSendSize = 0;
9671 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9672
9673 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009674 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 -------------------------------------------------------------------------*/
9676 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9677 ( NULL == pEventData->pCBfnc ))
9678 {
9679 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9680 "%s: Invalid parameters", __FUNCTION__);
9681 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009682 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 }
9684
9685 pwdiFlushAcParams = (WDI_FlushAcReqParamsType*)pEventData->pEventData;
9686 wdiFlushAcRspCb = (WDI_FlushAcRspCb)pEventData->pCBfnc;
9687 /*-----------------------------------------------------------------------
9688 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07009689 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009691 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_FLUSH_AC_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 sizeof(pwdiFlushAcParams->wdiFlushAcInfo),
9693 &pSendBuffer, &usDataOffset, &usSendSize))||
9694 ( usSendSize < (usDataOffset + sizeof(pwdiFlushAcParams->wdiFlushAcInfo) )))
9695 {
9696 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9697 "Unable to get send buffer in set bss key req %x %x %x",
9698 pEventData, pwdiFlushAcParams, wdiFlushAcRspCb);
9699 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009700 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 }
9702
Jeff Johnsone7245742012-09-05 17:12:55 -07009703 wpalMemoryCopy( pSendBuffer+usDataOffset,
9704 &pwdiFlushAcParams->wdiFlushAcInfo,
9705 sizeof(pwdiFlushAcParams->wdiFlushAcInfo));
Jeff Johnson295189b2012-06-20 16:38:30 -07009706
9707 pWDICtx->wdiReqStatusCB = pwdiFlushAcParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009708 pWDICtx->pReqStatusUserData = pwdiFlushAcParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009709
9710 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009711 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009712 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009713 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9714 wdiFlushAcRspCb, pEventData->pUserData, WDI_FLUSH_AC_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715}/*WDI_ProcessFlushAcReq*/
9716
9717/**
Jeff Johnsone7245742012-09-05 17:12:55 -07009718 @brief Process BT AMP event Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009720
9721 @param pWDICtx: pointer to the WLAN DAL context
9722 pEventData: pointer to the event information structure
9723
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 @see
9725 @return Result of the function call
9726*/
9727WDI_Status
9728WDI_ProcessBtAmpEventReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009729(
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 WDI_ControlBlockType* pWDICtx,
9731 WDI_EventInfoType* pEventData
9732)
9733{
9734 WDI_BtAmpEventParamsType* pwdiBtAmpEventParams = NULL;
9735 WDI_BtAmpEventRspCb wdiBtAmpEventRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009736 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009737 wpt_uint16 usDataOffset = 0;
9738 wpt_uint16 usSendSize = 0;
9739
9740 tBtAmpEventMsg haltBtAmpEventMsg;
9741 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9742
9743 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009744 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 -------------------------------------------------------------------------*/
9746 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9747 ( NULL == pEventData->pCBfnc ))
9748 {
9749 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9750 "%s: Invalid parameters", __FUNCTION__);
9751 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009752 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 }
9754
9755 pwdiBtAmpEventParams = (WDI_BtAmpEventParamsType*)pEventData->pEventData;
9756 wdiBtAmpEventRspCb = (WDI_BtAmpEventRspCb)pEventData->pCBfnc;
9757 /*-----------------------------------------------------------------------
9758 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07009759 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009761 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_BTAMP_EVENT_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 sizeof(haltBtAmpEventMsg.btAmpEventParams),
9763 &pSendBuffer, &usDataOffset, &usSendSize))||
9764 ( usSendSize < (usDataOffset + sizeof(haltBtAmpEventMsg.btAmpEventParams) )))
9765 {
9766 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9767 "Unable to get send buffer in BT AMP event req %x %x %x",
9768 pEventData, pwdiBtAmpEventParams, wdiBtAmpEventRspCb);
9769 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009770 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 }
9772
Jeff Johnsone7245742012-09-05 17:12:55 -07009773 haltBtAmpEventMsg.btAmpEventParams.btAmpEventType =
Jeff Johnson295189b2012-06-20 16:38:30 -07009774 pwdiBtAmpEventParams->wdiBtAmpEventInfo.ucBtAmpEventType;
Jeff Johnsone7245742012-09-05 17:12:55 -07009775 wpalMemoryCopy( pSendBuffer+usDataOffset,
9776 &haltBtAmpEventMsg.btAmpEventParams,
9777 sizeof(haltBtAmpEventMsg.btAmpEventParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07009778
9779 pWDICtx->wdiReqStatusCB = pwdiBtAmpEventParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009780 pWDICtx->pReqStatusUserData = pwdiBtAmpEventParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009781
9782 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009783 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009785 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9786 wdiBtAmpEventRspCb, pEventData->pUserData, WDI_BTAMP_EVENT_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009787}/*WDI_ProcessBtAmpEventReq*/
9788
9789/**
9790 @brief Process Add STA self Request function (called when Main FSM
9791 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009792
9793 @param pWDICtx: pointer to the WLAN DAL context
9794 pEventData: pointer to the event information structure
9795
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 @see
9797 @return Result of the function call
9798*/
9799WDI_Status
9800WDI_ProcessAddSTASelfReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009801(
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 WDI_ControlBlockType* pWDICtx,
9803 WDI_EventInfoType* pEventData
9804)
9805{
9806 WDI_AddSTASelfReqParamsType* pwdiAddSTASelfReqParams;
9807 WDI_AddSTASelfParamsRspCb wdiAddSTASelfReqRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009808 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 wpt_uint16 usDataOffset = 0;
9810 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -07009811 tAddStaSelfParams halAddSTASelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9813
9814 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009815 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 -------------------------------------------------------------------------*/
9817 if (( NULL == pEventData ) ||
9818 ( NULL == pEventData->pEventData) ||
9819 ( NULL == pEventData->pCBfnc))
9820 {
9821 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9822 "%s: Invalid parameters", __FUNCTION__);
9823 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009824 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009825 }
9826
Jeff Johnsone7245742012-09-05 17:12:55 -07009827 pwdiAddSTASelfReqParams =
Jeff Johnson295189b2012-06-20 16:38:30 -07009828 (WDI_AddSTASelfReqParamsType*)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -07009829 wdiAddSTASelfReqRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 (WDI_AddSTASelfParamsRspCb)pEventData->pCBfnc;
9831 /*-----------------------------------------------------------------------
9832 Get message buffer
9833 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009834 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
9835 WDI_ADD_STA_SELF_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009836 sizeof(tAddStaSelfParams),
9837 &pSendBuffer, &usDataOffset, &usSendSize))||
9838 ( usSendSize < (usDataOffset + sizeof(tAddStaSelfParams) )))
9839 {
9840 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9841 "Unable to get send buffer in ADD STA SELF REQ %x %x %x",
9842 pEventData, pwdiAddSTASelfReqParams, wdiAddSTASelfReqRspCb);
9843 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009844 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 }
9846
9847 /* Cache the request for response processing */
Jeff Johnsone7245742012-09-05 17:12:55 -07009848 wpalMemoryCopy(&pWDICtx->wdiCacheAddSTASelfReq, pwdiAddSTASelfReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 sizeof(pWDICtx->wdiCacheAddSTASelfReq));
9850
Jeff Johnsone7245742012-09-05 17:12:55 -07009851 wpalMemoryCopy(halAddSTASelfParams.selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 pwdiAddSTASelfReqParams->wdiAddSTASelfInfo.selfMacAddr, 6) ;
9853
Jeff Johnsone7245742012-09-05 17:12:55 -07009854 wpalMemoryCopy( pSendBuffer+usDataOffset, &halAddSTASelfParams,
9855 sizeof(tAddStaSelfParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07009856
9857 pWDICtx->wdiReqStatusCB = pwdiAddSTASelfReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009858 pWDICtx->pReqStatusUserData = pwdiAddSTASelfReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009859
9860 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009861 Send Update Probe Resp Template Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009863 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9864 wdiAddSTASelfReqRspCb, pEventData->pUserData,
9865 WDI_ADD_STA_SELF_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866}/*WDI_ProcessAddSTASelfReq*/
9867
9868
9869
9870/**
Jeff Johnsone7245742012-09-05 17:12:55 -07009871 @brief Process Del Sta Self Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -07009873
9874 @param pWDICtx: pointer to the WLAN DAL context
9875 pEventData: pointer to the event information structure
9876
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 @see
9878 @return Result of the function call
9879*/
9880WDI_Status
9881WDI_ProcessDelSTASelfReq
Jeff Johnsone7245742012-09-05 17:12:55 -07009882(
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 WDI_ControlBlockType* pWDICtx,
9884 WDI_EventInfoType* pEventData
9885)
9886{
9887 WDI_DelSTASelfReqParamsType* pwdiDelStaSelfReqParams;
9888 WDI_DelSTASelfRspCb wdiDelStaSelfRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -07009889 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 wpt_uint16 usDataOffset = 0;
9891 wpt_uint16 usSendSize = 0;
9892 tDelStaSelfParams halSetDelSelfSTAParams;
9893 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
9894
9895 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009896 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 -------------------------------------------------------------------------*/
9898 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9899 ( NULL == pEventData->pCBfnc ))
9900 {
9901 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9902 "%s: Invalid parameters", __FUNCTION__);
9903 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009904 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 }
9906
Jeff Johnsone7245742012-09-05 17:12:55 -07009907 pwdiDelStaSelfReqParams =
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 (WDI_DelSTASelfReqParamsType*)pEventData->pEventData;
9909 wdiDelStaSelfRspCb = (WDI_DelSTASelfRspCb)pEventData->pCBfnc;
9910
9911 /*-----------------------------------------------------------------------
9912 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -07009913 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009915 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_DEL_STA_SELF_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 sizeof(pwdiDelStaSelfReqParams->wdiDelStaSelfInfo),
9917 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -07009918 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 (usDataOffset + sizeof(pwdiDelStaSelfReqParams->wdiDelStaSelfInfo) )))
9920 {
9921 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9922 "Unable to get send buffer in Del Sta Self req %x %x %x",
9923 pEventData, pwdiDelStaSelfReqParams, wdiDelStaSelfRspCb);
9924 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -07009925 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 }
9927
Jeff Johnsone7245742012-09-05 17:12:55 -07009928 wpalMemoryCopy(halSetDelSelfSTAParams.selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 pwdiDelStaSelfReqParams->wdiDelStaSelfInfo.selfMacAddr, 6) ;
9930
Jeff Johnsone7245742012-09-05 17:12:55 -07009931 wpalMemoryCopy( pSendBuffer+usDataOffset, &halSetDelSelfSTAParams,
9932 sizeof(tDelStaSelfParams));
Jeff Johnson295189b2012-06-20 16:38:30 -07009933
9934 pWDICtx->wdiReqStatusCB = pwdiDelStaSelfReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -07009935 pWDICtx->pReqStatusUserData = pwdiDelStaSelfReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009936
9937 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -07009938 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -07009940 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
9941 wdiDelStaSelfRspCb, pEventData->pUserData,
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 WDI_DEL_STA_SELF_RESP);
9943
9944}
9945
Jeff Johnsone7245742012-09-05 17:12:55 -07009946#ifdef FEATURE_OEM_DATA_SUPPORT
9947/**
9948 @brief Process Start Oem Data Request function (called when Main
9949 FSM allows it)
9950
9951 @param pWDICtx: pointer to the WLAN DAL context
9952 pEventData: pointer to the event information structure
9953
9954 @see
9955 @return Result of the function call
9956*/
9957WDI_Status
9958WDI_ProcessStartOemDataReq
9959(
9960 WDI_ControlBlockType* pWDICtx,
9961 WDI_EventInfoType* pEventData
9962)
9963{
9964 WDI_oemDataReqParamsType* pwdiOemDataReqParams = NULL;
9965 WDI_oemDataRspCb wdiOemDataRspCb;
9966 wpt_uint8* pSendBuffer = NULL;
9967 wpt_uint16 usDataOffset = 0;
9968 wpt_uint16 usSendSize = 0;
9969 wpt_uint16 reqLen;
9970 tStartOemDataReqParams* halStartOemDataReqParams;
9971
9972 /*-------------------------------------------------------------------------
9973 Sanity check
9974 -------------------------------------------------------------------------*/
9975 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
9976 ( NULL == pEventData->pCBfnc ))
9977 {
9978 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9979 "%s: Invalid parameters", __FUNCTION__);
9980 WDI_ASSERT(0);
9981 return WDI_STATUS_E_FAILURE;
9982 }
9983
9984 pwdiOemDataReqParams = (WDI_oemDataReqParamsType*)pEventData->pEventData;
9985 wdiOemDataRspCb = (WDI_oemDataRspCb)pEventData->pCBfnc;
9986
9987 /*-----------------------------------------------------------------------
9988 Get message buffer
9989 -----------------------------------------------------------------------*/
9990
9991 reqLen = sizeof(tStartOemDataReqParams);
9992
9993 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
9994 WDI_START_OEM_DATA_REQ, reqLen,
9995 &pSendBuffer, &usDataOffset, &usSendSize))||
9996 (usSendSize < (usDataOffset + reqLen)))
9997 {
9998 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
9999 "Unable to get send buffer in Start Oem Data req %x %x %x",
10000 pEventData, pwdiOemDataReqParams, wdiOemDataRspCb);
10001 WDI_ASSERT(0);
10002 return WDI_STATUS_E_FAILURE;
10003 }
10004
10005 //copying WDI OEM DATA REQ PARAMS to shared memory
10006 halStartOemDataReqParams = (tStartOemDataReqParams *)(pSendBuffer + usDataOffset );
10007
10008 wpalMemoryCopy(&halStartOemDataReqParams->selfMacAddr, &pwdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr, sizeof(wpt_macAddr));
10009 wpalMemoryCopy(&halStartOemDataReqParams->oemDataReq, &pwdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq, OEM_DATA_REQ_SIZE);
10010
10011 pWDICtx->wdiReqStatusCB = pwdiOemDataReqParams->wdiReqStatusCB;
10012 pWDICtx->pReqStatusUserData = pwdiOemDataReqParams->pUserData;
10013
10014 /*-------------------------------------------------------------------------
10015 Send Start Request to HAL
10016 -------------------------------------------------------------------------*/
10017 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10018 wdiOemDataRspCb, pEventData->pUserData,
10019 WDI_START_OEM_DATA_RESP);
10020}/*WDI_ProcessStartOemDataReq*/
10021#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010022
10023/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010024 @brief Process Host Resume Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010026
10027 @param pWDICtx: pointer to the WLAN DAL context
10028 pEventData: pointer to the event information structure
10029
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 @see
10031 @return Result of the function call
10032*/
10033WDI_Status
10034WDI_ProcessHostResumeReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010035(
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 WDI_ControlBlockType* pWDICtx,
10037 WDI_EventInfoType* pEventData
10038)
10039{
10040 WDI_ResumeParamsType* pwdiHostResumeParams = NULL;
10041 WDI_HostResumeEventRspCb wdiHostResumeRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010042 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 wpt_uint16 usDataOffset = 0;
10044 wpt_uint16 usSendSize = 0;
10045 tHalWlanHostResumeReqParam halResumeReqParams;
10046
10047 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10048
10049 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010050 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 -------------------------------------------------------------------------*/
10052 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10053 ( NULL == pEventData->pCBfnc ))
10054 {
10055 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10056 "%s: Invalid parameters ",__FUNCTION__);
10057 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010058 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 }
10060
10061 pwdiHostResumeParams = (WDI_ResumeParamsType*)pEventData->pEventData;
10062 wdiHostResumeRspCb = (WDI_HostResumeEventRspCb)pEventData->pCBfnc;
10063
10064 /*-----------------------------------------------------------------------
10065 Get message buffer
10066 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010067 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 WDI_HOST_RESUME_REQ, sizeof(halResumeReqParams),
10069 &pSendBuffer, &usDataOffset, &usSendSize))||
10070 (usSendSize < (usDataOffset + sizeof(halResumeReqParams))))
10071 {
10072 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -070010073 "Unable to get send buffer in Start Oem Data req %x %x %x",
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 pEventData, pwdiHostResumeParams, wdiHostResumeRspCb);
10075 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010076 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 }
10078
Jeff Johnsone7245742012-09-05 17:12:55 -070010079 halResumeReqParams.configuredMcstBcstFilterSetting =
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 pwdiHostResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting;
Jeff Johnsone7245742012-09-05 17:12:55 -070010081
10082 wpalMemoryCopy( pSendBuffer+usDataOffset,
10083 &halResumeReqParams,
10084 sizeof(halResumeReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070010085
10086 pWDICtx->wdiReqStatusCB = pwdiHostResumeParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010087 pWDICtx->pReqStatusUserData = pwdiHostResumeParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088
10089 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010090 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010092 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10093 wdiHostResumeRspCb, pEventData->pUserData,
10094 WDI_HOST_RESUME_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010095}/*WDI_ProcessHostResumeReq*/
10096
10097/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010098 @brief Process set Tx Per Tracking Parameters Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010100
10101 @param pWDICtx: pointer to the WLAN DAL context
10102 pEventData: pointer to the event information structure
10103
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 @see
10105 @return Result of the function call
10106*/
10107WDI_Status
10108WDI_ProcessSetTxPerTrackingReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010109(
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 WDI_ControlBlockType* pWDICtx,
10111 WDI_EventInfoType* pEventData
10112)
10113{
10114 WDI_SetTxPerTrackingReqParamsType* pwdiSetTxPerTrackingReqParams = NULL;
10115 WDI_SetTxPerTrackingRspCb pwdiSetTxPerTrackingRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070010116 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 wpt_uint16 usDataOffset = 0;
10118 wpt_uint16 usSendSize = 0;
10119 tHalTxPerTrackingReqParam halTxPerTrackingReqParam;
10120 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10121
10122 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010123 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 -------------------------------------------------------------------------*/
10125 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10126 ( NULL == pEventData->pCBfnc ))
10127 {
10128 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10129 "%s: Invalid parameters ",__FUNCTION__);
10130 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010131 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010132 }
10133
10134 pwdiSetTxPerTrackingReqParams = (WDI_SetTxPerTrackingReqParamsType*)pEventData->pEventData;
10135 pwdiSetTxPerTrackingRspCb = (WDI_SetTxPerTrackingRspCb)pEventData->pCBfnc;
Jeff Johnsone7245742012-09-05 17:12:55 -070010136
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 /*-----------------------------------------------------------------------
10138 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070010139 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010141 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_TX_PER_TRACKING_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 sizeof(halTxPerTrackingReqParam),
10143 &pSendBuffer, &usDataOffset, &usSendSize))||
10144 ( usSendSize < (usDataOffset + sizeof(halTxPerTrackingReqParam) )))
10145 {
10146 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10147 "Unable to get send buffer in set tx per tracking req %x %x %x",
10148 pEventData, pwdiSetTxPerTrackingReqParams, pwdiSetTxPerTrackingRspCb);
10149 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010150 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010152
Jeff Johnson295189b2012-06-20 16:38:30 -070010153 halTxPerTrackingReqParam.ucTxPerTrackingEnable = pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable;
10154 halTxPerTrackingReqParam.ucTxPerTrackingPeriod = pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod;
10155 halTxPerTrackingReqParam.ucTxPerTrackingRatio = pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio;
10156 halTxPerTrackingReqParam.uTxPerTrackingWatermark = pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark;
Jeff Johnsone7245742012-09-05 17:12:55 -070010157
10158 wpalMemoryCopy( pSendBuffer+usDataOffset,
10159 &halTxPerTrackingReqParam,
10160 sizeof(halTxPerTrackingReqParam));
Jeff Johnson295189b2012-06-20 16:38:30 -070010161
10162 pWDICtx->wdiReqStatusCB = pwdiSetTxPerTrackingReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010163 pWDICtx->pReqStatusUserData = pwdiSetTxPerTrackingReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164
10165 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010166 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010168 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10169 pwdiSetTxPerTrackingRspCb, pEventData->pUserData, WDI_SET_TX_PER_TRACKING_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010170}/*WDI_ProcessSetTxPerTrackingReq*/
10171
10172/*=========================================================================
10173 Indications
10174=========================================================================*/
10175
10176/**
10177 @brief Process Suspend Indications function (called when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010178
10179 @param pWDICtx: pointer to the WLAN DAL context
10180 pEventData: pointer to the event information structure
10181
Jeff Johnson295189b2012-06-20 16:38:30 -070010182 @see
10183 @return Result of the function call
10184*/
10185WDI_Status
10186WDI_ProcessHostSuspendInd
Jeff Johnsone7245742012-09-05 17:12:55 -070010187(
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 WDI_ControlBlockType* pWDICtx,
10189 WDI_EventInfoType* pEventData
10190)
10191{
10192 WDI_SuspendParamsType *pSuspendIndParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070010193 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 wpt_uint16 usDataOffset = 0;
10195 wpt_uint16 usSendSize = 0;
10196 WDI_Status wdiStatus;
10197 tHalWlanHostSuspendIndParam halWlanSuspendIndparams;
10198 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10199
10200 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010201 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 -------------------------------------------------------------------------*/
10203 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ))
10204 {
10205 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10206 "%s: Invalid parameters in Suspend ind",__FUNCTION__);
10207 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010208 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 }
10210
10211 pSuspendIndParams = (WDI_SuspendParamsType *)pEventData->pEventData;
10212
10213 /*-----------------------------------------------------------------------
10214 Get message buffer
10215 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010216 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
10217 WDI_HOST_SUSPEND_IND,
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 sizeof(halWlanSuspendIndparams),
10219 &pSendBuffer, &usDataOffset, &usSendSize))||
10220 (usSendSize < (usDataOffset + sizeof(halWlanSuspendIndparams))))
10221 {
10222 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10223 "Unable to get send buffer in Suspend Ind ");
10224 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010225 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010226 }
10227
10228 halWlanSuspendIndparams.configuredMcstBcstFilterSetting =
10229 pSuspendIndParams->wdiSuspendParams.ucConfiguredMcstBcstFilterSetting;
10230
Jeff Johnsone7245742012-09-05 17:12:55 -070010231 halWlanSuspendIndparams.activeSessionCount =
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 WDI_GetActiveSessionsCount(pWDICtx);
10233
Jeff Johnsone7245742012-09-05 17:12:55 -070010234 wpalMemoryCopy( pSendBuffer+usDataOffset, &halWlanSuspendIndparams,
10235 sizeof(tHalWlanHostSuspendIndParam));
Jeff Johnson295189b2012-06-20 16:38:30 -070010236
10237 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010238 Send Suspend Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 -------------------------------------------------------------------------*/
10240 pWDICtx->wdiReqStatusCB = pSuspendIndParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010241 pWDICtx->pReqStatusUserData = pSuspendIndParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010242
Jeff Johnsone7245742012-09-05 17:12:55 -070010243 wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 return ( wdiStatus != WDI_STATUS_SUCCESS )?wdiStatus:WDI_STATUS_SUCCESS_SYNC;
10245}/*WDI_ProcessHostSuspendInd*/
10246
10247/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070010248 MISC CONTROL PROCESSING REQUEST API
Jeff Johnson295189b2012-06-20 16:38:30 -070010249==========================================================================*/
10250/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010251 @brief Process Channel Switch Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010253
10254 @param pWDICtx: pointer to the WLAN DAL context
10255 pEventData: pointer to the event information structure
10256
Jeff Johnson295189b2012-06-20 16:38:30 -070010257 @see
10258 @return Result of the function call
10259*/
10260WDI_Status
10261WDI_ProcessChannelSwitchReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010262(
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 WDI_ControlBlockType* pWDICtx,
10264 WDI_EventInfoType* pEventData
10265)
10266{
10267 WDI_SwitchChReqParamsType* pwdiSwitchChParams;
10268 WDI_SwitchChRspCb wdiSwitchChRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010269 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 wpt_uint16 usDataOffset = 0;
10271 wpt_uint16 usSendSize = 0;
10272 tSwitchChannelReqMsg halSwitchChannelReq = {{0}};
10273 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10274
10275 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010276 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 -------------------------------------------------------------------------*/
10278 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10279 ( NULL == pEventData->pCBfnc ))
10280 {
10281 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10282 "%s: Invalid parameters", __FUNCTION__);
10283 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010284 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 }
10286
10287 pwdiSwitchChParams = (WDI_SwitchChReqParamsType*)pEventData->pEventData;
10288 wdiSwitchChRspCb = (WDI_SwitchChRspCb)pEventData->pCBfnc;
10289 /*-----------------------------------------------------------------------
10290 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070010291 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010293 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CH_SWITCH_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 sizeof(halSwitchChannelReq.switchChannelParams),
10295 &pSendBuffer, &usDataOffset, &usSendSize))||
10296 ( usSendSize < (usDataOffset + sizeof(halSwitchChannelReq.switchChannelParams) )))
10297 {
10298 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10299 "Unable to get send buffer in channel switch req %x %x %x",
10300 pEventData, pwdiSwitchChParams, wdiSwitchChRspCb);
10301 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010302 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 }
10304
Jeff Johnsone7245742012-09-05 17:12:55 -070010305 halSwitchChannelReq.switchChannelParams.channelNumber =
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 pwdiSwitchChParams->wdiChInfo.ucChannel;
Jeff Johnsone7245742012-09-05 17:12:55 -070010307#ifndef WLAN_FEATURE_VOWIFI
10308 halSwitchChannelReq.switchChannelParams.localPowerConstraint =
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 pwdiSwitchChParams->wdiChInfo.ucLocalPowerConstraint;
10310#endif
Jeff Johnsone7245742012-09-05 17:12:55 -070010311 halSwitchChannelReq.switchChannelParams.secondaryChannelOffset =
Jeff Johnson295189b2012-06-20 16:38:30 -070010312 pwdiSwitchChParams->wdiChInfo.wdiSecondaryChannelOffset;
10313
10314#ifdef WLAN_FEATURE_VOWIFI
10315 halSwitchChannelReq.switchChannelParams.maxTxPower
Jeff Johnsone7245742012-09-05 17:12:55 -070010316 = pwdiSwitchChParams->wdiChInfo.cMaxTxPower;
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 wpalMemoryCopy(halSwitchChannelReq.switchChannelParams.selfStaMacAddr,
10318 pwdiSwitchChParams->wdiChInfo.macSelfStaMacAddr,
10319 WDI_MAC_ADDR_LEN);
10320 wpalMemoryCopy(halSwitchChannelReq.switchChannelParams.bssId,
10321 pwdiSwitchChParams->wdiChInfo.macBSSId,
10322 WDI_MAC_ADDR_LEN);
10323#endif
Jeff Johnsone7245742012-09-05 17:12:55 -070010324 wpalMemoryCopy( pSendBuffer+usDataOffset,
10325 &halSwitchChannelReq.switchChannelParams,
10326 sizeof(halSwitchChannelReq.switchChannelParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070010327
10328 pWDICtx->wdiReqStatusCB = pwdiSwitchChParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010329 pWDICtx->pReqStatusUserData = pwdiSwitchChParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010330
10331 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010332 Send Switch Channel Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010334 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10335 wdiSwitchChRspCb, pEventData->pUserData, WDI_CH_SWITCH_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336}/*WDI_ProcessChannelSwitchReq*/
10337
10338/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010339 @brief Process Config STA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010341
10342 @param pWDICtx: pointer to the WLAN DAL context
10343 pEventData: pointer to the event information structure
10344
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 @see
10346 @return Result of the function call
10347*/
10348WDI_Status
10349WDI_ProcessConfigStaReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010350(
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 WDI_ControlBlockType* pWDICtx,
10352 WDI_EventInfoType* pEventData
10353)
10354{
10355 WDI_ConfigSTAReqParamsType* pwdiConfigSTAParams;
10356 WDI_ConfigSTARspCb wdiConfigSTARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010357 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070010359 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 wpt_uint16 usDataOffset = 0;
10361 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070010362 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363
Jeff Johnsone7245742012-09-05 17:12:55 -070010364 tConfigStaReqMsg halConfigStaReqMsg;
10365 wpt_uint16 uMsgSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10367
10368 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010369 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 -------------------------------------------------------------------------*/
10371 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10372 ( NULL == pEventData->pCBfnc ))
10373 {
10374 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10375 "%s: Invalid parameters", __FUNCTION__);
10376 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010377 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 }
10379
10380 pwdiConfigSTAParams = (WDI_ConfigSTAReqParamsType*)pEventData->pEventData;
10381 wdiConfigSTARspCb = (WDI_ConfigSTARspCb)pEventData->pCBfnc;
10382 /*-------------------------------------------------------------------------
10383 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070010384 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 -------------------------------------------------------------------------*/
10386 wpalMutexAcquire(&pWDICtx->wptMutex);
10387
10388 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010389 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010391 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
10392 pwdiConfigSTAParams->wdiReqInfo.macBSSID,
10393 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394
Jeff Johnsone7245742012-09-05 17:12:55 -070010395 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010397 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
10398 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
10399 __func__, MAC_ADDR_ARRAY(pwdiConfigSTAParams->wdiReqInfo.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010400
10401 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010402 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 }
10404
10405 /*------------------------------------------------------------------------
10406 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070010407 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 ------------------------------------------------------------------------*/
10409 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
10410 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010411 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10412 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
10413 __func__, MAC_ADDR_ARRAY(pwdiConfigSTAParams->wdiReqInfo.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010414
Jeff Johnsone7245742012-09-05 17:12:55 -070010415 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010417 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 }
10419
10420 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010421
10422 /* Allocation of StaReqMsg Memory Based on Firmware Capabilities */
10423#ifdef WLAN_FEATURE_11AC
10424 if (WDI_getFwWlanFeatCaps(DOT11AC))
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010425 uMsgSize = sizeof(halConfigStaReqMsg.uStaParams.configStaParams_V1); // Version-1 For 11AC
Jeff Johnsone7245742012-09-05 17:12:55 -070010426 else
10427#endif
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010428 uMsgSize = sizeof(halConfigStaReqMsg.uStaParams.configStaParams); // Version-0 Default
Jeff Johnsone7245742012-09-05 17:12:55 -070010429
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 /*-----------------------------------------------------------------------
10431 Get message buffer
10432 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010433 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CONFIG_STA_REQ,
10434 uMsgSize,
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070010436 ( usSendSize < (usDataOffset + uMsgSize )))
Jeff Johnson295189b2012-06-20 16:38:30 -070010437 {
10438 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10439 "Unable to get send buffer in config sta req %x %x %x",
10440 pEventData, pwdiConfigSTAParams, wdiConfigSTARspCb);
10441 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010442 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 }
10444
10445 /*Copy the station context*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010446 WDI_CopyWDIStaCtxToHALStaCtx( &halConfigStaReqMsg.uStaParams.configStaParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070010447 &pwdiConfigSTAParams->wdiReqInfo);
10448
10449 if(pwdiConfigSTAParams->wdiReqInfo.wdiSTAType == WDI_STA_ENTRY_SELF)
10450 {
10451 /* Need to fill in the self STA Index */
Jeff Johnsone7245742012-09-05 17:12:55 -070010452 if ( WDI_STATUS_SUCCESS !=
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 WDI_STATableFindStaidByAddr(pWDICtx,
10454 pwdiConfigSTAParams->wdiReqInfo.macSTA,
Jeff Johnsone7245742012-09-05 17:12:55 -070010455 (wpt_uint8*)&halConfigStaReqMsg.uStaParams.configStaParams.staIdx ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010456 {
10457 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10458 "This station does not exist in the WDI Station Table %d");
10459 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010460 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 }
10462 }
10463 else
10464 {
10465 /* Need to fill in the STA Index to invalid, since at this point we have not
10466 yet received it from HAL */
Jeff Johnsone7245742012-09-05 17:12:55 -070010467 halConfigStaReqMsg.uStaParams.configStaParams.staIdx = WDI_STA_INVALID_IDX;
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 }
10469
10470 /* Need to fill in the BSS index */
Jeff Johnsone7245742012-09-05 17:12:55 -070010471 halConfigStaReqMsg.uStaParams.configStaParams.bssIdx = pBSSSes->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010472
Jeff Johnsone7245742012-09-05 17:12:55 -070010473 wpalMemoryCopy( pSendBuffer+usDataOffset,
10474 &halConfigStaReqMsg.uStaParams,
10475 sizeof(halConfigStaReqMsg.uStaParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070010476
10477 pWDICtx->wdiReqStatusCB = pwdiConfigSTAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010478 pWDICtx->pReqStatusUserData = pwdiConfigSTAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010479
Jeff Johnsone7245742012-09-05 17:12:55 -070010480 wpalMemoryCopy( &pWDICtx->wdiCachedConfigStaReq,
10481 pwdiConfigSTAParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 sizeof(pWDICtx->wdiCachedConfigStaReq));
10483
10484 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010485 Send Config STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010487 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10488 wdiConfigSTARspCb, pEventData->pUserData, WDI_CONFIG_STA_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010489}/*WDI_ProcessConfigStaReq*/
10490
10491
10492/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010493 @brief Process Set Link State Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010495
10496 @param pWDICtx: pointer to the WLAN DAL context
10497 pEventData: pointer to the event information structure
10498
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 @see
10500 @return Result of the function call
10501*/
10502WDI_Status
10503WDI_ProcessSetLinkStateReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010504(
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 WDI_ControlBlockType* pWDICtx,
10506 WDI_EventInfoType* pEventData
10507)
10508{
10509 WDI_SetLinkReqParamsType* pwdiSetLinkParams;
10510 WDI_SetLinkStateRspCb wdiSetLinkRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010511 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070010513 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 wpt_uint16 usDataOffset = 0;
10515 wpt_uint16 usSendSize = 0;
10516 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnsone7245742012-09-05 17:12:55 -070010517 tLinkStateParams halLinkStateReqMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10519
10520 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010521 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 -------------------------------------------------------------------------*/
10523 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10524 ( NULL == pEventData->pCBfnc ))
10525 {
10526 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10527 "%s: Invalid parameters", __FUNCTION__);
10528 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010529 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 }
10531
10532 pwdiSetLinkParams = (WDI_SetLinkReqParamsType*)pEventData->pEventData;
10533 wdiSetLinkRspCb = (WDI_SetLinkStateRspCb)pEventData->pCBfnc;
10534 /*-------------------------------------------------------------------------
10535 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070010536 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 -------------------------------------------------------------------------*/
10538 wpalMutexAcquire(&pWDICtx->wptMutex);
10539
10540 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010541 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010543 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
10544 pwdiSetLinkParams->wdiLinkInfo.macBSSID,
10545 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -070010546
Jeff Johnsone7245742012-09-05 17:12:55 -070010547 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 {
Madan Mohan Koyyalamudi891e9492012-10-21 12:19:31 -070010549 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070010550 "%s: Set link request received outside association session. macBSSID " MAC_ADDRESS_STR,
10551 __func__, MAC_ADDR_ARRAY(pwdiSetLinkParams->wdiLinkInfo.macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 }
10553 else
10554 {
10555 /*------------------------------------------------------------------------
10556 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070010557 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 ------------------------------------------------------------------------*/
10559 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
10560 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010561 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10562 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
10563 __func__, MAC_ADDR_ARRAY(pwdiSetLinkParams->wdiLinkInfo.macBSSID));
10564
10565 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010567 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010568 }
10569 }
10570 /* If the link is set to enter IDLE - the Session allocated for this BSS
10571 will be deleted on the Set Link State response coming from HAL
10572 - cache the request for response processing */
Jeff Johnsone7245742012-09-05 17:12:55 -070010573 wpalMemoryCopy(&pWDICtx->wdiCacheSetLinkStReq, pwdiSetLinkParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 sizeof(pWDICtx->wdiCacheSetLinkStReq));
10575
10576 wpalMutexRelease(&pWDICtx->wptMutex);
10577 /*-----------------------------------------------------------------------
10578 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070010579 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010581
10582 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_LINK_ST_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 sizeof(halLinkStateReqMsg),
10584 &pSendBuffer, &usDataOffset, &usSendSize))||
10585 ( usSendSize < (usDataOffset + sizeof(halLinkStateReqMsg) )))
10586 {
10587 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10588 "Unable to get send buffer in set bss key req %x %x %x",
10589 pEventData, pwdiSetLinkParams, wdiSetLinkRspCb);
10590 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010591 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 }
10593
10594 wpalMemoryCopy(halLinkStateReqMsg.bssid,
10595 pwdiSetLinkParams->wdiLinkInfo.macBSSID, WDI_MAC_ADDR_LEN);
10596
10597 wpalMemoryCopy(halLinkStateReqMsg.selfMacAddr,
10598 pwdiSetLinkParams->wdiLinkInfo.macSelfStaMacAddr, WDI_MAC_ADDR_LEN);
10599
Jeff Johnsone7245742012-09-05 17:12:55 -070010600 halLinkStateReqMsg.state =
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 WDI_2_HAL_LINK_STATE(pwdiSetLinkParams->wdiLinkInfo.wdiLinkState);
10602
Jeff Johnsone7245742012-09-05 17:12:55 -070010603 wpalMemoryCopy( pSendBuffer+usDataOffset,
10604 &halLinkStateReqMsg,
10605 sizeof(halLinkStateReqMsg));
Jeff Johnson295189b2012-06-20 16:38:30 -070010606
10607 pWDICtx->wdiReqStatusCB = pwdiSetLinkParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010608 pWDICtx->pReqStatusUserData = pwdiSetLinkParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010609
10610 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010611 Send Set Link State Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010613 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10614 wdiSetLinkRspCb, pEventData->pUserData, WDI_SET_LINK_ST_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010615}/*WDI_ProcessSetLinkStateReq*/
10616
10617
10618/**
10619 @brief Process Get Stats Request function (called when Main FSM
10620 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010621
10622 @param pWDICtx: pointer to the WLAN DAL context
10623 pEventData: pointer to the event information structure
10624
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 @see
10626 @return Result of the function call
10627*/
10628WDI_Status
10629WDI_ProcessGetStatsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010630(
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 WDI_ControlBlockType* pWDICtx,
10632 WDI_EventInfoType* pEventData
10633)
10634{
10635 WDI_GetStatsReqParamsType* pwdiGetStatsParams;
10636 WDI_GetStatsRspCb wdiGetStatsRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010637 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 wpt_uint16 usDataOffset = 0;
10639 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070010640 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 WDI_BSSSessionType* pBSSSes = NULL;
10642 wpt_macAddr macBSSID;
Jeff Johnsone7245742012-09-05 17:12:55 -070010643 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 tHalStatsReqMsg halStatsReqMsg;
10645 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10646
10647 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010648 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 -------------------------------------------------------------------------*/
10650 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData) ||
10651 ( NULL == pEventData->pCBfnc ) )
10652 {
10653 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10654 "%s: Invalid parameters", __FUNCTION__);
10655 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010656 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 }
10658
10659 pwdiGetStatsParams = (WDI_GetStatsReqParamsType*)pEventData->pEventData;
10660 wdiGetStatsRspCb = (WDI_GetStatsRspCb)pEventData->pCBfnc;
10661
10662 /*-------------------------------------------------------------------------
10663 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070010664 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 -------------------------------------------------------------------------*/
10666 wpalMutexAcquire(&pWDICtx->wptMutex);
10667
10668 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010669 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010671 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
10672 pwdiGetStatsParams->wdiGetStatsParamsInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 &macBSSID))
10674 {
10675 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10676 "This station does not exist in the WDI Station Table %d");
10677 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010678 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010679 }
10680
Jeff Johnsone7245742012-09-05 17:12:55 -070010681 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
10682 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010684 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
10685 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
10686 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010687
10688 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010689 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 }
10691
10692 /*------------------------------------------------------------------------
10693 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070010694 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 ------------------------------------------------------------------------*/
10696 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
10697 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010698 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10699 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
10700 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010701
Jeff Johnsone7245742012-09-05 17:12:55 -070010702 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010704 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 }
10706
10707
10708 wpalMutexRelease(&pWDICtx->wptMutex);
10709
10710 /*-----------------------------------------------------------------------
10711 Get message buffer
10712 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010713 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GET_STATS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 sizeof(halStatsReqMsg.statsReqParams),
10715 &pSendBuffer, &usDataOffset, &usSendSize))||
10716 ( usSendSize < (usDataOffset + sizeof(halStatsReqMsg.statsReqParams) )))
10717 {
10718 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10719 "Unable to get send buffer in set bss key req %x %x %x",
10720 pEventData, pwdiGetStatsParams, wdiGetStatsRspCb);
10721 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010722 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 }
10724
Jeff Johnsone7245742012-09-05 17:12:55 -070010725 halStatsReqMsg.statsReqParams.staId =
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 pwdiGetStatsParams->wdiGetStatsParamsInfo.ucSTAIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070010727 halStatsReqMsg.statsReqParams.statsMask =
Jeff Johnson295189b2012-06-20 16:38:30 -070010728 pwdiGetStatsParams->wdiGetStatsParamsInfo.uStatsMask;
Jeff Johnsone7245742012-09-05 17:12:55 -070010729 wpalMemoryCopy( pSendBuffer+usDataOffset,
10730 &halStatsReqMsg.statsReqParams,
10731 sizeof(halStatsReqMsg.statsReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070010732
10733 pWDICtx->wdiReqStatusCB = pwdiGetStatsParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010734 pWDICtx->pReqStatusUserData = pwdiGetStatsParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010735
10736 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010737 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010739 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10740 wdiGetStatsRspCb, pEventData->pUserData, WDI_GET_STATS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010741}/*WDI_ProcessGetStatsReq*/
10742
10743/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010744 @brief Process Update Cfg Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010746
10747 @param pWDICtx: pointer to the WLAN DAL context
10748 pEventData: pointer to the event information structure
10749
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 @see
10751 @return Result of the function call
10752*/
10753WDI_Status
10754WDI_ProcessUpdateCfgReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010755(
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 WDI_ControlBlockType* pWDICtx,
10757 WDI_EventInfoType* pEventData
10758)
10759{
10760 WDI_UpdateCfgReqParamsType* pwdiUpdateCfgParams = NULL;
10761 WDI_UpdateCfgRspCb wdiUpdateCfgRspCb = NULL;
10762
Jeff Johnsone7245742012-09-05 17:12:55 -070010763 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 wpt_uint16 usDataOffset = 0;
10765 wpt_uint16 usSendSize = 0;
10766 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10767
10768 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010769 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 -------------------------------------------------------------------------*/
10771 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
10772 ( NULL == pEventData->pCBfnc))
10773 {
10774 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10775 "%s: Invalid parameters", __FUNCTION__);
10776 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010777 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010778 }
10779
10780 pwdiUpdateCfgParams = (WDI_UpdateCfgReqParamsType*)pEventData->pEventData;
10781 wdiUpdateCfgRspCb = (WDI_UpdateCfgRspCb)pEventData->pCBfnc;
10782
10783 /*-----------------------------------------------------------------------
10784 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070010785 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 -----------------------------------------------------------------------*/
10787
Jeff Johnsone7245742012-09-05 17:12:55 -070010788 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_CFG_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010789 pwdiUpdateCfgParams->uConfigBufferLen + sizeof(wpt_uint32),
10790 &pSendBuffer, &usDataOffset, &usSendSize))||
10791 ( usSendSize < (usDataOffset + pwdiUpdateCfgParams->uConfigBufferLen)))
10792 {
10793 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10794 "Unable to get send buffer in set bss key req %x %x %x",
10795 pEventData, pwdiUpdateCfgParams, wdiUpdateCfgRspCb);
10796 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010797 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 }
10799
Jeff Johnsone7245742012-09-05 17:12:55 -070010800 wpalMemoryCopy( pSendBuffer+usDataOffset,
10801 &pwdiUpdateCfgParams->uConfigBufferLen,
10802 sizeof(wpt_uint32));
10803 wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(wpt_uint32),
10804 pwdiUpdateCfgParams->pConfigBuffer,
10805 pwdiUpdateCfgParams->uConfigBufferLen);
Jeff Johnson295189b2012-06-20 16:38:30 -070010806
10807 pWDICtx->wdiReqStatusCB = pwdiUpdateCfgParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010808 pWDICtx->pReqStatusUserData = pwdiUpdateCfgParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809
10810 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010811 Send Update Cfg Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 -------------------------------------------------------------------------*/
10813
Jeff Johnsone7245742012-09-05 17:12:55 -070010814 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10815 wdiUpdateCfgRspCb, pEventData->pUserData, WDI_UPDATE_CFG_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816
10817}/*WDI_ProcessUpdateCfgReq*/
10818
10819
10820/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010821 @brief Process Add BA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -070010822 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010823
10824 @param pWDICtx: pointer to the WLAN DAL context
10825 pEventData: pointer to the event information structure
10826
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 @see
10828 @return Result of the function call
10829*/
10830WDI_Status
10831WDI_ProcessAddBAReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010832(
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 WDI_ControlBlockType* pWDICtx,
10834 WDI_EventInfoType* pEventData
10835)
10836{
10837 WDI_AddBAReqParamsType* pwdiAddBAParams;
10838 WDI_AddBARspCb wdiAddBARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010839 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070010841 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 wpt_uint16 usDataOffset = 0;
10843 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070010844 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 wpt_macAddr macBSSID;
10846
10847 tAddBAReqMsg halAddBAReq;
10848 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10849
10850 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010851 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010852 -------------------------------------------------------------------------*/
10853 if (( NULL == pEventData ) ||
10854 ( NULL == pEventData->pEventData) ||
10855 ( NULL == pEventData->pCBfnc ))
10856 {
10857 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10858 "%s: Invalid parameters", __FUNCTION__);
10859 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010860 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 }
10862
10863 pwdiAddBAParams = (WDI_AddBAReqParamsType*)pEventData->pEventData;
10864 wdiAddBARspCb = (WDI_AddBARspCb)pEventData->pCBfnc;
10865
10866 /*-------------------------------------------------------------------------
10867 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070010868 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 -------------------------------------------------------------------------*/
10870 wpalMutexAcquire(&pWDICtx->wptMutex);
10871
10872 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010873 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010875 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
10876 pwdiAddBAParams->wdiBAInfoType.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 &macBSSID))
10878 {
10879 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10880 "This station does not exist in the WDI Station Table %d");
10881 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010882 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010883 }
10884
Jeff Johnsone7245742012-09-05 17:12:55 -070010885 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
10886 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010888 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
10889 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
10890 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010891
10892 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010893 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 }
10895
10896 /*------------------------------------------------------------------------
10897 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070010898 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 ------------------------------------------------------------------------*/
10900 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
10901 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010902 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10903 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
10904 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070010905
Jeff Johnsone7245742012-09-05 17:12:55 -070010906 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070010908 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 }
10910
10911
10912 wpalMutexRelease(&pWDICtx->wptMutex);
10913 /*-----------------------------------------------------------------------
10914 Get message buffer
10915 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010916 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ADD_BA_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 sizeof(halAddBAReq.addBAParams),
10918 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070010919 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 (usDataOffset + sizeof(halAddBAReq.addBAParams) )))
10921 {
10922 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10923 "Unable to get send buffer in Add BA req %x %x %x",
10924 pEventData, pwdiAddBAParams, wdiAddBARspCb);
10925 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010926 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 }
10928
Jeff Johnsone7245742012-09-05 17:12:55 -070010929 halAddBAReq.addBAParams.baSessionID =
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 pwdiAddBAParams->wdiBAInfoType.ucBaSessionID;
10931 halAddBAReq.addBAParams.winSize = pwdiAddBAParams->wdiBAInfoType.ucWinSize;
10932#ifdef FEATURE_ON_CHIP_REORDERING
Jeff Johnsone7245742012-09-05 17:12:55 -070010933 halAddBAReq.addBAParams.isReorderingDoneOnChip =
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 pwdiAddBAParams->wdiBAInfoType.bIsReorderingDoneOnChip;
10935#endif
10936
Jeff Johnsone7245742012-09-05 17:12:55 -070010937 wpalMemoryCopy( pSendBuffer+usDataOffset,
10938 &halAddBAReq.addBAParams,
10939 sizeof(halAddBAReq.addBAParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070010940
10941 pWDICtx->wdiReqStatusCB = pwdiAddBAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070010942 pWDICtx->pReqStatusUserData = pwdiAddBAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010943
10944 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010945 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070010947 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
10948 wdiAddBARspCb, pEventData->pUserData,
10949 WDI_ADD_BA_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070010950}/*WDI_ProcessAddBAReq*/
10951
10952
10953
10954/**
Jeff Johnsone7245742012-09-05 17:12:55 -070010955 @brief Process Trigger BA Request function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070010957
10958 @param pWDICtx: pointer to the WLAN DAL context
10959 pEventData: pointer to the event information structure
10960
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 @see
10962 @return Result of the function call
10963*/
10964WDI_Status
10965WDI_ProcessTriggerBAReq
Jeff Johnsone7245742012-09-05 17:12:55 -070010966(
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 WDI_ControlBlockType* pWDICtx,
10968 WDI_EventInfoType* pEventData
10969)
10970{
10971 WDI_TriggerBAReqParamsType* pwdiTriggerBAParams;
10972 WDI_TriggerBARspCb wdiTriggerBARspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070010973 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070010975 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 wpt_uint16 usDataOffset = 0;
10977 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070010978 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 wpt_uint16 index;
10980 wpt_macAddr macBSSID;
Jeff Johnsone7245742012-09-05 17:12:55 -070010981
Jeff Johnson295189b2012-06-20 16:38:30 -070010982 tTriggerBAReqMsg halTriggerBAReq;
10983 tTriggerBaReqCandidate* halTriggerBACandidate;
10984 WDI_TriggerBAReqCandidateType* wdiTriggerBACandidate;
10985 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
10986
10987 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070010988 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070010989 -------------------------------------------------------------------------*/
10990 if (( NULL == pEventData ) ||
10991 ( NULL == pEventData->pEventData ) ||
10992 ( NULL == pEventData->pCBfnc ))
10993 {
10994 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
10995 "%s: Invalid parameters", __FUNCTION__);
10996 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070010997 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010998 }
10999
11000 pwdiTriggerBAParams = (WDI_TriggerBAReqParamsType*)pEventData->pEventData;
11001 wdiTriggerBARspCb = (WDI_TriggerBARspCb)pEventData->pCBfnc;
11002 /*-------------------------------------------------------------------------
11003 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070011004 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 -------------------------------------------------------------------------*/
11006 wpalMutexAcquire(&pWDICtx->wptMutex);
11007
11008 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011009 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011011 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
11012 pwdiTriggerBAParams->wdiTriggerBAInfoType.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -070011013 &macBSSID))
11014 {
11015 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11016 "This station does not exist in the WDI Station Table %d");
11017 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070011018 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 }
11020
Jeff Johnsone7245742012-09-05 17:12:55 -070011021 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
11022 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011024 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
11025 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
11026 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070011027
11028 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070011029 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 }
11031
11032 /*------------------------------------------------------------------------
11033 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070011034 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 ------------------------------------------------------------------------*/
11036 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
11037 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011038 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11039 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
11040 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070011041
Jeff Johnsone7245742012-09-05 17:12:55 -070011042 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070011044 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 }
11046
11047
11048 wpalMutexRelease(&pWDICtx->wptMutex);
11049 /*-----------------------------------------------------------------------
11050 Get message buffer
11051 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011052 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
11053 WDI_TRIGGER_BA_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011054 sizeof(halTriggerBAReq.triggerBAParams) +
Jeff Johnsone7245742012-09-05 17:12:55 -070011055 (sizeof(tTriggerBaReqCandidate) *
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 pwdiTriggerBAParams->wdiTriggerBAInfoType.usBACandidateCnt),
11057 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070011058 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 (usDataOffset + sizeof(halTriggerBAReq.triggerBAParams)+
Jeff Johnsone7245742012-09-05 17:12:55 -070011060 (sizeof(tTriggerBaReqCandidate) *
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 pwdiTriggerBAParams->wdiTriggerBAInfoType.usBACandidateCnt) )))
11062 {
11063 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11064 "Unable to get send buffer in Trigger BA req %x %x %x",
11065 pEventData, pwdiTriggerBAParams, wdiTriggerBARspCb);
11066 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011067 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 }
11069
Jeff Johnsone7245742012-09-05 17:12:55 -070011070 halTriggerBAReq.triggerBAParams.baSessionID =
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 pwdiTriggerBAParams->wdiTriggerBAInfoType.ucBASessionID;
Jeff Johnsone7245742012-09-05 17:12:55 -070011072 halTriggerBAReq.triggerBAParams.baCandidateCnt =
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 pwdiTriggerBAParams->wdiTriggerBAInfoType.usBACandidateCnt;
11074
Jeff Johnsone7245742012-09-05 17:12:55 -070011075 wpalMemoryCopy( pSendBuffer+usDataOffset,
11076 &halTriggerBAReq.triggerBAParams,
11077 sizeof(halTriggerBAReq.triggerBAParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011078
Jeff Johnsone7245742012-09-05 17:12:55 -070011079 wdiTriggerBACandidate =
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 (WDI_TriggerBAReqCandidateType*)(pwdiTriggerBAParams + 1);
11081 halTriggerBACandidate = (tTriggerBaReqCandidate*)(pSendBuffer+usDataOffset+
11082 sizeof(halTriggerBAReq.triggerBAParams));
Jeff Johnsone7245742012-09-05 17:12:55 -070011083
11084 for(index = 0 ; index < halTriggerBAReq.triggerBAParams.baCandidateCnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 index++)
11086 {
11087 halTriggerBACandidate->staIdx = wdiTriggerBACandidate->ucSTAIdx;
11088 halTriggerBACandidate->tidBitmap = wdiTriggerBACandidate->ucTidBitmap;
11089 halTriggerBACandidate++;
11090 wdiTriggerBACandidate++;
11091 }
11092
11093 pWDICtx->wdiReqStatusCB = pwdiTriggerBAParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011094 pWDICtx->pReqStatusUserData = pwdiTriggerBAParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095
11096 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011097 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011099 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11100 wdiTriggerBARspCb, pEventData->pUserData,
11101 WDI_TRIGGER_BA_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102}/*WDI_ProcessTriggerBAReq*/
11103
11104
11105
11106/**
11107 @brief Process Update Beacon Params Request function (called when Main FSM
11108 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011109
11110 @param pWDICtx: pointer to the WLAN DAL context
11111 pEventData: pointer to the event information structure
11112
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 @see
11114 @return Result of the function call
11115*/
11116WDI_Status
11117WDI_ProcessUpdateBeaconParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011118(
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 WDI_ControlBlockType* pWDICtx,
11120 WDI_EventInfoType* pEventData
11121)
11122{
11123 WDI_UpdateBeaconParamsType* pwdiUpdateBeaconParams;
11124 WDI_UpdateBeaconParamsRspCb wdiUpdateBeaconParamsRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070011125 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 wpt_uint16 usDataOffset = 0;
11127 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070011128 tUpdateBeaconParams halUpdateBeaconParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11130
11131 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011132 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 -------------------------------------------------------------------------*/
11134 if (( NULL == pEventData ) ||
11135 ( NULL == pEventData->pEventData) ||
11136 ( NULL == pEventData->pCBfnc))
11137 {
11138 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11139 "%s: Invalid parameters", __FUNCTION__);
11140 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011141 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 }
11143
11144 pwdiUpdateBeaconParams = (WDI_UpdateBeaconParamsType*)pEventData->pEventData;
11145 wdiUpdateBeaconParamsRspCb = (WDI_UpdateBeaconParamsRspCb)pEventData->pCBfnc;
11146 /*-----------------------------------------------------------------------
11147 Get message buffer
11148 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011149 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPD_BCON_PRMS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 sizeof(halUpdateBeaconParams),
11151 &pSendBuffer, &usDataOffset, &usSendSize))||
11152 ( usSendSize < (usDataOffset + sizeof(halUpdateBeaconParams) )))
11153 {
11154 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11155 "Unable to get send buffer in set bss key req %x %x %x",
11156 pEventData, pwdiUpdateBeaconParams, wdiUpdateBeaconParamsRspCb);
11157 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011158 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 }
11160
11161 /*BSS Index of the BSS*/
11162 halUpdateBeaconParams.bssIdx =
11163 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx;
11164 /*shortPreamble mode. HAL should update all the STA rates when it
11165 receives this message*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011166 halUpdateBeaconParams.fShortPreamble =
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble;
11168 /* short Slot time.*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011169 halUpdateBeaconParams.fShortSlotTime =
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime;
11171 /* Beacon Interval */
Jeff Johnsone7245742012-09-05 17:12:55 -070011172 halUpdateBeaconParams.beaconInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval;
11174
11175 /*Protection related */
Jeff Johnsone7245742012-09-05 17:12:55 -070011176 halUpdateBeaconParams.llaCoexist =
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070011178 halUpdateBeaconParams.llbCoexist =
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070011180 halUpdateBeaconParams.llgCoexist =
Jeff Johnson295189b2012-06-20 16:38:30 -070011181 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070011182 halUpdateBeaconParams.ht20MhzCoexist =
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070011184 halUpdateBeaconParams.llnNonGFCoexist =
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070011186 halUpdateBeaconParams.fLsigTXOPProtectionFullSupport =
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport;
11188 halUpdateBeaconParams.fRIFSMode =
11189 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode;
Jeff Johnsone7245742012-09-05 17:12:55 -070011190 halUpdateBeaconParams.paramChangeBitmap =
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 pwdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap;
11192
Jeff Johnsone7245742012-09-05 17:12:55 -070011193 wpalMemoryCopy( pSendBuffer+usDataOffset, &halUpdateBeaconParams,
11194 sizeof(halUpdateBeaconParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011195
11196 pWDICtx->wdiReqStatusCB = pwdiUpdateBeaconParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011197 pWDICtx->pReqStatusUserData = pwdiUpdateBeaconParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011198
11199 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011200 Send Del TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011202 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11203 wdiUpdateBeaconParamsRspCb, pEventData->pUserData, WDI_UPD_BCON_PRMS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204}/*WDI_ProcessUpdateBeaconParamsReq*/
11205
11206
11207
11208/**
11209 @brief Process Send Beacon template Request function (called when Main FSM
11210 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011211
11212 @param pWDICtx: pointer to the WLAN DAL context
11213 pEventData: pointer to the event information structure
11214
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 @see
11216 @return Result of the function call
11217*/
11218WDI_Status
11219WDI_ProcessSendBeaconParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011220(
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 WDI_ControlBlockType* pWDICtx,
11222 WDI_EventInfoType* pEventData
11223)
11224{
11225 WDI_SendBeaconParamsType* pwdiSendBeaconParams;
11226 WDI_SendBeaconParamsRspCb wdiSendBeaconParamsRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070011227 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011228 wpt_uint16 usDataOffset = 0;
11229 wpt_uint16 usSendSize = 0;
11230 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11231
11232 tSendBeaconReqMsg halSendBeaconReq;
11233 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011234 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 -------------------------------------------------------------------------*/
11236 if (( NULL == pEventData ) ||
11237 ( NULL == pEventData->pEventData ) ||
11238 ( NULL == pEventData->pCBfnc ))
11239 {
11240 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11241 "%s: Invalid parameters", __FUNCTION__);
11242 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011243 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011244 }
11245
11246 pwdiSendBeaconParams = (WDI_SendBeaconParamsType*)pEventData->pEventData;
11247 wdiSendBeaconParamsRspCb = (WDI_SendBeaconParamsRspCb)pEventData->pCBfnc;
11248 /*-----------------------------------------------------------------------
11249 Get message buffer
11250 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011251 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SND_BCON_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 sizeof(halSendBeaconReq.sendBeaconParam),
11253 &pSendBuffer, &usDataOffset, &usSendSize))||
11254 ( usSendSize < (usDataOffset + sizeof(halSendBeaconReq.sendBeaconParam) )))
11255 {
11256 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11257 "Unable to get send buffer in send beacon req %x %x %x",
11258 pEventData, pwdiSendBeaconParams, wdiSendBeaconParamsRspCb);
11259 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011260 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011261 }
11262
11263 wpalMemoryCopy(halSendBeaconReq.sendBeaconParam.bssId,
11264 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.macBSSID,
11265 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070011266 halSendBeaconReq.sendBeaconParam.beaconLength =
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.beaconLength;
11268 wpalMemoryCopy(halSendBeaconReq.sendBeaconParam.beacon,
11269 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.beacon,
11270 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.beaconLength);
11271#ifdef WLAN_SOFTAP_FEATURE
Jeff Johnsone7245742012-09-05 17:12:55 -070011272 halSendBeaconReq.sendBeaconParam.timIeOffset =
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.timIeOffset;
11274#endif
11275#ifdef WLAN_FEATURE_P2P
Jeff Johnsone7245742012-09-05 17:12:55 -070011276 halSendBeaconReq.sendBeaconParam.p2pIeOffset =
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 pwdiSendBeaconParams->wdiSendBeaconParamsInfo.usP2PIeOffset;
11278#endif
11279
Jeff Johnsone7245742012-09-05 17:12:55 -070011280 wpalMemoryCopy( pSendBuffer+usDataOffset,
11281 &halSendBeaconReq.sendBeaconParam,
11282 sizeof(halSendBeaconReq.sendBeaconParam));
Jeff Johnson295189b2012-06-20 16:38:30 -070011283
11284 pWDICtx->wdiReqStatusCB = pwdiSendBeaconParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011285 pWDICtx->pReqStatusUserData = pwdiSendBeaconParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011286
11287 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011288 Send Del TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011290 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11291 wdiSendBeaconParamsRspCb, pEventData->pUserData, WDI_SND_BCON_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011292}/*WDI_ProcessSendBeaconParamsReq*/
11293
11294/**
11295 @brief Process Update Beacon Params Request function (called when Main FSM
11296 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011297
11298 @param pWDICtx: pointer to the WLAN DAL context
11299 pEventData: pointer to the event information structure
11300
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 @see
11302 @return Result of the function call
11303*/
11304WDI_Status
11305WDI_ProcessUpdateProbeRspTemplateReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011306(
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 WDI_ControlBlockType* pWDICtx,
11308 WDI_EventInfoType* pEventData
11309)
11310{
11311 WDI_UpdateProbeRspTemplateParamsType* pwdiUpdateProbeRespTmplParams;
11312 WDI_UpdateProbeRspTemplateRspCb wdiUpdateProbeRespTmplRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070011313 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 wpt_uint16 usDataOffset = 0;
11315 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070011316 tSendProbeRespReqParams halUpdateProbeRspTmplParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11318
11319 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011320 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 -------------------------------------------------------------------------*/
11322 if (( NULL == pEventData ) ||
11323 ( NULL == pEventData->pEventData) ||
11324 ( NULL == pEventData->pCBfnc))
11325 {
11326 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11327 "%s: Invalid parameters", __FUNCTION__);
11328 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011329 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 }
11331
Jeff Johnsone7245742012-09-05 17:12:55 -070011332 pwdiUpdateProbeRespTmplParams =
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 (WDI_UpdateProbeRspTemplateParamsType*)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -070011334 wdiUpdateProbeRespTmplRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 (WDI_UpdateProbeRspTemplateRspCb)pEventData->pCBfnc;
11336 /*-----------------------------------------------------------------------
11337 Get message buffer
11338 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011339 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPD_PROBE_RSP_TEMPLATE_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 sizeof(halUpdateProbeRspTmplParams),
11341 &pSendBuffer, &usDataOffset, &usSendSize))||
11342 ( usSendSize < (usDataOffset + sizeof(halUpdateProbeRspTmplParams) )))
11343 {
11344 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11345 "Unable to get send buffer in set bss key req %x %x %x",
11346 pEventData, pwdiUpdateProbeRespTmplParams, wdiUpdateProbeRespTmplRspCb);
11347 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011348 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 }
11350
11351 wpalMemoryCopy(halUpdateProbeRspTmplParams.bssId,
Jeff Johnsone7245742012-09-05 17:12:55 -070011352 pwdiUpdateProbeRespTmplParams->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 WDI_MAC_ADDR_LEN);
11354
Jeff Johnsone7245742012-09-05 17:12:55 -070011355 halUpdateProbeRspTmplParams.probeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 pwdiUpdateProbeRespTmplParams->wdiProbeRspTemplateInfo.uProbeRespTemplateLen;
11357
11358 wpalMemoryCopy(halUpdateProbeRspTmplParams.pProbeRespTemplate,
11359 pwdiUpdateProbeRespTmplParams->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnsone7245742012-09-05 17:12:55 -070011360 BEACON_TEMPLATE_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011361
11362
11363 wpalMemoryCopy(halUpdateProbeRspTmplParams.ucProxyProbeReqValidIEBmap,
11364 pwdiUpdateProbeRespTmplParams->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
11365 WDI_PROBE_REQ_BITMAP_IE_LEN);
11366
Jeff Johnsone7245742012-09-05 17:12:55 -070011367 wpalMemoryCopy( pSendBuffer+usDataOffset,
11368 &halUpdateProbeRspTmplParams,
11369 sizeof(halUpdateProbeRspTmplParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011370
11371 pWDICtx->wdiReqStatusCB = pwdiUpdateProbeRespTmplParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011372 pWDICtx->pReqStatusUserData = pwdiUpdateProbeRespTmplParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011373
11374 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011375 Send Update Probe Resp Template Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011377 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11378 wdiUpdateProbeRespTmplRspCb, pEventData->pUserData,
11379 WDI_UPD_PROBE_RSP_TEMPLATE_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011380}/*WDI_ProcessUpdateProbeRspTemplateReq*/
11381
11382/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011383 @brief Process NV blob download function (called when Main FSM
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011385
11386 @param pWDICtx: pointer to the WLAN DAL context
11387 pEventData: pointer to the event information structure
11388
Jeff Johnson295189b2012-06-20 16:38:30 -070011389 @see
11390 @return Result of the function call
11391*/
11392WDI_Status
11393WDI_ProcessNvDownloadReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011394(
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 WDI_ControlBlockType* pWDICtx,
11396 WDI_EventInfoType* pEventData
11397)
11398{
11399
11400 WDI_NvDownloadReqParamsType* pwdiNvDownloadReqParams = NULL;
11401 WDI_NvDownloadRspCb wdiNvDownloadRspCb = NULL;
11402
11403 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011404 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 -------------------------------------------------------------------------*/
11406 if (( NULL == pEventData ) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011407 ( NULL == (pwdiNvDownloadReqParams =
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 (WDI_NvDownloadReqParamsType*)pEventData->pEventData)) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011409 ( NULL == (wdiNvDownloadRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 (WDI_NvDownloadRspCb)pEventData->pCBfnc)))
11411 {
11412 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11413 "%s: Invalid parameters", __FUNCTION__);
11414 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011415 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 }
11417
11418 /*Intialize the Nv Blob Info */
Jeff Johnsone7245742012-09-05 17:12:55 -070011419 pWDICtx->wdiNvBlobInfo.usTotalFragment =
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 TOTALFRAGMENTS(pwdiNvDownloadReqParams->wdiBlobInfo.uBlobSize);
11421
11422 /*cache the wdi nv request message here if the the first fragment
11423 * To issue the request to HAL for the next fragment */
11424 if( 0 == pWDICtx->wdiNvBlobInfo.usCurrentFragment)
11425 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011426 wpalMemoryCopy(&pWDICtx->wdiCachedNvDownloadReq,
11427 pwdiNvDownloadReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 sizeof(pWDICtx->wdiCachedNvDownloadReq));
11429
11430 pWDICtx->pfncRspCB = pEventData->pCBfnc;
11431 pWDICtx->pRspCBUserData = pEventData->pUserData;
11432 }
11433
11434 return WDI_SendNvBlobReq(pWDICtx,pEventData);
11435}
11436
11437/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011438 @brief Process Set Max Tx Power Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011440
11441 @param pWDICtx: pointer to the WLAN DAL context
11442 pEventData: pointer to the event information structure
11443
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 @see
11445 @return Result of the function call
11446*/
11447WDI_Status WDI_ProcessSetMaxTxPowerReq
11448(
11449 WDI_ControlBlockType* pWDICtx,
11450 WDI_EventInfoType* pEventData
11451)
11452{
11453 WDI_SetMaxTxPowerParamsType* pwdiSetMaxTxPowerParams = NULL;
11454 WDA_SetMaxTxPowerRspCb wdiSetMaxTxPowerRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070011455 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 wpt_uint16 usDataOffset = 0;
11457 wpt_uint16 usSendSize = 0;
11458 tSetMaxTxPwrReq halSetMaxTxPower;
11459 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11460
11461 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011462 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 -------------------------------------------------------------------------*/
11464 if (( NULL == pEventData ) ||
11465 ( NULL == pEventData->pEventData ) ||
11466 ( NULL == pEventData->pCBfnc ))
11467 {
11468 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
11469 "%s: Invalid parameters", __FUNCTION__);
11470 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011471 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011473 pwdiSetMaxTxPowerParams =
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 (WDI_SetMaxTxPowerParamsType*)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -070011475 wdiSetMaxTxPowerRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 (WDA_SetMaxTxPowerRspCb)pEventData->pCBfnc;
11477
11478 /*-----------------------------------------------------------------------
11479 Get message buffer
11480 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011481if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_MAX_TX_POWER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 sizeof(halSetMaxTxPower.setMaxTxPwrParams),
11483 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070011484 ( usSendSize < (usDataOffset + sizeof(halSetMaxTxPower.setMaxTxPwrParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011485)))
11486 {
11487 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
11488 "Unable to get Set Max Tx Power req %x %x %x",
11489 pEventData, pwdiSetMaxTxPowerParams, wdiSetMaxTxPowerRspCb);
11490 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011491 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 }
11493
11494 wpalMemoryCopy(halSetMaxTxPower.setMaxTxPwrParams.bssId,
11495 pwdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
11496 WDI_MAC_ADDR_LEN);
11497
11498 wpalMemoryCopy(halSetMaxTxPower.setMaxTxPwrParams.selfStaMacAddr,
11499 pwdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
11500 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070011501 halSetMaxTxPower.setMaxTxPwrParams.power =
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 pwdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -070011503
11504 wpalMemoryCopy( pSendBuffer+usDataOffset,
11505 &halSetMaxTxPower.setMaxTxPwrParams,
11506 sizeof(halSetMaxTxPower.setMaxTxPwrParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011507
11508 pWDICtx->wdiReqStatusCB = pwdiSetMaxTxPowerParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011509 pWDICtx->pReqStatusUserData = pwdiSetMaxTxPowerParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510
11511 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011512 Send Del TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011514 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11515 wdiSetMaxTxPowerRspCb, pEventData->pUserData,
11516 WDI_SET_MAX_TX_POWER_RESP);
11517
Jeff Johnson295189b2012-06-20 16:38:30 -070011518}
11519
11520#ifdef WLAN_FEATURE_P2P
11521
11522/**
11523 @brief Process P2P Notice Of Absence Request function (called when Main FSM
11524 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011525
11526 @param pWDICtx: pointer to the WLAN DAL context
11527 pEventData: pointer to the event information structure
11528
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 @see
11530 @return Result of the function call
11531*/
11532WDI_Status
11533WDI_ProcessP2PGONOAReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011534(
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 WDI_ControlBlockType* pWDICtx,
11536 WDI_EventInfoType* pEventData
11537)
11538{
11539 WDI_SetP2PGONOAReqParamsType* pwdiP2PGONOAReqParams;
11540 WDI_SetP2PGONOAReqParamsRspCb wdiP2PGONOAReqRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070011541 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011542 wpt_uint16 usDataOffset = 0;
11543 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070011544 tSetP2PGONOAParams halSetP2PGONOAParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11546
11547 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011548 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 -------------------------------------------------------------------------*/
11550 if (( NULL == pEventData ) ||
11551 ( NULL == pEventData->pEventData) ||
11552 ( NULL == pEventData->pCBfnc))
11553 {
11554 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11555 "%s: Invalid parameters", __FUNCTION__);
11556 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011557 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 }
11559
Jeff Johnsone7245742012-09-05 17:12:55 -070011560 pwdiP2PGONOAReqParams =
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 (WDI_SetP2PGONOAReqParamsType*)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -070011562 wdiP2PGONOAReqRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 (WDI_SetP2PGONOAReqParamsRspCb)pEventData->pCBfnc;
11564 /*-----------------------------------------------------------------------
11565 Get message buffer
11566 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011567 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
11568 WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 sizeof(halSetP2PGONOAParams),
11570 &pSendBuffer, &usDataOffset, &usSendSize))||
11571 ( usSendSize < (usDataOffset + sizeof(halSetP2PGONOAParams) )))
11572 {
11573 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11574 "Unable to get send buffer in set P2P GO NOA REQ %x %x %x",
11575 pEventData, pwdiP2PGONOAReqParams, wdiP2PGONOAReqRspCb);
11576 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011577 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011578 }
11579
Jeff Johnsone7245742012-09-05 17:12:55 -070011580 halSetP2PGONOAParams.opp_ps =
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.ucOpp_ps;
Jeff Johnsone7245742012-09-05 17:12:55 -070011582 halSetP2PGONOAParams.ctWindow =
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.uCtWindow;
11584 halSetP2PGONOAParams.count = pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.ucCount;
Jeff Johnsone7245742012-09-05 17:12:55 -070011585 halSetP2PGONOAParams.duration =
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.uDuration;
Jeff Johnsone7245742012-09-05 17:12:55 -070011587 halSetP2PGONOAParams.interval =
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.uInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -070011589 halSetP2PGONOAParams.single_noa_duration =
Jeff Johnson295189b2012-06-20 16:38:30 -070011590 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.uSingle_noa_duration;
Jeff Johnsone7245742012-09-05 17:12:55 -070011591 halSetP2PGONOAParams.psSelection =
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 pwdiP2PGONOAReqParams->wdiP2PGONOAInfo.ucPsSelection;
11593
Jeff Johnsone7245742012-09-05 17:12:55 -070011594 wpalMemoryCopy( pSendBuffer+usDataOffset,
11595 &halSetP2PGONOAParams,
11596 sizeof(halSetP2PGONOAParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011597
11598 pWDICtx->wdiReqStatusCB = pwdiP2PGONOAReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011599 pWDICtx->pReqStatusUserData = pwdiP2PGONOAReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011600
11601 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011602 Send Update Probe Resp Template Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011604 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11605 wdiP2PGONOAReqRspCb, pEventData->pUserData,
11606 WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011607}/*WDI_ProcessP2PGONOAReq*/
11608
11609#endif
11610
11611
11612/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011613 @brief Function to handle the ack from DXE once the power
Jeff Johnson295189b2012-06-20 16:38:30 -070011614 state is set.
Jeff Johnsone7245742012-09-05 17:12:55 -070011615 @param None
11616
11617 @see
11618 @return void
Jeff Johnson295189b2012-06-20 16:38:30 -070011619*/
11620void
11621WDI_SetPowerStateCb
11622(
11623 wpt_status status,
11624 unsigned int dxePhyAddr,
11625 void *pContext
11626)
11627{
11628 wpt_status wptStatus;
11629 WDI_ControlBlockType *pCB = NULL;
11630 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
11631 if(eWLAN_PAL_STATUS_E_FAILURE == status )
11632 {
11633 //it shouldn't happen, put an error msg
11634 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011635 /*
11636 * Trigger the event to bring the Enter BMPS req function to come
11637 * out of wait
Jeff Johnson295189b2012-06-20 16:38:30 -070011638*/
11639 if( NULL != pContext )
11640 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011641 pCB = (WDI_ControlBlockType *)pContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011642 }
11643 else
11644 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011645 //put an error msg
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 pCB = &gWDICb;
11647 }
11648 pCB->dxePhyAddr = dxePhyAddr;
11649 wptStatus = wpalEventSet(&pCB->setPowerStateEvent);
11650 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
11651 {
11652 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11653 "Failed to set an event");
11654
Jeff Johnsone7245742012-09-05 17:12:55 -070011655 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 }
11657 return;
11658}
11659
11660
11661/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011662 @brief Process Enter IMPS Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011664
11665 @param pWDICtx: pointer to the WLAN DAL context
11666 pEventData: pointer to the event information structure
11667
Jeff Johnson295189b2012-06-20 16:38:30 -070011668 @see
11669 @return Result of the function call
11670*/
11671WDI_Status
11672WDI_ProcessEnterImpsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011673(
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 WDI_ControlBlockType* pWDICtx,
11675 WDI_EventInfoType* pEventData
11676)
11677{
Jeff Johnson43971f52012-07-17 12:26:56 -070011678 wpt_status wptStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 WDI_EnterImpsRspCb wdiEnterImpsRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011680 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011681 wpt_uint16 usDataOffset = 0;
11682 wpt_uint16 usSendSize = 0;
11683 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11684
11685 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011686 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011687 -------------------------------------------------------------------------*/
11688 if (( NULL == pEventData ) ||
11689 ( NULL == (wdiEnterImpsRspCb = (WDI_EnterImpsRspCb)pEventData->pCBfnc)))
11690 {
11691 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11692 "%s: Invalid parameters", __FUNCTION__);
11693 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011694 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 }
11696
11697 /*-----------------------------------------------------------------------
11698 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070011699 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011701 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ENTER_IMPS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 0,
11703 &pSendBuffer, &usDataOffset, &usSendSize))||
11704 ( usSendSize < (usDataOffset )))
11705 {
11706 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11707 "Unable to get send buffer in Enter IMPS req %x %x",
11708 pEventData, wdiEnterImpsRspCb);
11709 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011710 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 }
11712
11713 /* Reset the event to be not signalled */
Jeff Johnson43971f52012-07-17 12:26:56 -070011714 wptStatus = wpalEventReset(&pWDICtx->setPowerStateEvent);
11715 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070011716 {
11717 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11718 "WDI Init failed to reset an event");
11719
Jeff Johnsone7245742012-09-05 17:12:55 -070011720 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 return VOS_STATUS_E_FAILURE;
11722 }
11723
11724 // notify DTS that we are entering IMPS
11725 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_IMPS, WDI_SetPowerStateCb);
11726
11727 /*
Jeff Johnsone7245742012-09-05 17:12:55 -070011728 * Wait for the event to be set once the ACK comes back from DXE
Jeff Johnson295189b2012-06-20 16:38:30 -070011729 */
Jeff Johnson43971f52012-07-17 12:26:56 -070011730 wptStatus = wpalEventWait(&pWDICtx->setPowerStateEvent,
11731 WDI_SET_POWER_STATE_TIMEOUT);
11732 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 {
11734 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11735 "WDI Init failed to wait on an event");
11736
Jeff Johnsone7245742012-09-05 17:12:55 -070011737 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 return VOS_STATUS_E_FAILURE;
11739 }
11740
11741 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011742 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011744 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11745 wdiEnterImpsRspCb, pEventData->pUserData, WDI_ENTER_IMPS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746}/*WDI_ProcessEnterImpsReq*/
11747
11748/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011749 @brief Process Exit IMPS Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011751
11752 @param pWDICtx: pointer to the WLAN DAL context
11753 pEventData: pointer to the event information structure
11754
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 @see
11756 @return Result of the function call
11757*/
11758WDI_Status
11759WDI_ProcessExitImpsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011760(
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 WDI_ControlBlockType* pWDICtx,
11762 WDI_EventInfoType* pEventData
11763)
11764{
11765 WDI_ExitImpsRspCb wdiExitImpsRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011766 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 wpt_uint16 usDataOffset = 0;
11768 wpt_uint16 usSendSize = 0;
11769 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11770
11771 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011772 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 -------------------------------------------------------------------------*/
11774 if (( NULL == pEventData ) ||
11775 ( NULL == (wdiExitImpsRspCb = (WDI_ExitImpsRspCb)pEventData->pCBfnc)))
11776 {
11777 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11778 "%s: Invalid parameters", __FUNCTION__);
11779 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011780 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 }
11782
11783 /*-----------------------------------------------------------------------
11784 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070011785 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011787 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_EXIT_IMPS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 0,
11789 &pSendBuffer, &usDataOffset, &usSendSize))||
11790 ( usSendSize < (usDataOffset )))
11791 {
11792 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11793 "Unable to get send buffer in Exit IMPS req %x %x",
11794 pEventData, wdiExitImpsRspCb);
11795 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011796 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 }
11798
11799 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011800 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011802 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11803 wdiExitImpsRspCb, pEventData->pUserData, WDI_EXIT_IMPS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011804}/*WDI_ProcessExitImpsReq*/
11805
11806/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011807 @brief Process Enter BMPS Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -070011808 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011809
11810 @param pWDICtx: pointer to the WLAN DAL context
11811 pEventData: pointer to the event information structure
11812
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 @see
11814 @return Result of the function call
11815*/
11816WDI_Status
11817WDI_ProcessEnterBmpsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011818(
Jeff Johnson295189b2012-06-20 16:38:30 -070011819 WDI_ControlBlockType* pWDICtx,
11820 WDI_EventInfoType* pEventData
11821)
11822{
11823 WDI_EnterBmpsReqParamsType* pwdiEnterBmpsReqParams = NULL;
11824 WDI_EnterBmpsRspCb wdiEnterBmpsRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011825 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011826 wpt_uint16 usDataOffset = 0;
11827 wpt_uint16 usSendSize = 0;
11828 tHalEnterBmpsReqParams enterBmpsReq;
Jeff Johnson43971f52012-07-17 12:26:56 -070011829 wpt_status wptStatus;
11830
Jeff Johnson295189b2012-06-20 16:38:30 -070011831 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11832
11833 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011834 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 -------------------------------------------------------------------------*/
11836 if (( NULL == pEventData ) ||
11837 ( NULL == (pwdiEnterBmpsReqParams = (WDI_EnterBmpsReqParamsType*)pEventData->pEventData)) ||
11838 ( NULL == (wdiEnterBmpsRspCb = (WDI_EnterBmpsRspCb)pEventData->pCBfnc)))
11839 {
11840 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11841 "%s: Invalid parameters", __FUNCTION__);
11842 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011843 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 }
11845
11846 /*-----------------------------------------------------------------------
11847 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070011848 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011850 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ENTER_BMPS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 sizeof(enterBmpsReq),
11852 &pSendBuffer, &usDataOffset, &usSendSize))||
11853 ( usSendSize < (usDataOffset + sizeof(enterBmpsReq) )))
11854 {
11855 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11856 "Unable to get send buffer in Enter BMPS req %x %x %x",
11857 pEventData, pwdiEnterBmpsReqParams, wdiEnterBmpsRspCb);
11858 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011859 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 }
11861
11862 /* Reset the event to be not signalled */
Jeff Johnson43971f52012-07-17 12:26:56 -070011863 wptStatus = wpalEventReset(&pWDICtx->setPowerStateEvent);
11864 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 {
11866 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11867 "WDI Init failed to reset an event");
11868
Jeff Johnsone7245742012-09-05 17:12:55 -070011869 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 return VOS_STATUS_E_FAILURE;
11871 }
11872
11873 // notify DTS that we are entering BMPS
11874 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_BMPS, WDI_SetPowerStateCb);
11875
11876/*
Jeff Johnsone7245742012-09-05 17:12:55 -070011877 * Wait for the event to be set once the ACK comes back from DXE
Jeff Johnson295189b2012-06-20 16:38:30 -070011878 */
Jeff Johnson43971f52012-07-17 12:26:56 -070011879 wptStatus = wpalEventWait(&pWDICtx->setPowerStateEvent,
11880 WDI_SET_POWER_STATE_TIMEOUT);
11881 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 {
11883 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11884 "WDI Init failed to wait on an event");
11885
Jeff Johnsone7245742012-09-05 17:12:55 -070011886 WDI_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011887 return VOS_STATUS_E_FAILURE;
11888 }
11889
11890 pWDICtx->bInBmps = eWLAN_PAL_TRUE;
11891
11892 enterBmpsReq.bssIdx = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx;
11893 enterBmpsReq.tbtt = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt;
11894 enterBmpsReq.dtimCount = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount;
11895 enterBmpsReq.dtimPeriod = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod;
11896
11897 // For CCX and 11R Roaming
11898 enterBmpsReq.rssiFilterPeriod = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod;
11899 enterBmpsReq.numBeaconPerRssiAverage = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage;
11900 enterBmpsReq.bRssiFilterEnable = pwdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable;
11901
11902 wpalMemoryCopy( pSendBuffer+usDataOffset,
11903 &enterBmpsReq,
11904 sizeof(enterBmpsReq));
11905
11906 pWDICtx->wdiReqStatusCB = pwdiEnterBmpsReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011907 pWDICtx->pReqStatusUserData = pwdiEnterBmpsReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011908
11909 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011910 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011911 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011912 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11913 wdiEnterBmpsRspCb, pEventData->pUserData, WDI_ENTER_BMPS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914}/*WDI_ProcessEnterBmpsReq*/
11915
11916/**
11917 @brief Process Exit BMPS Request function (called when Main FSM
11918 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011919
11920 @param pWDICtx: pointer to the WLAN DAL context
11921 pEventData: pointer to the event information structure
11922
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 @see
11924 @return Result of the function call
11925*/
11926WDI_Status
11927WDI_ProcessExitBmpsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011928(
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 WDI_ControlBlockType* pWDICtx,
11930 WDI_EventInfoType* pEventData
11931)
11932{
11933 WDI_ExitBmpsReqParamsType* pwdiExitBmpsReqParams = NULL;
11934 WDI_ExitBmpsRspCb wdiExitBmpsRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011935 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 wpt_uint16 usDataOffset = 0;
11937 wpt_uint16 usSendSize = 0;
11938 tHalExitBmpsReqParams exitBmpsReq;
11939 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
11940
11941 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011942 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070011943 -------------------------------------------------------------------------*/
11944 if (( NULL == pEventData ) ||
11945 ( NULL == (pwdiExitBmpsReqParams = (WDI_ExitBmpsReqParamsType*)pEventData->pEventData)) ||
11946 ( NULL == (wdiExitBmpsRspCb = (WDI_ExitBmpsRspCb)pEventData->pCBfnc)))
11947 {
11948 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11949 "%s: Invalid parameters", __FUNCTION__);
11950 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011951 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 }
11953
11954 /*-----------------------------------------------------------------------
11955 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070011956 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070011957 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011958 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_EXIT_BMPS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 sizeof(exitBmpsReq),
11960 &pSendBuffer, &usDataOffset, &usSendSize))||
11961 ( usSendSize < (usDataOffset + sizeof(exitBmpsReq) )))
11962 {
11963 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
11964 "Unable to get send buffer in Exit BMPS req %x %x %x",
11965 pEventData, pwdiExitBmpsReqParams, wdiExitBmpsRspCb);
11966 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070011967 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 }
11969 exitBmpsReq.sendDataNull = pwdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull;
11970
Jeff Johnsone7245742012-09-05 17:12:55 -070011971 exitBmpsReq.bssIdx = pwdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx;
11972
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 wpalMemoryCopy( pSendBuffer+usDataOffset,
11974 &exitBmpsReq,
11975 sizeof(exitBmpsReq));
11976
11977 pWDICtx->wdiReqStatusCB = pwdiExitBmpsReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070011978 pWDICtx->pReqStatusUserData = pwdiExitBmpsReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011979
11980 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070011981 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070011983 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
11984 wdiExitBmpsRspCb, pEventData->pUserData, WDI_EXIT_BMPS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070011985}/*WDI_ProcessExitBmpsReq*/
11986
11987/**
Jeff Johnsone7245742012-09-05 17:12:55 -070011988 @brief Process Enter UAPSD Request function (called when Main
Jeff Johnson295189b2012-06-20 16:38:30 -070011989 FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070011990
11991 @param pWDICtx: pointer to the WLAN DAL context
11992 pEventData: pointer to the event information structure
11993
Jeff Johnson295189b2012-06-20 16:38:30 -070011994 @see
11995 @return Result of the function call
11996*/
11997WDI_Status
11998WDI_ProcessEnterUapsdReq
Jeff Johnsone7245742012-09-05 17:12:55 -070011999(
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 WDI_ControlBlockType* pWDICtx,
12001 WDI_EventInfoType* pEventData
12002)
12003{
12004 WDI_EnterUapsdReqParamsType* pwdiEnterUapsdReqParams = NULL;
12005 WDI_EnterUapsdRspCb wdiEnterUapsdRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012006 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012007 wpt_uint16 usDataOffset = 0;
12008 wpt_uint16 usSendSize = 0;
12009 tUapsdReqParams enterUapsdReq;
12010 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12011
12012 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012013 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 -------------------------------------------------------------------------*/
12015 if (( NULL == pEventData ) ||
12016 ( NULL == (pwdiEnterUapsdReqParams = (WDI_EnterUapsdReqParamsType*)pEventData->pEventData)) ||
12017 ( NULL == (wdiEnterUapsdRspCb = (WDI_EnterUapsdRspCb)pEventData->pCBfnc)))
12018 {
12019 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12020 "%s: Invalid parameters", __FUNCTION__);
12021 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012022 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012023 }
12024
12025 /*-----------------------------------------------------------------------
12026 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012027 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012029 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_ENTER_UAPSD_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012030 sizeof(enterUapsdReq),
12031 &pSendBuffer, &usDataOffset, &usSendSize))||
12032 ( usSendSize < (usDataOffset + sizeof(enterUapsdReq) )))
12033 {
12034 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12035 "Unable to get send buffer in Enter UAPSD req %x %x %x",
12036 pEventData, pwdiEnterUapsdReqParams, wdiEnterUapsdRspCb);
12037 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012038 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 }
12040
12041 enterUapsdReq.beDeliveryEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled;
12042 enterUapsdReq.beTriggerEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled;
12043 enterUapsdReq.bkDeliveryEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled;
12044 enterUapsdReq.bkTriggerEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled;
12045 enterUapsdReq.viDeliveryEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled;
12046 enterUapsdReq.viTriggerEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled;
12047 enterUapsdReq.voDeliveryEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled;
12048 enterUapsdReq.voTriggerEnabled = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070012049 enterUapsdReq.bssIdx = pwdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012050
Jeff Johnsone7245742012-09-05 17:12:55 -070012051 wpalMemoryCopy( pSendBuffer+usDataOffset,
12052 &enterUapsdReq,
12053 sizeof(enterUapsdReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070012054
12055 pWDICtx->wdiReqStatusCB = pwdiEnterUapsdReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012056 pWDICtx->pReqStatusUserData = pwdiEnterUapsdReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012057
12058 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012059 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012061 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12062 wdiEnterUapsdRspCb, pEventData->pUserData, WDI_ENTER_UAPSD_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012063}/*WDI_ProcessEnterUapsdReq*/
12064
12065/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012066 @brief Process Exit UAPSD Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012068
12069 @param pWDICtx: pointer to the WLAN DAL context
12070 pEventData: pointer to the event information structure
12071
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 @see
12073 @return Result of the function call
12074*/
12075WDI_Status
12076WDI_ProcessExitUapsdReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012077(
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 WDI_ControlBlockType* pWDICtx,
12079 WDI_EventInfoType* pEventData
12080)
12081{
12082 WDI_ExitUapsdRspCb wdiExitUapsdRspCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012083 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 wpt_uint16 usDataOffset = 0;
12085 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012086 WDI_ExitUapsdReqParamsType *pExitUapsdparams;
12087 wpt_uint8 bssIdx = 0;
12088
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12090
12091 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012092 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 -------------------------------------------------------------------------*/
12094 if (( NULL == pEventData ) ||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012095 ( NULL == (pExitUapsdparams = (WDI_ExitUapsdReqParamsType *)pEventData->pEventData)) ||
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 ( NULL == (wdiExitUapsdRspCb = (WDI_ExitUapsdRspCb)pEventData->pCBfnc)))
12097 {
12098 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12099 "%s: Invalid parameters", __FUNCTION__);
12100 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012101 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 }
12103
12104 /*-----------------------------------------------------------------------
12105 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012106 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012108 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_EXIT_UAPSD_REQ,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012109 sizeof(wpt_uint8),
Jeff Johnson295189b2012-06-20 16:38:30 -070012110 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012111 ( usSendSize < (usDataOffset + sizeof(wpt_uint8))))
Jeff Johnson295189b2012-06-20 16:38:30 -070012112 {
12113 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12114 "Unable to get send buffer in Exit UAPSD req %x %x",
12115 pEventData, wdiExitUapsdRspCb);
12116 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012117 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012118 }
12119
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012120 bssIdx = pExitUapsdparams->wdiExitUapsdInfo.bssIdx;
12121
12122 wpalMemoryCopy( pSendBuffer+usDataOffset,
12123 &bssIdx,
12124 sizeof(wpt_uint8));
12125
12126 pWDICtx->wdiReqStatusCB = pExitUapsdparams->wdiReqStatusCB;
12127 pWDICtx->pReqStatusUserData = pExitUapsdparams->pUserData;
12128
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012130 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012132 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12133 wdiExitUapsdRspCb, pEventData->pUserData, WDI_EXIT_UAPSD_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012134}/*WDI_ProcessExitUapsdReq*/
12135
12136/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012137 @brief Process Set UAPSD params Request function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012139
12140 @param pWDICtx: pointer to the WLAN DAL context
12141 pEventData: pointer to the event information structure
12142
Jeff Johnson295189b2012-06-20 16:38:30 -070012143 @see
12144 @return Result of the function call
12145*/
12146WDI_Status
12147WDI_ProcessSetUapsdAcParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012148(
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 WDI_ControlBlockType* pWDICtx,
12150 WDI_EventInfoType* pEventData
12151)
12152{
12153 WDI_SetUapsdAcParamsReqParamsType* pwdiSetUapsdAcParams = NULL;
12154 WDI_SetUapsdAcParamsCb wdiSetUapsdAcParamsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012155 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 wpt_uint16 usDataOffset = 0;
12157 wpt_uint16 usSendSize = 0;
12158 tUapsdInfo uapsdAcParamsReq;
12159 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12160
12161 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012162 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 -------------------------------------------------------------------------*/
12164 if (( NULL == pEventData ) ||
12165 ( NULL == (pwdiSetUapsdAcParams = (WDI_SetUapsdAcParamsReqParamsType*)pEventData->pEventData)) ||
12166 ( NULL == (wdiSetUapsdAcParamsCb = (WDI_SetUapsdAcParamsCb)pEventData->pCBfnc)))
12167 {
12168 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12169 "%s: Invalid parameters", __FUNCTION__);
12170 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012171 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 }
12173
12174 /*-----------------------------------------------------------------------
12175 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012176 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012178 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_UAPSD_PARAM_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 sizeof(uapsdAcParamsReq),
12180 &pSendBuffer, &usDataOffset, &usSendSize))||
12181 ( usSendSize < (usDataOffset + sizeof(uapsdAcParamsReq) )))
12182 {
12183 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12184 "Unable to get send buffer in Set UAPSD params req %x %x %x",
12185 pEventData, pwdiSetUapsdAcParams, wdiSetUapsdAcParamsCb);
12186 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012187 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012188 }
12189
12190 uapsdAcParamsReq.ac = pwdiSetUapsdAcParams->wdiUapsdInfo.ucAc;
12191 uapsdAcParamsReq.staidx = pwdiSetUapsdAcParams->wdiUapsdInfo.ucSTAIdx;
12192 uapsdAcParamsReq.up = pwdiSetUapsdAcParams->wdiUapsdInfo.ucUp;
12193 uapsdAcParamsReq.delayInterval = pwdiSetUapsdAcParams->wdiUapsdInfo.uDelayInterval;
12194 uapsdAcParamsReq.srvInterval = pwdiSetUapsdAcParams->wdiUapsdInfo.uSrvInterval;
12195 uapsdAcParamsReq.susInterval = pwdiSetUapsdAcParams->wdiUapsdInfo.uSusInterval;
12196
Jeff Johnsone7245742012-09-05 17:12:55 -070012197 wpalMemoryCopy( pSendBuffer+usDataOffset,
12198 &uapsdAcParamsReq,
12199 sizeof(uapsdAcParamsReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070012200
12201 pWDICtx->wdiReqStatusCB = pwdiSetUapsdAcParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012202 pWDICtx->pReqStatusUserData = pwdiSetUapsdAcParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012203
12204 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012205 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012206 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012207 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12208 wdiSetUapsdAcParamsCb, pEventData->pUserData, WDI_SET_UAPSD_PARAM_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012209}/*WDI_ProcessSetUapsdAcParamsReq*/
12210
12211/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012212 @brief Process update UAPSD params Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012214
12215 @param pWDICtx: pointer to the WLAN DAL context
12216 pEventData: pointer to the event information structure
12217
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 @see
12219 @return Result of the function call
12220*/
12221WDI_Status
12222WDI_ProcessUpdateUapsdParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012223(
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 WDI_ControlBlockType* pWDICtx,
12225 WDI_EventInfoType* pEventData
12226)
12227{
12228 WDI_UpdateUapsdReqParamsType* pwdiUpdateUapsdReqParams = NULL;
12229 WDI_UpdateUapsdParamsCb wdiUpdateUapsdParamsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012230 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012231 wpt_uint16 usDataOffset = 0;
12232 wpt_uint16 usSendSize = 0;
12233 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12234
12235 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012236 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012237 -------------------------------------------------------------------------*/
12238 if (( NULL == pEventData ) ||
12239 ( NULL == (pwdiUpdateUapsdReqParams = (WDI_UpdateUapsdReqParamsType*)pEventData->pEventData)) ||
12240 ( NULL == (wdiUpdateUapsdParamsCb = (WDI_UpdateUapsdParamsCb)pEventData->pCBfnc)))
12241 {
12242 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12243 "%s: Invalid parameters", __FUNCTION__);
12244 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012245 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 }
12247
12248 /*-----------------------------------------------------------------------
12249 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012250 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012251 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012252 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_UAPSD_PARAM_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 sizeof(pwdiUpdateUapsdReqParams->wdiUpdateUapsdInfo),
12254 &pSendBuffer, &usDataOffset, &usSendSize))||
12255 ( usSendSize < (usDataOffset + sizeof(pwdiUpdateUapsdReqParams->wdiUpdateUapsdInfo) )))
12256 {
12257 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12258 "Unable to get send buffer in Update UAPSD params req %x %x %x",
12259 pEventData, pwdiUpdateUapsdReqParams, wdiUpdateUapsdParamsCb);
12260 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012261 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 }
12263
Jeff Johnsone7245742012-09-05 17:12:55 -070012264 wpalMemoryCopy( pSendBuffer+usDataOffset,
12265 &pwdiUpdateUapsdReqParams->wdiUpdateUapsdInfo,
12266 sizeof(pwdiUpdateUapsdReqParams->wdiUpdateUapsdInfo));
Jeff Johnson295189b2012-06-20 16:38:30 -070012267
12268 pWDICtx->wdiReqStatusCB = pwdiUpdateUapsdReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012269 pWDICtx->pReqStatusUserData = pwdiUpdateUapsdReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012270
12271 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012272 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012274 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12275 wdiUpdateUapsdParamsCb, pEventData->pUserData, WDI_UPDATE_UAPSD_PARAM_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012276}/*WDI_ProcessUpdateUapsdParamsReq*/
12277
12278/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012279 @brief Process Configure RXP filter Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012281
12282 @param pWDICtx: pointer to the WLAN DAL context
12283 pEventData: pointer to the event information structure
12284
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 @see
12286 @return Result of the function call
12287*/
12288WDI_Status
12289WDI_ProcessConfigureRxpFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012290(
Jeff Johnson295189b2012-06-20 16:38:30 -070012291 WDI_ControlBlockType* pWDICtx,
12292 WDI_EventInfoType* pEventData
12293)
12294{
12295 WDI_ConfigureRxpFilterReqParamsType* pwdiRxpFilterParams = NULL;
12296 WDI_ConfigureRxpFilterCb wdiConfigureRxpFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012297 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 wpt_uint16 usDataOffset = 0;
12299 wpt_uint16 usSendSize = 0;
12300 tHalConfigureRxpFilterReqParams halRxpFilterParams;
12301
12302 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12303
12304 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012305 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012306 -------------------------------------------------------------------------*/
12307 if (( NULL == pEventData ) ||
12308 ( NULL == (pwdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType*)pEventData->pEventData)) ||
12309 ( NULL == (wdiConfigureRxpFilterCb = (WDI_ConfigureRxpFilterCb)pEventData->pCBfnc)))
12310 {
12311 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12312 "%s: Invalid parameters", __FUNCTION__);
12313 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012314 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 }
12316
12317 /*-----------------------------------------------------------------------
12318 Get message buffer
12319 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012320 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CONFIGURE_RXP_FILTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 sizeof(halRxpFilterParams),
12322 &pSendBuffer, &usDataOffset, &usSendSize))||
12323 ( usSendSize < (usDataOffset + sizeof(halRxpFilterParams) )))
12324 {
12325 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12326 "Unable to get send buffer in Set UAPSD params req %x %x %x",
12327 pEventData, pwdiRxpFilterParams, wdiConfigureRxpFilterCb);
12328 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012329 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 }
12331
Jeff Johnsone7245742012-09-05 17:12:55 -070012332 halRxpFilterParams.setMcstBcstFilterSetting =
Jeff Johnson295189b2012-06-20 16:38:30 -070012333 pwdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting;
Jeff Johnsone7245742012-09-05 17:12:55 -070012334 halRxpFilterParams.setMcstBcstFilter =
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 pwdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter;
12336
Jeff Johnsone7245742012-09-05 17:12:55 -070012337 wpalMemoryCopy( pSendBuffer+usDataOffset,
12338 &halRxpFilterParams,
12339 sizeof(halRxpFilterParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070012340
12341 pWDICtx->wdiReqStatusCB = pwdiRxpFilterParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012342 pWDICtx->pReqStatusUserData = pwdiRxpFilterParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012343
12344 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012345 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012347 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12348 wdiConfigureRxpFilterCb, pEventData->pUserData, WDI_CONFIGURE_RXP_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012349}/*WDI_ProcessConfigureRxpFilterReq*/
12350
12351/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012352 @brief Process set beacon filter Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012354
12355 @param pWDICtx: pointer to the WLAN DAL context
12356 pEventData: pointer to the event information structure
12357
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 @see
12359 @return Result of the function call
12360*/
12361WDI_Status
12362WDI_ProcessSetBeaconFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012363(
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 WDI_ControlBlockType* pWDICtx,
12365 WDI_EventInfoType* pEventData
12366)
12367{
12368 WDI_BeaconFilterReqParamsType* pwdiBeaconFilterParams = NULL;
12369 WDI_SetBeaconFilterCb wdiBeaconFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012370 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 wpt_uint16 usDataOffset = 0;
12372 wpt_uint16 usSendSize = 0;
12373 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12374
12375 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012376 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 -------------------------------------------------------------------------*/
12378 if (( NULL == pEventData ) ||
12379 ( NULL == (pwdiBeaconFilterParams = (WDI_BeaconFilterReqParamsType*)pEventData->pEventData)) ||
12380 ( NULL == (wdiBeaconFilterCb = (WDI_SetBeaconFilterCb)pEventData->pCBfnc)))
12381 {
12382 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12383 "%s: Invalid parameters", __FUNCTION__);
12384 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012385 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 }
12387
12388 /*-----------------------------------------------------------------------
12389 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012390 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012392 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_BEACON_FILTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo) + pwdiBeaconFilterParams->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe),
12394 &pSendBuffer, &usDataOffset, &usSendSize))||
12395 ( usSendSize < (usDataOffset + sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo) )))
12396 {
12397 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12398 "Unable to get send buffer in Set beacon filter req %x %x %x",
12399 pEventData, pwdiBeaconFilterParams, wdiBeaconFilterCb);
12400 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012401 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012402 }
12403
Jeff Johnsone7245742012-09-05 17:12:55 -070012404 wpalMemoryCopy( pSendBuffer+usDataOffset,
12405 &pwdiBeaconFilterParams->wdiBeaconFilterInfo,
12406 sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo));
12407 wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo),
12408 &pwdiBeaconFilterParams->aFilters[0],
12409 pwdiBeaconFilterParams->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe));
Jeff Johnson295189b2012-06-20 16:38:30 -070012410
12411 pWDICtx->wdiReqStatusCB = pwdiBeaconFilterParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012412 pWDICtx->pReqStatusUserData = pwdiBeaconFilterParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012413
12414 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012415 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012417 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12418 wdiBeaconFilterCb, pEventData->pUserData, WDI_SET_BEACON_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012419}/*WDI_ProcessSetBeaconFilterReq*/
12420
12421/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012422 @brief Process remove beacon filter Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012424
12425 @param pWDICtx: pointer to the WLAN DAL context
12426 pEventData: pointer to the event information structure
12427
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 @see
12429 @return Result of the function call
12430*/
12431WDI_Status
12432WDI_ProcessRemBeaconFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012433(
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 WDI_ControlBlockType* pWDICtx,
12435 WDI_EventInfoType* pEventData
12436)
12437{
12438 WDI_RemBeaconFilterReqParamsType* pwdiBeaconFilterParams = NULL;
12439 WDI_RemBeaconFilterCb wdiBeaconFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012440 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012441 wpt_uint16 usDataOffset = 0;
12442 wpt_uint16 usSendSize = 0;
12443 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12444
12445 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012446 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012447 -------------------------------------------------------------------------*/
12448 if (( NULL == pEventData ) ||
12449 ( NULL == (pwdiBeaconFilterParams = (WDI_RemBeaconFilterReqParamsType*)pEventData->pEventData)) ||
12450 ( NULL == (wdiBeaconFilterCb = (WDI_RemBeaconFilterCb)pEventData->pCBfnc)))
12451 {
12452 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12453 "%s: Invalid parameters", __FUNCTION__);
12454 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012455 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 }
12457
12458 /*-----------------------------------------------------------------------
12459 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012460 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012461 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012462 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_REM_BEACON_FILTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012463 sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo),
12464 &pSendBuffer, &usDataOffset, &usSendSize))||
12465 ( usSendSize < (usDataOffset + sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo) )))
12466 {
12467 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12468 "Unable to get send buffer in remove beacon filter req %x %x %x",
12469 pEventData, pwdiBeaconFilterParams, wdiBeaconFilterCb);
12470 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012471 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012472 }
12473
Jeff Johnsone7245742012-09-05 17:12:55 -070012474 wpalMemoryCopy( pSendBuffer+usDataOffset,
12475 &pwdiBeaconFilterParams->wdiBeaconFilterInfo,
12476 sizeof(pwdiBeaconFilterParams->wdiBeaconFilterInfo));
Jeff Johnson295189b2012-06-20 16:38:30 -070012477
12478 pWDICtx->wdiReqStatusCB = pwdiBeaconFilterParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012479 pWDICtx->pReqStatusUserData = pwdiBeaconFilterParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012480
12481 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012482 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012484 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12485 wdiBeaconFilterCb, pEventData->pUserData, WDI_REM_BEACON_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012486}
12487
12488/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012489 @brief Process set RSSI thresholds Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012490 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012491
12492 @param pWDICtx: pointer to the WLAN DAL context
12493 pEventData: pointer to the event information structure
12494
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 @see
12496 @return Result of the function call
12497*/
12498WDI_Status
12499WDI_ProcessSetRSSIThresholdsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012500(
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 WDI_ControlBlockType* pWDICtx,
12502 WDI_EventInfoType* pEventData
12503)
12504{
12505 WDI_SetRSSIThresholdsReqParamsType* pwdiRSSIThresholdsParams = NULL;
12506 WDI_SetRSSIThresholdsCb wdiRSSIThresholdsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012507 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 wpt_uint16 usDataOffset = 0;
12509 wpt_uint16 usSendSize = 0;
12510 tHalRSSIThresholds rssiThresholdsReq;
12511 WDI_Status ret_status = 0;
12512 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12513
12514 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012515 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 -------------------------------------------------------------------------*/
12517 if (( NULL == pEventData ) ||
12518 ( NULL == (pwdiRSSIThresholdsParams = (WDI_SetRSSIThresholdsReqParamsType*)pEventData->pEventData)) ||
12519 ( NULL == (wdiRSSIThresholdsCb = (WDI_SetRSSIThresholdsCb)pEventData->pCBfnc)))
12520 {
12521 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12522 "%s: Invalid parameters", __FUNCTION__);
12523 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012524 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 }
12526
12527 /*-----------------------------------------------------------------------
12528 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012529 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012531 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_RSSI_THRESHOLDS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 sizeof(rssiThresholdsReq),
12533 &pSendBuffer, &usDataOffset, &usSendSize))||
12534 ( usSendSize < (usDataOffset + sizeof(rssiThresholdsReq) )))
12535 {
12536 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12537 "Unable to get send buffer in remove beacon filter req %x %x %x",
12538 pEventData, pwdiRSSIThresholdsParams, wdiRSSIThresholdsCb);
12539 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012540 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012541 }
12542
Jeff Johnsone7245742012-09-05 17:12:55 -070012543 rssiThresholdsReq.bReserved10 =
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bReserved10;
Jeff Johnsone7245742012-09-05 17:12:55 -070012545 rssiThresholdsReq.bRssiThres1NegNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012546 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres1NegNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012547 rssiThresholdsReq.bRssiThres1PosNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres1PosNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012549 rssiThresholdsReq.bRssiThres2NegNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012550 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres2NegNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012551 rssiThresholdsReq.bRssiThres2PosNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012552 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres2PosNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012553 rssiThresholdsReq.bRssiThres3NegNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres3NegNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012555 rssiThresholdsReq.bRssiThres3PosNotify =
Jeff Johnson295189b2012-06-20 16:38:30 -070012556 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.bRssiThres3PosNotify;
Jeff Johnsone7245742012-09-05 17:12:55 -070012557 rssiThresholdsReq.ucRssiThreshold1 =
Jeff Johnson295189b2012-06-20 16:38:30 -070012558 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.ucRssiThreshold1;
Jeff Johnsone7245742012-09-05 17:12:55 -070012559 rssiThresholdsReq.ucRssiThreshold2 =
Jeff Johnson295189b2012-06-20 16:38:30 -070012560 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.ucRssiThreshold2;
Jeff Johnsone7245742012-09-05 17:12:55 -070012561 rssiThresholdsReq.ucRssiThreshold3 =
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 pwdiRSSIThresholdsParams->wdiRSSIThresholdsInfo.ucRssiThreshold3;
12563
Jeff Johnsone7245742012-09-05 17:12:55 -070012564 wpalMemoryCopy( pSendBuffer+usDataOffset,
12565 &rssiThresholdsReq,
12566 sizeof(rssiThresholdsReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070012567
12568 pWDICtx->wdiReqStatusCB = pwdiRSSIThresholdsParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012569 pWDICtx->pReqStatusUserData = pwdiRSSIThresholdsParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012570
12571 /*-------------------------------------------------------------------------
12572 Send Set threshold req to HAL
12573 -------------------------------------------------------------------------*/
12574 if ((ret_status = WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12575 wdiRSSIThresholdsCb, pEventData->pUserData, WDI_SET_RSSI_THRESHOLDS_RESP)) == WDI_STATUS_SUCCESS)
12576 {
12577 // When we are in idle state WDI_STARTED_ST and we receive indication for threshold
12578 // req. Then as a result of processing the threshold cross ind, we trigger
12579 // a Set threshold req, then we need to indicate to WDI that it needs to
12580 // go to busy state as a result of the indication as we sent a req in the
12581 // same WDI context.
12582 // Hence expected state transition is to busy.
12583 pWDICtx->ucExpectedStateTransition = WDI_BUSY_ST;
12584 }
12585
12586 return ret_status;
12587}
12588
12589/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012590 @brief Process set RSSI thresholds Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012591 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012592
12593 @param pWDICtx: pointer to the WLAN DAL context
12594 pEventData: pointer to the event information structure
12595
Jeff Johnson295189b2012-06-20 16:38:30 -070012596 @see
12597 @return Result of the function call
12598*/
12599WDI_Status
12600WDI_ProcessHostOffloadReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012601(
Jeff Johnson295189b2012-06-20 16:38:30 -070012602 WDI_ControlBlockType* pWDICtx,
12603 WDI_EventInfoType* pEventData
12604)
12605{
12606 WDI_HostOffloadReqParamsType* pwdiHostOffloadParams = NULL;
12607 WDI_HostOffloadCb wdiHostOffloadCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012608 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012609 wpt_uint16 usDataOffset = 0;
12610 wpt_uint16 usSendSize = 0;
12611 tHalHostOffloadReq hostOffloadParams;
12612 tHalNSOffloadParams nsOffloadParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012613 wpt_uint8 ucCurrentBSSSesIdx = 0;
12614 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012615
12616 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12617
12618 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012619 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012620 -------------------------------------------------------------------------*/
12621 if (( NULL == pEventData ) ||
12622 ( NULL == (pwdiHostOffloadParams = (WDI_HostOffloadReqParamsType*)pEventData->pEventData)) ||
12623 ( NULL == (wdiHostOffloadCb = (WDI_HostOffloadCb)pEventData->pCBfnc)))
12624 {
12625 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12626 "%s: Invalid parameters", __FUNCTION__);
12627 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012628 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 }
12630
12631 /*-----------------------------------------------------------------------
12632 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012633 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012634 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012635 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_HOST_OFFLOAD_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 sizeof(hostOffloadParams)+sizeof(nsOffloadParams),
12637 &pSendBuffer, &usDataOffset, &usSendSize))||
12638 ( usSendSize < (usDataOffset + sizeof(hostOffloadParams) + sizeof(nsOffloadParams) )))
12639 {
12640 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12641 "Unable to get send buffer in host offload req %x %x %x",
12642 pEventData, pwdiHostOffloadParams, wdiHostOffloadCb);
12643 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012644 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 }
12646
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012647 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
12648 pwdiHostOffloadParams->wdiHostOffloadInfo.bssId,
12649 &pBSSSes);
12650 if ( NULL == pBSSSes )
12651 {
12652 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
12653 " %s : Association for this BSSID does not exist",__FUNCTION__);
12654 return WDI_STATUS_E_FAILURE;
12655 }
12656
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 hostOffloadParams.offloadType = pwdiHostOffloadParams->wdiHostOffloadInfo.ucOffloadType;
12658 hostOffloadParams.enableOrDisable = pwdiHostOffloadParams->wdiHostOffloadInfo.ucEnableOrDisable;
Jeff Johnsone7245742012-09-05 17:12:55 -070012659
Jeff Johnson295189b2012-06-20 16:38:30 -070012660 if( HAL_IPV4_ARP_REPLY_OFFLOAD == hostOffloadParams.offloadType )
12661 {
12662 // ARP Offload
12663 wpalMemoryCopy(hostOffloadParams.params.hostIpv4Addr,
12664 pwdiHostOffloadParams->wdiHostOffloadInfo.params.aHostIpv4Addr,
12665 4);
12666 }
12667 else
12668 {
12669 // NS Offload
12670 wpalMemoryCopy(hostOffloadParams.params.hostIpv6Addr,
12671 pwdiHostOffloadParams->wdiHostOffloadInfo.params.aHostIpv6Addr,
12672 16);
12673
12674#ifdef WLAN_NS_OFFLOAD
12675 // copy pwdiHostOffloadParams->wdiNsOffloadParams into nsOffloadParams
12676 wpalMemoryCopy(nsOffloadParams.srcIPv6Addr,
12677 pwdiHostOffloadParams->wdiNsOffloadParams.srcIPv6Addr,
12678 16);
12679 wpalMemoryCopy(nsOffloadParams.selfIPv6Addr,
12680 pwdiHostOffloadParams->wdiNsOffloadParams.selfIPv6Addr,
12681 16);
12682 wpalMemoryCopy(nsOffloadParams.targetIPv6Addr1,
12683 pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr1,
12684 16);
12685 wpalMemoryCopy(nsOffloadParams.targetIPv6Addr2,
12686 pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr2,
12687 16);
12688 wpalMemoryCopy(nsOffloadParams.selfMacAddr,
12689 pwdiHostOffloadParams->wdiNsOffloadParams.selfMacAddr,
12690 6);
12691 nsOffloadParams.srcIPv6AddrValid = pwdiHostOffloadParams->wdiNsOffloadParams.srcIPv6AddrValid;
12692 nsOffloadParams.targetIPv6Addr1Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr1Valid;
12693 nsOffloadParams.targetIPv6Addr2Valid = pwdiHostOffloadParams->wdiNsOffloadParams.targetIPv6Addr2Valid;
Jeff Johnsone7245742012-09-05 17:12:55 -070012694
Jeff Johnson295189b2012-06-20 16:38:30 -070012695#endif // WLAN_NS_OFFLOAD
12696 }
12697
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012698 nsOffloadParams.bssIdx = pBSSSes->ucBSSIdx;
12699
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 // copy hostOffloadParams into pSendBuffer
12701 wpalMemoryCopy( pSendBuffer+usDataOffset,
12702 &hostOffloadParams,
12703 sizeof(hostOffloadParams));
12704
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012705 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION) )
Jeff Johnson295189b2012-06-20 16:38:30 -070012706 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012707 // copy nsOffloadParams into pSendBuffer
12708 wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(hostOffloadParams),
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 &nsOffloadParams,
12710 sizeof(nsOffloadParams));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012711 }
12712 else
12713 {
12714#ifdef WLAN_NS_OFFLOAD
12715 if( HAL_IPV6_NS_OFFLOAD == hostOffloadParams.offloadType )
12716 {
12717 // copy nsOffloadParams into pSendBuffer
12718 wpalMemoryCopy( pSendBuffer+usDataOffset+sizeof(hostOffloadParams),
12719 &nsOffloadParams,
12720 sizeof(nsOffloadParams));
12721 }
12722#endif
12723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012724
12725 pWDICtx->wdiReqStatusCB = pwdiHostOffloadParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012726 pWDICtx->pReqStatusUserData = pwdiHostOffloadParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012727
12728 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012729 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012731 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12732 wdiHostOffloadCb, pEventData->pUserData, WDI_HOST_OFFLOAD_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012733}/*WDI_ProcessHostOffloadReq*/
12734
12735/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012736 @brief Process Keep Alive Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012737 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012738
12739 @param pWDICtx: pointer to the WLAN DAL context
12740 pEventData: pointer to the event information structure
12741
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 @see
12743 @return Result of the function call
12744*/
12745WDI_Status
12746WDI_ProcessKeepAliveReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012747(
Jeff Johnson295189b2012-06-20 16:38:30 -070012748 WDI_ControlBlockType* pWDICtx,
12749 WDI_EventInfoType* pEventData
12750)
12751{
12752 WDI_KeepAliveReqParamsType* pwdiKeepAliveParams = NULL;
12753 WDI_KeepAliveCb wdiKeepAliveCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012754 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012755 wpt_uint16 usDataOffset = 0;
12756 wpt_uint16 usSendSize = 0;
12757 tHalKeepAliveReq keepAliveReq;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012758 wpt_uint8 ucCurrentBSSSesIdx = 0;
12759 WDI_BSSSessionType* pBSSSes = NULL;
12760
Jeff Johnson295189b2012-06-20 16:38:30 -070012761 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12762
12763 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012764 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012765 -------------------------------------------------------------------------*/
12766 if (( NULL == pEventData ) ||
12767 ( NULL == (pwdiKeepAliveParams = (WDI_KeepAliveReqParamsType*)pEventData->pEventData)) ||
12768 ( NULL == (wdiKeepAliveCb = (WDI_KeepAliveCb)pEventData->pCBfnc)))
12769 {
12770 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
12771 "Invalid parameters in Keep Alive req");
12772 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012773 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012774 }
12775
12776 /*-----------------------------------------------------------------------
12777 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012778 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012779 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012780 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_KEEP_ALIVE_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012781 sizeof(keepAliveReq),
12782 &pSendBuffer, &usDataOffset, &usSendSize))||
12783 ( usSendSize < (usDataOffset + sizeof(keepAliveReq) )))
12784 {
12785 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
12786 "Unable to get send buffer in keep alive req %x %x %x",
12787 pEventData, pwdiKeepAliveParams, wdiKeepAliveCb);
12788 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012789 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012790 }
12791
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012792 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
12793 pwdiKeepAliveParams->wdiKeepAliveInfo.bssId,
12794 &pBSSSes);
12795 if ( NULL == pBSSSes )
12796 {
12797 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
12798 " %s : Association for this BSSID does not exist",__FUNCTION__);
12799 return WDI_STATUS_E_FAILURE;
12800 }
12801
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 keepAliveReq.packetType = pwdiKeepAliveParams->wdiKeepAliveInfo.ucPacketType;
12803 keepAliveReq.timePeriod = pwdiKeepAliveParams->wdiKeepAliveInfo.ucTimePeriod;
12804
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012805 keepAliveReq.bssIdx = pBSSSes->ucBSSIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070012806
Jeff Johnson295189b2012-06-20 16:38:30 -070012807 if(pwdiKeepAliveParams->wdiKeepAliveInfo.ucPacketType == 2)
12808 {
12809 wpalMemoryCopy(keepAliveReq.hostIpv4Addr,
12810 pwdiKeepAliveParams->wdiKeepAliveInfo.aHostIpv4Addr,
12811 HAL_IPV4_ADDR_LEN);
12812 wpalMemoryCopy(keepAliveReq.destIpv4Addr,
12813 pwdiKeepAliveParams->wdiKeepAliveInfo.aDestIpv4Addr,
Jeff Johnsone7245742012-09-05 17:12:55 -070012814 HAL_IPV4_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -070012815 wpalMemoryCopy(keepAliveReq.destMacAddr,
12816 pwdiKeepAliveParams->wdiKeepAliveInfo.aDestMacAddr,
12817 HAL_MAC_ADDR_LEN);
12818 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012819
12820 wpalMemoryCopy( pSendBuffer+usDataOffset,
12821 &keepAliveReq,
12822 sizeof(keepAliveReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070012823
12824 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
12825 "Process keep alive req %d",sizeof(keepAliveReq));
12826
12827 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
12828 "Process keep alive req time period %d",keepAliveReq.timePeriod);
12829
12830 pWDICtx->wdiReqStatusCB = pwdiKeepAliveParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012831 pWDICtx->pReqStatusUserData = pwdiKeepAliveParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012832
12833 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
12834 "Sending keep alive req to HAL");
12835
12836 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012837 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012839 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12840 wdiKeepAliveCb, pEventData->pUserData, WDI_KEEP_ALIVE_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012841}/*WDI_ProcessKeepAliveReq*/
12842
12843
12844/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012845 @brief Process Wowl add bc ptrn Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012847
12848 @param pWDICtx: pointer to the WLAN DAL context
12849 pEventData: pointer to the event information structure
12850
Jeff Johnson295189b2012-06-20 16:38:30 -070012851 @see
12852 @return Result of the function call
12853*/
12854WDI_Status
12855WDI_ProcessWowlAddBcPtrnReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012856(
Jeff Johnson295189b2012-06-20 16:38:30 -070012857 WDI_ControlBlockType* pWDICtx,
12858 WDI_EventInfoType* pEventData
12859)
12860{
12861 WDI_WowlAddBcPtrnReqParamsType* pwdiWowlAddBcPtrnParams = NULL;
12862 WDI_WowlAddBcPtrnCb wdiWowlAddBcPtrnCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012863 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012864 wpt_uint16 usDataOffset = 0;
12865 wpt_uint16 usSendSize = 0;
12866 tHalWowlAddBcastPtrn wowlAddBcPtrnReq;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012867 wpt_uint8 ucCurrentBSSSesIdx = 0;
12868 WDI_BSSSessionType* pBSSSes = NULL;
12869
Jeff Johnson295189b2012-06-20 16:38:30 -070012870 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12871
12872 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012873 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 -------------------------------------------------------------------------*/
12875 if (( NULL == pEventData ) ||
12876 ( NULL == (pwdiWowlAddBcPtrnParams = (WDI_WowlAddBcPtrnReqParamsType*)pEventData->pEventData)) ||
12877 ( NULL == (wdiWowlAddBcPtrnCb = (WDI_WowlAddBcPtrnCb)pEventData->pCBfnc)))
12878 {
12879 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12880 "%s: Invalid parameters", __FUNCTION__);
12881 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012882 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012883 }
12884
12885 /*-----------------------------------------------------------------------
12886 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070012887 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012889 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_WOWL_ADD_BC_PTRN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 sizeof(wowlAddBcPtrnReq),
12891 &pSendBuffer, &usDataOffset, &usSendSize))||
12892 ( usSendSize < (usDataOffset + sizeof(wowlAddBcPtrnReq) )))
12893 {
12894 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12895 "Unable to get send buffer in Wowl add bc ptrn req %x %x %x",
12896 pEventData, pwdiWowlAddBcPtrnParams, wdiWowlAddBcPtrnCb);
12897 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012898 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 }
12900
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012901 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
12902 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.bssId,
12903 &pBSSSes);
12904 if ( NULL == pBSSSes )
12905 {
12906 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
12907 " %s : Association for this BSSID does not exist",__FUNCTION__);
12908 return WDI_STATUS_E_FAILURE;
12909 }
12910
Jeff Johnsone7245742012-09-05 17:12:55 -070012911 wowlAddBcPtrnReq.ucPatternId =
Jeff Johnson295189b2012-06-20 16:38:30 -070012912 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternId;
Jeff Johnsone7245742012-09-05 17:12:55 -070012913 wowlAddBcPtrnReq.ucPatternByteOffset =
Jeff Johnson295189b2012-06-20 16:38:30 -070012914 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternByteOffset;
Jeff Johnsone7245742012-09-05 17:12:55 -070012915 wowlAddBcPtrnReq.ucPatternMaskSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070012916 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMaskSize;
Jeff Johnsone7245742012-09-05 17:12:55 -070012917 wowlAddBcPtrnReq.ucPatternSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070012918 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternSize;
12919
12920 if (pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternSize <= HAL_WOWL_BCAST_PATTERN_MAX_SIZE)
12921 {
12922 wpalMemoryCopy(wowlAddBcPtrnReq.ucPattern,
12923 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPattern,
12924 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternSize);
12925 wpalMemoryCopy(wowlAddBcPtrnReq.ucPatternMask,
12926 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMask,
12927 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12928 }
12929 else
12930 {
12931 wpalMemoryCopy(wowlAddBcPtrnReq.ucPattern,
12932 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPattern,
12933 HAL_WOWL_BCAST_PATTERN_MAX_SIZE);
12934 wpalMemoryCopy(wowlAddBcPtrnReq.ucPatternMask,
12935 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMask,
12936 HAL_WOWL_BCAST_PATTERN_MAX_SIZE);
12937
12938 wpalMemoryCopy(wowlAddBcPtrnReq.ucPattern,
12939 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPattern,
12940 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - HAL_WOWL_BCAST_PATTERN_MAX_SIZE);
12941 wpalMemoryCopy(wowlAddBcPtrnReq.ucPatternMask,
12942 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMask,
12943 pwdiWowlAddBcPtrnParams->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - HAL_WOWL_BCAST_PATTERN_MAX_SIZE);
12944 }
12945
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012946 wowlAddBcPtrnReq.bssIdx = pBSSSes->ucBSSIdx;
12947
Jeff Johnson295189b2012-06-20 16:38:30 -070012948 wpalMemoryCopy( pSendBuffer+usDataOffset,
12949 &wowlAddBcPtrnReq,
12950 sizeof(wowlAddBcPtrnReq));
12951
12952 pWDICtx->wdiReqStatusCB = pwdiWowlAddBcPtrnParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070012953 pWDICtx->pReqStatusUserData = pwdiWowlAddBcPtrnParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012954
12955 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012956 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070012957 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070012958 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
12959 wdiWowlAddBcPtrnCb, pEventData->pUserData, WDI_WOWL_ADD_BC_PTRN_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070012960}/*WDI_ProcessWowlAddBcPtrnReq*/
12961
12962/**
Jeff Johnsone7245742012-09-05 17:12:55 -070012963 @brief Process Wowl delete bc ptrn Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070012965
12966 @param pWDICtx: pointer to the WLAN DAL context
12967 pEventData: pointer to the event information structure
12968
Jeff Johnson295189b2012-06-20 16:38:30 -070012969 @see
12970 @return Result of the function call
12971*/
12972WDI_Status
12973WDI_ProcessWowlDelBcPtrnReq
Jeff Johnsone7245742012-09-05 17:12:55 -070012974(
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 WDI_ControlBlockType* pWDICtx,
12976 WDI_EventInfoType* pEventData
12977)
12978{
12979 WDI_WowlDelBcPtrnReqParamsType* pwdiWowlDelBcPtrnParams = NULL;
12980 WDI_WowlDelBcPtrnCb wdiWowlDelBcPtrnCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012981 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 wpt_uint16 usDataOffset = 0;
12983 wpt_uint16 usSendSize = 0;
12984 tHalWowlDelBcastPtrn wowlDelBcPtrnReq;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012985 wpt_uint8 ucCurrentBSSSesIdx = 0;
12986 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012987 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
12988
12989 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070012990 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070012991 -------------------------------------------------------------------------*/
12992 if (( NULL == pEventData ) ||
12993 ( NULL == (pwdiWowlDelBcPtrnParams = (WDI_WowlDelBcPtrnReqParamsType*)pEventData->pEventData)) ||
12994 ( NULL == (wdiWowlDelBcPtrnCb = (WDI_WowlDelBcPtrnCb)pEventData->pCBfnc)))
12995 {
12996 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
12997 "%s: Invalid parameters", __FUNCTION__);
12998 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070012999 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013000 }
13001
13002 /*-----------------------------------------------------------------------
13003 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070013004 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013006 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_WOWL_DEL_BC_PTRN_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070013007 sizeof(wowlDelBcPtrnReq),
13008 &pSendBuffer, &usDataOffset, &usSendSize))||
13009 ( usSendSize < (usDataOffset + sizeof(wowlDelBcPtrnReq) )))
13010 {
13011 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13012 "Unable to get send buffer in Wowl del bc ptrn req %x %x %x",
13013 pEventData, pwdiWowlDelBcPtrnParams, wdiWowlDelBcPtrnCb);
13014 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013015 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013016 }
13017
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013018 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
13019 pwdiWowlDelBcPtrnParams->wdiWowlDelBcPtrnInfo.bssId,
13020 &pBSSSes);
13021 if ( NULL == pBSSSes )
13022 {
13023 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13024 " %s : Association for this BSSID does not exist",__FUNCTION__);
13025 return WDI_STATUS_E_FAILURE;
13026 }
13027
Jeff Johnsone7245742012-09-05 17:12:55 -070013028 wowlDelBcPtrnReq.ucPatternId =
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 pwdiWowlDelBcPtrnParams->wdiWowlDelBcPtrnInfo.ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013030
13031 wowlDelBcPtrnReq.bssIdx = pBSSSes->ucBSSIdx;
13032
Jeff Johnsone7245742012-09-05 17:12:55 -070013033 wpalMemoryCopy( pSendBuffer+usDataOffset,
13034 &wowlDelBcPtrnReq,
13035 sizeof(wowlDelBcPtrnReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070013036
13037 pWDICtx->wdiReqStatusCB = pwdiWowlDelBcPtrnParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070013038 pWDICtx->pReqStatusUserData = pwdiWowlDelBcPtrnParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013039
13040 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013041 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013043 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
13044 wdiWowlDelBcPtrnCb, pEventData->pUserData, WDI_WOWL_DEL_BC_PTRN_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070013045}/*WDI_ProcessWowlDelBcPtrnReq*/
13046
13047/**
Jeff Johnsone7245742012-09-05 17:12:55 -070013048 @brief Process Wowl enter Request function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070013049 when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070013050
13051 @param pWDICtx: pointer to the WLAN DAL context
13052 pEventData: pointer to the event information structure
13053
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 @see
13055 @return Result of the function call
13056*/
13057WDI_Status
13058WDI_ProcessWowlEnterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070013059(
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 WDI_ControlBlockType* pWDICtx,
13061 WDI_EventInfoType* pEventData
13062)
13063{
13064 WDI_WowlEnterReqParamsType* pwdiWowlEnterParams = NULL;
13065 WDI_WowlEnterReqCb wdiWowlEnterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013066 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013067 wpt_uint16 usDataOffset = 0;
13068 wpt_uint16 usSendSize = 0;
13069 tHalWowlEnterParams wowlEnterReq;
13070 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13071
13072 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013073 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 -------------------------------------------------------------------------*/
13075 if (( NULL == pEventData ) ||
13076 ( NULL == (pwdiWowlEnterParams = (WDI_WowlEnterReqParamsType*)pEventData->pEventData)) ||
13077 ( NULL == (wdiWowlEnterCb = (WDI_WowlEnterReqCb)pEventData->pCBfnc)))
13078 {
13079 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13080 "%s: Invalid parameters", __FUNCTION__);
13081 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013082 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013083 }
13084
13085 /*-----------------------------------------------------------------------
13086 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070013087 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070013088 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013089 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_WOWL_ENTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 sizeof(wowlEnterReq),
13091 &pSendBuffer, &usDataOffset, &usSendSize))||
13092 ( usSendSize < (usDataOffset + sizeof(wowlEnterReq) )))
13093 {
13094 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13095 "Unable to get send buffer in Wowl enter req %x %x %x",
13096 pEventData, pwdiWowlEnterParams, wdiWowlEnterCb);
13097 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013098 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 }
13100
Jeff Johnsone7245742012-09-05 17:12:55 -070013101 wowlEnterReq.ucMagicPktEnable =
Jeff Johnson295189b2012-06-20 16:38:30 -070013102 pwdiWowlEnterParams->wdiWowlEnterInfo.ucMagicPktEnable;
Jeff Johnsone7245742012-09-05 17:12:55 -070013103 wowlEnterReq.ucPatternFilteringEnable =
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 pwdiWowlEnterParams->wdiWowlEnterInfo.ucPatternFilteringEnable;
Jeff Johnsone7245742012-09-05 17:12:55 -070013105 wowlEnterReq.ucUcastPatternFilteringEnable =
Jeff Johnson295189b2012-06-20 16:38:30 -070013106 pwdiWowlEnterParams->wdiWowlEnterInfo.ucUcastPatternFilteringEnable;
Jeff Johnsone7245742012-09-05 17:12:55 -070013107 wowlEnterReq.ucWowChnlSwitchRcv =
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowChnlSwitchRcv;
Jeff Johnsone7245742012-09-05 17:12:55 -070013109 wowlEnterReq.ucWowDeauthRcv =
Jeff Johnson295189b2012-06-20 16:38:30 -070013110 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowDeauthRcv;
Jeff Johnsone7245742012-09-05 17:12:55 -070013111 wowlEnterReq.ucWowDisassocRcv =
Jeff Johnson295189b2012-06-20 16:38:30 -070013112 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowDisassocRcv;
Jeff Johnsone7245742012-09-05 17:12:55 -070013113 wowlEnterReq.ucWowMaxMissedBeacons =
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowMaxMissedBeacons;
Jeff Johnsone7245742012-09-05 17:12:55 -070013115 wowlEnterReq.ucWowMaxSleepUsec =
Jeff Johnson295189b2012-06-20 16:38:30 -070013116 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowMaxSleepUsec;
13117
13118#ifdef WLAN_WAKEUP_EVENTS
13119 wowlEnterReq.ucWoWEAPIDRequestEnable =
13120 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable;
13121
13122 wowlEnterReq.ucWoWEAPOL4WayEnable =
13123 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable;
13124
13125 wowlEnterReq.ucWowNetScanOffloadMatch =
13126 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowNetScanOffloadMatch;
13127
13128 wowlEnterReq.ucWowGTKRekeyError =
13129 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWowGTKRekeyError;
13130
13131 wowlEnterReq.ucWoWBSSConnLoss =
13132 pwdiWowlEnterParams->wdiWowlEnterInfo.ucWoWBSSConnLoss;
13133#endif // WLAN_WAKEUP_EVENTS
13134
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013135 wowlEnterReq.bssIdx = pwdiWowlEnterParams->wdiWowlEnterInfo.bssIdx;
13136
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 wpalMemoryCopy(wowlEnterReq.magicPtrn,
13138 pwdiWowlEnterParams->wdiWowlEnterInfo.magicPtrn,
13139 sizeof(tSirMacAddr));
13140
Jeff Johnsone7245742012-09-05 17:12:55 -070013141 wpalMemoryCopy( pSendBuffer+usDataOffset,
13142 &wowlEnterReq,
13143 sizeof(wowlEnterReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070013144
13145 pWDICtx->wdiReqStatusCB = pwdiWowlEnterParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070013146 pWDICtx->pReqStatusUserData = pwdiWowlEnterParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013147
13148 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013149 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013151 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
13152 wdiWowlEnterCb, pEventData->pUserData, WDI_WOWL_ENTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070013153}/*WDI_ProcessWowlEnterReq*/
13154
13155/**
13156 @brief Process Wowl exit Request function (called when Main FSM
13157 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070013158
13159 @param pWDICtx: pointer to the WLAN DAL context
13160 pEventData: pointer to the event information structure
13161
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 @see
13163 @return Result of the function call
13164*/
13165WDI_Status
13166WDI_ProcessWowlExitReq
Jeff Johnsone7245742012-09-05 17:12:55 -070013167(
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 WDI_ControlBlockType* pWDICtx,
13169 WDI_EventInfoType* pEventData
13170)
13171{
13172 WDI_WowlExitReqCb wdiWowlExitCb = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013173 WDI_WowlExitReqParamsType* pwdiWowlExitParams = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013174 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 wpt_uint16 usDataOffset = 0;
13176 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013177 tHalWowlExitParams wowlExitparams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013178 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13179
13180 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013181 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 -------------------------------------------------------------------------*/
13183 if (( NULL == pEventData ) ||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013184 ( NULL == (pwdiWowlExitParams = (WDI_WowlExitReqParamsType *)pEventData->pEventData)) ||
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 ( NULL == (wdiWowlExitCb = (WDI_WowlExitReqCb)pEventData->pCBfnc)))
13186 {
13187 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13188 "%s: Invalid parameters", __FUNCTION__);
13189 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013190 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 }
13192
13193 /*-----------------------------------------------------------------------
13194 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070013195 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013197 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_WOWL_EXIT_REQ,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013198 sizeof(wowlExitparams),
Jeff Johnson295189b2012-06-20 16:38:30 -070013199 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013200 ( usSendSize < (usDataOffset + sizeof(wowlExitparams))))
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 {
13202 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13203 "Unable to get send buffer in Wowl Exit req %x %x",
13204 pEventData, wdiWowlExitCb);
13205 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013206 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013207 }
13208
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013209 wowlExitparams.bssIdx = pwdiWowlExitParams->wdiWowlExitInfo.bssIdx;
13210
13211 wpalMemoryCopy( pSendBuffer+usDataOffset,
13212 &wowlExitparams,
13213 sizeof(wowlExitparams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013215 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013217 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
13218 wdiWowlExitCb, pEventData->pUserData, WDI_WOWL_EXIT_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070013219}/*WDI_ProcessWowlExitReq*/
13220
13221/**
13222 @brief Process Configure Apps Cpu Wakeup State Request function
13223 (called when Main FSM allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070013224
13225 @param pWDICtx: pointer to the WLAN DAL context
13226 pEventData: pointer to the event information structure
13227
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 @see
13229 @return Result of the function call
13230*/
13231WDI_Status
13232WDI_ProcessConfigureAppsCpuWakeupStateReq
Jeff Johnsone7245742012-09-05 17:12:55 -070013233(
Jeff Johnson295189b2012-06-20 16:38:30 -070013234 WDI_ControlBlockType* pWDICtx,
13235 WDI_EventInfoType* pEventData
13236)
13237{
13238 WDI_ConfigureAppsCpuWakeupStateReqParamsType* pwdiAppsCpuWakeupStateParams = NULL;
13239 WDI_ConfigureAppsCpuWakeupStateCb wdiConfigureAppsCpuWakeupStateCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013240 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 wpt_uint16 usDataOffset = 0;
13242 wpt_uint16 usSendSize = 0;
13243 tHalConfigureAppsCpuWakeupStateReqParams halCfgAppsCpuWakeupStateReqParams;
13244 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13245
13246 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013247 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013248 -------------------------------------------------------------------------*/
13249 if (( NULL == pEventData ) ||
13250 ( NULL == (pwdiAppsCpuWakeupStateParams = (WDI_ConfigureAppsCpuWakeupStateReqParamsType*)pEventData->pEventData)) ||
13251 ( NULL == (wdiConfigureAppsCpuWakeupStateCb = (WDI_ConfigureAppsCpuWakeupStateCb)pEventData->pCBfnc)))
13252 {
13253 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13254 "%s: Invalid parameters", __FUNCTION__);
13255 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013256 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013257 }
13258
13259 /*-----------------------------------------------------------------------
13260 Get message buffer
13261 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013262 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070013263 sizeof(halCfgAppsCpuWakeupStateReqParams),
13264 &pSendBuffer, &usDataOffset, &usSendSize))||
13265 ( usSendSize < (usDataOffset + sizeof(pwdiAppsCpuWakeupStateParams->bIsAppsAwake) )))
13266 {
13267 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13268 "Unable to get send buffer in Apps CPU Wakeup State req %x %x %x",
13269 pEventData, pwdiAppsCpuWakeupStateParams, wdiConfigureAppsCpuWakeupStateCb);
13270 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013271 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 }
13273
Jeff Johnsone7245742012-09-05 17:12:55 -070013274 halCfgAppsCpuWakeupStateReqParams.isAppsCpuAwake =
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 pwdiAppsCpuWakeupStateParams->bIsAppsAwake;
13276
Jeff Johnsone7245742012-09-05 17:12:55 -070013277 wpalMemoryCopy( pSendBuffer+usDataOffset,
13278 &halCfgAppsCpuWakeupStateReqParams,
13279 sizeof(halCfgAppsCpuWakeupStateReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013280
13281 pWDICtx->wdiReqStatusCB = pwdiAppsCpuWakeupStateParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070013282 pWDICtx->pReqStatusUserData = pwdiAppsCpuWakeupStateParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013283
13284 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013285 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070013286 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013287 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
13288 wdiConfigureAppsCpuWakeupStateCb, pEventData->pUserData,
13289 WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070013290}/*WDI_ProcessConfigureAppsCpuWakeupStateReq*/
13291
13292#ifdef WLAN_FEATURE_VOWIFI_11R
13293/**
13294 @brief Process Aggregated Add TSpec Request function (called when Main FSM
13295 allows it)
Jeff Johnsone7245742012-09-05 17:12:55 -070013296
13297 @param pWDICtx: pointer to the WLAN DAL context
13298 pEventData: pointer to the event information structure
13299
Jeff Johnson295189b2012-06-20 16:38:30 -070013300 @see
13301 @return Result of the function call
13302*/
13303WDI_Status
13304WDI_ProcessAggrAddTSpecReq
Jeff Johnsone7245742012-09-05 17:12:55 -070013305(
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 WDI_ControlBlockType* pWDICtx,
13307 WDI_EventInfoType* pEventData
13308)
13309{
13310 WDI_AggrAddTSReqParamsType* pwdiAggrAddTSParams;
13311 WDI_AggrAddTsRspCb wdiAggrAddTSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070013312 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013314 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 wpt_uint16 usDataOffset = 0;
13316 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070013317 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 wpt_macAddr macBSSID;
13319 tAggrAddTsReq halAggrAddTsReq;
13320 int i;
13321 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13322
13323 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013324 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 -------------------------------------------------------------------------*/
13326 if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
13327 ( NULL == pEventData->pCBfnc ))
13328 {
13329 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13330 "%s: Invalid parameters", __FUNCTION__);
13331 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013332 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 }
13334 wpalMemoryFill( &halAggrAddTsReq, sizeof(tAggrAddTsReq), 0 );
13335 pwdiAggrAddTSParams = (WDI_AggrAddTSReqParamsType*)pEventData->pEventData;
13336 wdiAggrAddTSRspCb = (WDI_AggrAddTsRspCb)pEventData->pCBfnc;
13337 /*-------------------------------------------------------------------------
13338 Check to see if we are in the middle of an association, if so queue, if
Jeff Johnsone7245742012-09-05 17:12:55 -070013339 not it means it is free to process request
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 -------------------------------------------------------------------------*/
13341 wpalMutexAcquire(&pWDICtx->wptMutex);
13342
13343 /*------------------------------------------------------------------------
13344 Find the BSS for which the request is made and identify WDI session
13345 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013346 if ( WDI_STATUS_SUCCESS != WDI_STATableGetStaBSSIDAddr(pWDICtx,
13347 pwdiAggrAddTSParams->wdiAggrTsInfo.ucSTAIdx,
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 &macBSSID))
13349 {
13350 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13351 "This station does not exist in the WDI Station Table %d");
13352 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070013353 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 }
13355
Jeff Johnsone7245742012-09-05 17:12:55 -070013356 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx, macBSSID, &pBSSSes);
13357 if ( NULL == pBSSSes )
Jeff Johnson295189b2012-06-20 16:38:30 -070013358 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013359 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13360 "%s: Association sequence for this BSS does not yet exist. macBSSID " MAC_ADDRESS_STR,
13361 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070013362
13363 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070013364 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013366
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 /*------------------------------------------------------------------------
13368 Check if this BSS is being currently processed or queued,
Jeff Johnsone7245742012-09-05 17:12:55 -070013369 if queued - queue the new request as well
Jeff Johnson295189b2012-06-20 16:38:30 -070013370 ------------------------------------------------------------------------*/
13371 if ( eWLAN_PAL_TRUE == pBSSSes->bAssocReqQueued )
13372 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013373 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13374 "%s: Association sequence for this BSS exists but currently queued. macBSSID " MAC_ADDRESS_STR,
13375 __func__, MAC_ADDR_ARRAY(macBSSID));
Jeff Johnson295189b2012-06-20 16:38:30 -070013376
Jeff Johnsone7245742012-09-05 17:12:55 -070013377 wdiStatus = WDI_QueueAssocRequest( pWDICtx, pBSSSes, pEventData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070013379 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013380 }
13381
13382 wpalMutexRelease(&pWDICtx->wptMutex);
13383 /*-----------------------------------------------------------------------
13384 Get message buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070013385 ! TO DO : proper conversion into the HAL Message Request Format
Jeff Johnson295189b2012-06-20 16:38:30 -070013386 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013387 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_AGGR_ADD_TS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 sizeof(tAggrAddTsParams),
13389 &pSendBuffer, &usDataOffset, &usSendSize))||
13390 ( usSendSize < (usDataOffset + sizeof(tAggrAddTsParams) )))
13391 {
13392 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13393 "Unable to get send buffer in set bss key req %x %x %x",
13394 pEventData, pwdiAggrAddTSParams, wdiAggrAddTSRspCb);
13395 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013396 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013397 }
13398
Jeff Johnsone7245742012-09-05 17:12:55 -070013399 halAggrAddTsReq.aggrAddTsParam.staIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 pwdiAggrAddTSParams->wdiAggrTsInfo.ucSTAIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070013401 halAggrAddTsReq.aggrAddTsParam.tspecIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070013402 pwdiAggrAddTSParams->wdiAggrTsInfo.ucTspecIdx;
13403
13404 for( i = 0; i < WLAN_HAL_MAX_AC; i++ )
13405 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013406 halAggrAddTsReq.aggrAddTsParam.tspec[i].type =
Jeff Johnson295189b2012-06-20 16:38:30 -070013407 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].ucType;
Jeff Johnsone7245742012-09-05 17:12:55 -070013408 halAggrAddTsReq.aggrAddTsParam.tspec[i].length =
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].ucLength;
Jeff Johnsone7245742012-09-05 17:12:55 -070013410 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.ackPolicy =
Jeff Johnson295189b2012-06-20 16:38:30 -070013411 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13412 ackPolicy;
Jeff Johnsone7245742012-09-05 17:12:55 -070013413 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.accessPolicy =
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13415 accessPolicy;
Jeff Johnsone7245742012-09-05 17:12:55 -070013416 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.userPrio =
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13418 userPrio;
Jeff Johnsone7245742012-09-05 17:12:55 -070013419 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.psb =
Jeff Johnson295189b2012-06-20 16:38:30 -070013420 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13421 psb;
Jeff Johnsone7245742012-09-05 17:12:55 -070013422 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.aggregation =
Jeff Johnson295189b2012-06-20 16:38:30 -070013423 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13424 aggregation;
Jeff Johnsone7245742012-09-05 17:12:55 -070013425 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.direction =
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13427 direction;
Jeff Johnsone7245742012-09-05 17:12:55 -070013428 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.tsid =
Jeff Johnson295189b2012-06-20 16:38:30 -070013429 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13430 trafficType;
Jeff Johnsone7245742012-09-05 17:12:55 -070013431 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.traffic.tsid =
Jeff Johnson295189b2012-06-20 16:38:30 -070013432 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.
13433 trafficType;
Jeff Johnsone7245742012-09-05 17:12:55 -070013434 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.schedule.rsvd =
Jeff Johnson295189b2012-06-20 16:38:30 -070013435 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.rsvd;
Jeff Johnsone7245742012-09-05 17:12:55 -070013436 halAggrAddTsReq.aggrAddTsParam.tspec[i].tsinfo.schedule.schedule =
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule;
Jeff Johnsone7245742012-09-05 17:12:55 -070013438
13439
13440 halAggrAddTsReq.aggrAddTsParam.tspec[i].nomMsduSz =
Jeff Johnson295189b2012-06-20 16:38:30 -070013441 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz;
Jeff Johnsone7245742012-09-05 17:12:55 -070013442 halAggrAddTsReq.aggrAddTsParam.tspec[i].maxMsduSz =
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz;
Jeff Johnsone7245742012-09-05 17:12:55 -070013444 halAggrAddTsReq.aggrAddTsParam.tspec[i].minSvcInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -070013445 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -070013446 halAggrAddTsReq.aggrAddTsParam.tspec[i].maxSvcInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -070013447 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -070013448 halAggrAddTsReq.aggrAddTsParam.tspec[i].inactInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -070013450 halAggrAddTsReq.aggrAddTsParam.tspec[i].suspendInterval =
Jeff Johnson295189b2012-06-20 16:38:30 -070013451 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval;
Jeff Johnsone7245742012-09-05 17:12:55 -070013452 halAggrAddTsReq.aggrAddTsParam.tspec[i].svcStartTime =
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013454 halAggrAddTsReq.aggrAddTsParam.tspec[i].minDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -070013456 halAggrAddTsReq.aggrAddTsParam.tspec[i].meanDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -070013458 halAggrAddTsReq.aggrAddTsParam.tspec[i].peakDataRate =
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -070013460 halAggrAddTsReq.aggrAddTsParam.tspec[i].maxBurstSz =
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz;
Jeff Johnsone7245742012-09-05 17:12:55 -070013462 halAggrAddTsReq.aggrAddTsParam.tspec[i].delayBound =
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound;
Jeff Johnsone7245742012-09-05 17:12:55 -070013464 halAggrAddTsReq.aggrAddTsParam.tspec[i].minPhyRate =
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate;
Jeff Johnsone7245742012-09-05 17:12:55 -070013466 halAggrAddTsReq.aggrAddTsParam.tspec[i].surplusBw =
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw;
Jeff Johnsone7245742012-09-05 17:12:55 -070013468 halAggrAddTsReq.aggrAddTsParam.tspec[i].mediumTime =
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 pwdiAggrAddTSParams->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime;
13470 }
13471
Jeff Johnsone7245742012-09-05 17:12:55 -070013472 wpalMemoryCopy( pSendBuffer+usDataOffset,
13473 &halAggrAddTsReq,
13474 sizeof(halAggrAddTsReq));
Jeff Johnson295189b2012-06-20 16:38:30 -070013475
13476 pWDICtx->wdiReqStatusCB = pwdiAggrAddTSParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070013477 pWDICtx->pReqStatusUserData = pwdiAggrAddTSParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013478
13479 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013480 Send Add TS Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070013481 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013482 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -070013483 wdiAggrAddTSRspCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -070013484 WDI_AGGR_ADD_TS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070013485}/*WDI_ProcessAggrAddTSpecReq*/
13486#endif /* WLAN_FEATURE_VOWIFI_11R */
13487
13488/**
13489 @brief Process Shutdown Request function (called when Main FSM
13490 allows it)
13491
13492 @param pWDICtx: pointer to the WLAN DAL context
13493 pEventData: pointer to the event information structure
13494
13495 @see
13496 @return Result of the function call
13497*/
13498WDI_Status
13499WDI_ProcessShutdownReq
13500(
13501 WDI_ControlBlockType* pWDICtx,
13502 WDI_EventInfoType* pEventData
13503 )
13504{
13505 wpt_status wptStatus;
13506
13507
13508 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13509
13510 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013511 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013512 -------------------------------------------------------------------------*/
13513 if ( NULL == pEventData )
13514 {
13515 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13516 "%s: Invalid parameters", __FUNCTION__);
13517 WDI_ASSERT(0);
13518 return WDI_STATUS_E_FAILURE;
13519 }
13520
13521 wpalMutexAcquire(&pWDICtx->wptMutex);
13522
13523
13524 gWDIInitialized = eWLAN_PAL_FALSE;
13525 /*! TO DO: stop the data services */
13526 if ( eDRIVER_TYPE_MFG != pWDICtx->driverMode )
13527 {
13528 /*Stop the STA Table !UT- check this logic again
13529 It is safer to do it here than on the response - because a stop is imminent*/
13530 WDI_STATableStop(pWDICtx);
13531
13532 /* Stop Transport Driver, DXE */
13533 WDTS_Stop(pWDICtx);
13534 }
13535
13536 /*Clear all pending request*/
13537 WDI_ClearPendingRequests(pWDICtx);
13538 /* Close Data transport*/
13539 /* FTM mode does not open Data Path */
13540 if ( eDRIVER_TYPE_MFG != pWDICtx->driverMode )
13541 {
13542 WDTS_Close(pWDICtx);
13543 }
13544 /*Close the STA Table !UT- check this logic again*/
13545 WDI_STATableClose(pWDICtx);
13546 /*close the PAL */
13547 wptStatus = wpalClose(pWDICtx->pPALContext);
13548 if ( eWLAN_PAL_STATUS_SUCCESS != wptStatus )
13549 {
13550 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13551 "Failed to wpal Close %d", wptStatus);
13552 WDI_ASSERT(0);
13553 }
13554
13555 /*Transition back to init state*/
13556 WDI_STATE_TRANSITION( pWDICtx, WDI_INIT_ST);
13557
13558 wpalMutexRelease(&pWDICtx->wptMutex);
13559
13560 /*Make sure the expected state is properly defaulted to Init*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013561 pWDICtx->ucExpectedStateTransition = WDI_INIT_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -070013562
13563
Jeff Johnsone7245742012-09-05 17:12:55 -070013564 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013565}/*WDI_ProcessShutdownReq*/
13566
13567/*========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070013568 Main DAL Control Path Response Processing API
Jeff Johnson295189b2012-06-20 16:38:30 -070013569========================================================================*/
13570
13571/**
13572 @brief Process Start Response function (called when a response
13573 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070013574
13575 @param pWDICtx: pointer to the WLAN DAL context
13576 pEventData: pointer to the event information structure
13577
Jeff Johnson295189b2012-06-20 16:38:30 -070013578 @see
13579 @return Result of the function call
13580*/
13581WDI_Status
13582WDI_ProcessStartRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070013583(
Jeff Johnson295189b2012-06-20 16:38:30 -070013584 WDI_ControlBlockType* pWDICtx,
13585 WDI_EventInfoType* pEventData
13586)
13587{
13588 WDI_StartRspParamsType wdiRspParams;
13589 WDI_StartRspCb wdiStartRspCb = NULL;
13590
13591 tHalMacStartRspParams* startRspParams;
13592
13593#ifndef HAL_SELF_STA_PER_BSS
13594 WDI_AddStaParams wdiAddSTAParam = {0};
13595#endif
13596 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13597
Jeff Johnsone7245742012-09-05 17:12:55 -070013598 wdiStartRspCb = (WDI_StartRspCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013600 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 -------------------------------------------------------------------------*/
13602 if (( NULL == pEventData ) ||
13603 ( NULL == pEventData->pEventData) ||
13604 ( NULL == wdiStartRspCb ))
13605 {
13606 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13607 "%s: Invalid parameters", __FUNCTION__);
13608 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013609 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013610 }
13611
13612 /*-------------------------------------------------------------------------
13613 Extract response and send it to UMAC
13614 -------------------------------------------------------------------------*/
13615 if ( sizeof(tHalMacStartRspParams) > pEventData->uEventDataSize )
13616 {
13617 // not enough data was received
13618 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
13619 "Invalid response length in Start Resp Expect %x Rcvd %x",
13620 sizeof(tHalMacStartRspParams), pEventData->uEventDataSize);
13621 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013622 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 }
13624
13625 /*-------------------------------------------------------------------------
13626 Unpack HAL Response Message - the header was already extracted by the
Jeff Johnsone7245742012-09-05 17:12:55 -070013627 main Response Handling procedure
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 -------------------------------------------------------------------------*/
13629 startRspParams = (tHalMacStartRspParams *) pEventData->pEventData;
13630
13631 wdiRspParams.ucMaxBssids = startRspParams->ucMaxBssids;
13632 wdiRspParams.ucMaxStations = startRspParams->ucMaxStations;
13633 wdiRspParams.wlanCompiledVersion.major = WLAN_HAL_VER_MAJOR;
13634 wdiRspParams.wlanCompiledVersion.minor = WLAN_HAL_VER_MINOR;
13635 wdiRspParams.wlanCompiledVersion.version = WLAN_HAL_VER_VERSION;
13636 wdiRspParams.wlanCompiledVersion.revision = WLAN_HAL_VER_REVISION;
13637 wdiRspParams.wlanReportedVersion.major =
13638 startRspParams->wcnssWlanVersion.major;
13639 wdiRspParams.wlanReportedVersion.minor =
13640 startRspParams->wcnssWlanVersion.minor;
13641 wdiRspParams.wlanReportedVersion.version =
13642 startRspParams->wcnssWlanVersion.version;
13643 wdiRspParams.wlanReportedVersion.revision =
13644 startRspParams->wcnssWlanVersion.revision;
13645 wpalMemoryCopy(wdiRspParams.wcnssSoftwareVersion,
13646 startRspParams->wcnssCrmVersionString,
13647 sizeof(wdiRspParams.wcnssSoftwareVersion));
13648 wpalMemoryCopy(wdiRspParams.wcnssHardwareVersion,
13649 startRspParams->wcnssWlanVersionString,
13650 sizeof(wdiRspParams.wcnssHardwareVersion));
13651 wdiRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(startRspParams->status);
13652
13653 wpalMutexAcquire(&pWDICtx->wptMutex);
13654 if ( WDI_STATUS_SUCCESS == wdiRspParams.wdiStatus )
13655 {
13656 pWDICtx->ucExpectedStateTransition = WDI_STARTED_ST;
13657
13658 /*Cache the start response for further use*/
13659 wpalMemoryCopy( &pWDICtx->wdiCachedStartRspParams ,
Jeff Johnsone7245742012-09-05 17:12:55 -070013660 &wdiRspParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 sizeof(pWDICtx->wdiCachedStartRspParams));
13662
13663 }
13664 else
13665 {
13666 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13667 "Failed to start device with status %s(%d)",
13668 WDI_getHALStatusMsgString(startRspParams->status),
13669 startRspParams->status);
13670
13671 /*Set the expected state transition to stopped - because the start has
13672 failed*/
13673 pWDICtx->ucExpectedStateTransition = WDI_STOPPED_ST;
13674
13675 wpalMutexRelease(&pWDICtx->wptMutex);
13676
13677 /*Notify UMAC*/
13678 wdiStartRspCb( &wdiRspParams, pWDICtx->pRspCBUserData);
Jeff Johnsone7245742012-09-05 17:12:55 -070013679
Jeff Johnson295189b2012-06-20 16:38:30 -070013680 WDI_DetectedDeviceError(pWDICtx, wdiRspParams.wdiStatus);
13681
13682 /*Although the response is an error - it was processed by our function
13683 so as far as the caller is concerned this is a succesful reponse processing*/
13684 return WDI_STATUS_SUCCESS;
13685 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013686
Jeff Johnson295189b2012-06-20 16:38:30 -070013687 wpalMutexRelease(&pWDICtx->wptMutex);
13688
13689 if(eDRIVER_TYPE_MFG == pWDICtx->driverMode)
13690 {
13691 /* FTM mode does not need to execute below */
13692 /* Notify UMAC */
13693 wdiStartRspCb( &wdiRspParams, pWDICtx->pRspCBUserData);
13694 return WDI_STATUS_SUCCESS;
13695 }
13696
13697 /* START the Data transport */
13698 WDTS_startTransport(pWDICtx);
13699
13700 /*Start the STA Table !- check this logic again*/
13701 WDI_STATableStart(pWDICtx);
13702
13703#ifndef HAL_SELF_STA_PER_BSS
13704 /* Store the Self STA Index */
13705 pWDICtx->ucSelfStaId = halStartRspMsg.startRspParams.selfStaIdx;
13706
13707 pWDICtx->usSelfStaDpuId = wdiRspParams.usSelfStaDpuId;
13708 wpalMemoryCopy(pWDICtx->macSelfSta, wdiRspParams.macSelfSta,
13709 WDI_MAC_ADDR_LEN);
13710
13711 /* At this point add the self-STA */
13712
13713 /*! TO DO: wdiAddSTAParam.bcastMgmtDpuSignature */
13714 /* !TO DO: wdiAddSTAParam.bcastDpuSignature */
13715 /*! TO DO: wdiAddSTAParam.dpuSig */
13716 /*! TO DO: wdiAddSTAParam.ucWmmEnabled */
13717 /*! TO DO: wdiAddSTAParam.ucHTCapable */
13718 /*! TO DO: wdiAddSTAParam.ucRmfEnabled */
13719
13720 //all DPU indices are the same for self STA
13721 wdiAddSTAParam.bcastDpuIndex = wdiRspParams.usSelfStaDpuId;
13722 wdiAddSTAParam.bcastMgmtDpuIndex = wdiRspParams.usSelfStaDpuId;
13723 wdiAddSTAParam.dpuIndex = wdiRspParams.usSelfStaDpuId;;
13724 wpalMemoryCopy(wdiAddSTAParam.staMacAddr, wdiRspParams.macSelfSta,
13725 WDI_MAC_ADDR_LEN);
13726 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_SELF; /* 0 - self */
13727 wdiAddSTAParam.ucSTAIdx = halStartRspMsg.startRspParams.selfStaIdx;
13728
13729 /* Note: Since we don't get an explicit config STA request for self STA, we
13730 add the self STA upon receiving the Start response message. But the
13731 self STA entry in the table is deleted when WDI gets an explicit delete STA
13732 request */
13733 (void)WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam);
13734#endif
13735
13736 /*Notify UMAC*/
13737 wdiStartRspCb( &wdiRspParams, pWDICtx->pRspCBUserData);
13738
Jeff Johnsone7245742012-09-05 17:12:55 -070013739 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013740}/*WDI_ProcessStartRsp*/
13741
13742
13743/**
13744 @brief Process Stop Response function (called when a response
13745 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070013746
13747 @param pWDICtx: pointer to the WLAN DAL context
13748 pEventData: pointer to the event information structure
13749
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 @see
13751 @return Result of the function call
13752*/
13753WDI_Status
13754WDI_ProcessStopRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070013755(
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 WDI_ControlBlockType* pWDICtx,
13757 WDI_EventInfoType* pEventData
13758)
13759{
13760 WDI_Status wdiStatus;
13761 WDI_StopRspCb wdiStopRspCb = NULL;
13762
Jeff Johnsone7245742012-09-05 17:12:55 -070013763 tHalMacStopRspMsg halMacStopRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013764 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13765
Jeff Johnsone7245742012-09-05 17:12:55 -070013766 wdiStopRspCb = (WDI_StopRspCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070013767 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013768 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013769 -------------------------------------------------------------------------*/
13770 if (( NULL == pEventData ) ||
13771 ( NULL == pEventData->pEventData) ||
13772 ( NULL == wdiStopRspCb ))
13773 {
13774 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13775 "%s: Invalid parameters", __FUNCTION__);
13776 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013777 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013778 }
13779
13780 /*-------------------------------------------------------------------------
13781 Extract response and send it to UMAC
13782 -------------------------------------------------------------------------*/
13783 if ( sizeof(halMacStopRspMsg) < pEventData->uEventDataSize )
13784 {
13785 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13786 "Invalid response length in Stop Resp %x %x",
13787 pEventData->uEventDataSize);
13788 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013789 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013790 }
13791
13792 /*-------------------------------------------------------------------------
13793 Unpack HAL Response Message - the header was already extracted by the
Jeff Johnsone7245742012-09-05 17:12:55 -070013794 main Response Handling procedure
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013796 wpalMemoryCopy( &halMacStopRspMsg.stopRspParams,
13797 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 sizeof(halMacStopRspMsg.stopRspParams));
13799
Jeff Johnsone7245742012-09-05 17:12:55 -070013800 wdiStatus = WDI_HAL_2_WDI_STATUS(halMacStopRspMsg.stopRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013801
13802 wpalMutexAcquire(&pWDICtx->wptMutex);
13803
13804 /*--------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013805 Check to see if the stop went OK
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 --------------------------------------------------------------------------*/
13807 if ( WDI_STATUS_SUCCESS != wdiStatus )
13808 {
13809 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13810 "Failed to stop the device with status %s (%d)",
13811 WDI_getHALStatusMsgString(halMacStopRspMsg.stopRspParams.status),
13812 halMacStopRspMsg.stopRspParams.status);
13813
Jeff Johnsone7245742012-09-05 17:12:55 -070013814 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
13815
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070013817 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013818 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013819
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 pWDICtx->ucExpectedStateTransition = WDI_STOPPED_ST;
13821
13822 /*Transition now as WDI may get preempted imediately after it sends
13823 up the Stop Response and it will not get to process the state transition
13824 from Main Rsp function*/
13825 WDI_STATE_TRANSITION( pWDICtx, pWDICtx->ucExpectedStateTransition);
13826 wpalMutexRelease(&pWDICtx->wptMutex);
13827
13828 /*! TO DO: - STOP the Data transport */
13829
13830 /*Notify UMAC*/
13831 wdiStopRspCb( wdiStatus, pWDICtx->pRspCBUserData);
13832
Jeff Johnsone7245742012-09-05 17:12:55 -070013833 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013834}/*WDI_ProcessStopRsp*/
13835
13836/**
13837 @brief Process Close Rsp function (called when a response
13838 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070013839
13840 @param pWDICtx: pointer to the WLAN DAL context
13841 pEventData: pointer to the event information structure
13842
Jeff Johnson295189b2012-06-20 16:38:30 -070013843 @see
13844 @return Result of the function call
13845*/
13846WDI_Status
13847WDI_ProcessCloseRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070013848(
Jeff Johnson295189b2012-06-20 16:38:30 -070013849 WDI_ControlBlockType* pWDICtx,
13850 WDI_EventInfoType* pEventData
13851)
13852{
13853 /*There is no close response comming from HAL - function just kept for
13854 simmetry */
13855 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013856 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013857}/*WDI_ProcessCloseRsp*/
13858
13859
13860/*============================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070013861 SCAN RESPONSE PROCESSING API
Jeff Johnson295189b2012-06-20 16:38:30 -070013862============================================================================*/
13863
13864/**
13865 @brief Process Init Scan Rsp function (called when a response
13866 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070013867
13868 @param pWDICtx: pointer to the WLAN DAL context
13869 pEventData: pointer to the event information structure
13870
Jeff Johnson295189b2012-06-20 16:38:30 -070013871 @see
13872 @return Result of the function call
13873*/
13874WDI_Status
13875WDI_ProcessInitScanRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070013876(
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 WDI_ControlBlockType* pWDICtx,
13878 WDI_EventInfoType* pEventData
13879)
13880{
13881 WDI_Status wdiStatus;
13882 WDI_InitScanRspCb wdiInitScanRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070013883 tHalInitScanRspMsg halInitScanRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13885
13886 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013887 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013888 -------------------------------------------------------------------------*/
13889 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
13890 ( NULL == pEventData->pEventData))
13891 {
13892 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13893 "%s: Invalid parameters", __FUNCTION__);
13894 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013895 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013896 }
13897
13898 wdiInitScanRspCb = (WDI_InitScanRspCb)pWDICtx->pfncRspCB;
13899 if( NULL == wdiInitScanRspCb)
13900 {
13901 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
13902 "%s: call back function is NULL", __FUNCTION__);
13903 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013904 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013905 }
13906
13907 /*-------------------------------------------------------------------------
13908 Unpack HAL Response Message - the header was already extracted by the
Jeff Johnsone7245742012-09-05 17:12:55 -070013909 main Response Handling procedure
Jeff Johnson295189b2012-06-20 16:38:30 -070013910 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013911 wpalMemoryCopy( &halInitScanRspMsg.initScanRspParams,
13912 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070013913 sizeof(halInitScanRspMsg.initScanRspParams));
13914
Jeff Johnsone7245742012-09-05 17:12:55 -070013915 wdiStatus = WDI_HAL_2_WDI_STATUS(halInitScanRspMsg.initScanRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013916
13917 if ( pWDICtx->bInBmps )
13918 {
13919 // notify DTS that we are entering Full power
13920 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
13921 }
13922
13923 /*Notify UMAC*/
13924 wdiInitScanRspCb( wdiStatus, pWDICtx->pRspCBUserData);
13925
Jeff Johnsone7245742012-09-05 17:12:55 -070013926 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070013927}/*WDI_ProcessInitScanRsp*/
13928
13929
13930/**
13931 @brief Process Start Scan Rsp function (called when a response
13932 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070013933
13934 @param pWDICtx: pointer to the WLAN DAL context
13935 pEventData: pointer to the event information structure
13936
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 @see
13938 @return Result of the function call
13939*/
13940WDI_Status
13941WDI_ProcessStartScanRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070013942(
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 WDI_ControlBlockType* pWDICtx,
13944 WDI_EventInfoType* pEventData
13945)
13946{
13947 WDI_StartScanRspParamsType wdiStartScanParams;
13948 WDI_StartScanRspCb wdiStartScanRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070013949
13950 tHalStartScanRspMsg halStartScanRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013951 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
13952
13953 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070013954 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070013955 -------------------------------------------------------------------------*/
13956 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
13957 ( NULL == pEventData->pEventData))
13958 {
13959 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
13960 "%s: Invalid parameters", __FUNCTION__);
13961 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013962 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 }
13964
13965 wdiStartScanRspCb = (WDI_StartScanRspCb)pWDICtx->pfncRspCB;
13966 if( NULL == wdiStartScanRspCb)
13967 {
13968 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
13969 "%s: call back function is NULL", __FUNCTION__);
13970 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070013971 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 }
13973
13974 /*-------------------------------------------------------------------------
13975 Extract response and send it to UMAC
13976 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070013977 wpalMemoryCopy( &halStartScanRspMsg.startScanRspParams,
13978 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 sizeof(halStartScanRspMsg.startScanRspParams));
13980
13981 wdiStartScanParams.wdiStatus = WDI_HAL_2_WDI_STATUS(
13982 halStartScanRspMsg.startScanRspParams.status);
13983#ifdef WLAN_FEATURE_VOWIFI
Jeff Johnsone7245742012-09-05 17:12:55 -070013984 wdiStartScanParams.ucTxMgmtPower =
Jeff Johnson295189b2012-06-20 16:38:30 -070013985 halStartScanRspMsg.startScanRspParams.txMgmtPower;
Jeff Johnsone7245742012-09-05 17:12:55 -070013986 wpalMemoryCopy( wdiStartScanParams.aStartTSF,
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 halStartScanRspMsg.startScanRspParams.startTSF,
13988 2);
Jeff Johnsone7245742012-09-05 17:12:55 -070013989#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013990
13991 if ( eHAL_STATUS_SUCCESS != halStartScanRspMsg.startScanRspParams.status )
13992 {
13993 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
13994 "Start scan failed with status %s (%d)",
13995 WDI_getHALStatusMsgString(halStartScanRspMsg.startScanRspParams.status),
13996 halStartScanRspMsg.startScanRspParams.status);
13997 /* send the status to UMAC, don't return from here*/
13998 }
13999
14000 /*Notify UMAC*/
14001 wdiStartScanRspCb( &wdiStartScanParams, pWDICtx->pRspCBUserData);
14002
Jeff Johnsone7245742012-09-05 17:12:55 -070014003 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014004
14005}/*WDI_ProcessStartScanRsp*/
14006
14007
14008/**
Jeff Johnsone7245742012-09-05 17:12:55 -070014009 @brief Process End Scan Response function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014011
14012 @param pWDICtx: pointer to the WLAN DAL context
14013 pEventData: pointer to the event information structure
14014
Jeff Johnson295189b2012-06-20 16:38:30 -070014015 @see
14016 @return Result of the function call
14017*/
14018WDI_Status
14019WDI_ProcessEndScanRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014020(
Jeff Johnson295189b2012-06-20 16:38:30 -070014021 WDI_ControlBlockType* pWDICtx,
14022 WDI_EventInfoType* pEventData
14023)
14024{
14025 WDI_Status wdiStatus;
14026 tHalEndScanRspMsg halEndScanRspMsg;
14027 WDI_EndScanRspCb wdiEndScanRspCb;
14028 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14029
14030 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014031 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014032 -------------------------------------------------------------------------*/
14033 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14034 ( NULL == pEventData->pEventData))
14035 {
14036 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14037 "%s: Invalid parameters", __FUNCTION__);
14038 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014039 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 }
14041
14042 wdiEndScanRspCb = (WDI_EndScanRspCb)pWDICtx->pfncRspCB;
14043
14044 /*-------------------------------------------------------------------------
14045 Extract response and send it to UMAC
14046 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014047 wpalMemoryCopy( &halEndScanRspMsg.endScanRspParams,
14048 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014049 sizeof(halEndScanRspMsg.endScanRspParams));
14050
Jeff Johnsone7245742012-09-05 17:12:55 -070014051 wdiStatus = WDI_HAL_2_WDI_STATUS(halEndScanRspMsg.endScanRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014052
14053 if ( eHAL_STATUS_SUCCESS != halEndScanRspMsg.endScanRspParams.status )
14054 {
14055 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14056 "End Scan failed with status %s (%d )",
14057 WDI_getHALStatusMsgString(halEndScanRspMsg.endScanRspParams.status),
14058 halEndScanRspMsg.endScanRspParams.status);
14059 /* send the status to UMAC, don't return from here*/
14060 }
14061
14062 /*Notify UMAC*/
14063 wdiEndScanRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14064
Jeff Johnsone7245742012-09-05 17:12:55 -070014065 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014066}/*WDI_ProcessEndScanRsp*/
14067
14068
14069/**
Jeff Johnsone7245742012-09-05 17:12:55 -070014070 @brief Process Finish Scan Response function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014072
14073 @param pWDICtx: pointer to the WLAN DAL context
14074 pEventData: pointer to the event information structure
14075
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 @see
14077 @return Result of the function call
14078*/
14079WDI_Status
14080WDI_ProcessFinishScanRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014081(
Jeff Johnson295189b2012-06-20 16:38:30 -070014082 WDI_ControlBlockType* pWDICtx,
14083 WDI_EventInfoType* pEventData
Jeff Johnsone7245742012-09-05 17:12:55 -070014084)
Jeff Johnson295189b2012-06-20 16:38:30 -070014085{
14086 WDI_Status wdiStatus;
14087 WDI_FinishScanRspCb wdiFinishScanRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070014088
14089 tHalFinishScanRspMsg halFinishScanRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14091
14092 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014093 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 -------------------------------------------------------------------------*/
14095 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14096 ( NULL == pEventData->pEventData))
14097 {
14098 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14099 "%s: Invalid parameters", __FUNCTION__);
14100 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014101 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014102 }
14103
14104 wdiFinishScanRspCb = (WDI_FinishScanRspCb)pWDICtx->pfncRspCB;
14105
14106 /*-------------------------------------------------------------------------
14107 Extract response and send it to UMAC
14108 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014109 wpalMemoryCopy( (void *)&halFinishScanRspMsg.finishScanRspParams.status,
14110 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014111 sizeof(halFinishScanRspMsg.finishScanRspParams.status));
14112
Jeff Johnsone7245742012-09-05 17:12:55 -070014113 wdiStatus = WDI_HAL_2_WDI_STATUS(halFinishScanRspMsg.finishScanRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014114
14115 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO_LOW,
Jeff Johnsone7245742012-09-05 17:12:55 -070014116 "Finish scan response reported status: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014117 halFinishScanRspMsg.finishScanRspParams.status);
14118
14119 if (( eHAL_STATUS_SUCCESS != halFinishScanRspMsg.finishScanRspParams.status )&&
14120 ( eHAL_STATUS_NOTIFY_BSS_FAIL != halFinishScanRspMsg.finishScanRspParams.status ))
14121 {
14122 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14123 "Finish Scan failed with status %s (%d)",
14124 WDI_getHALStatusMsgString(halFinishScanRspMsg.finishScanRspParams.status),
14125 halFinishScanRspMsg.finishScanRspParams.status);
14126 /* send the status to UMAC, don't return from here*/
14127 }
14128
14129 /*Notify UMAC*/
14130 wdiFinishScanRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14131
Jeff Johnsone7245742012-09-05 17:12:55 -070014132 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014133}/*WDI_ProcessFinishScanRsp*/
14134
14135/**
14136 @brief Process Join Response function (called when a response
14137 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014138
14139 @param pWDICtx: pointer to the WLAN DAL context
14140 pEventData: pointer to the event information structure
14141
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 @see
14143 @return Result of the function call
14144*/
14145WDI_Status
14146WDI_ProcessJoinRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014147(
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 WDI_ControlBlockType* pWDICtx,
14149 WDI_EventInfoType* pEventData
14150)
14151{
14152 WDI_Status wdiStatus;
14153 WDI_JoinRspCb wdiJoinRspCb;
14154 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070014155
14156 tHalJoinRspMsg halJoinRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014157 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14158
14159 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014160 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014161 -------------------------------------------------------------------------*/
14162 if (( NULL == pWDICtx ) ||
14163 ( NULL == pWDICtx->pfncRspCB ) ||
14164 ( NULL == pEventData ) ||
14165 ( NULL == pEventData->pEventData))
14166 {
14167 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14168 "%s: Invalid parameters", __FUNCTION__);
14169 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014170 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014171 }
14172
14173 wdiJoinRspCb = (WDI_JoinRspCb)pWDICtx->pfncRspCB;
14174
14175 /*-------------------------------------------------------------------------
14176 Extract response and send it to UMAC
14177 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014178 wpalMemoryCopy( &halJoinRspMsg.joinRspParams,
14179 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 sizeof(halJoinRspMsg.joinRspParams));
14181
Jeff Johnsone7245742012-09-05 17:12:55 -070014182 wdiStatus = WDI_HAL_2_WDI_STATUS(halJoinRspMsg.joinRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014183
14184 wpalMutexAcquire(&pWDICtx->wptMutex);
14185
14186 /*-----------------------------------------------------------------------
14187 Join response can only be received for an existing assoc that
Jeff Johnsone7245742012-09-05 17:12:55 -070014188 is current and in progress
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014190 if (( !WDI_VALID_SESSION_IDX(pWDICtx->ucCurrentBSSSesIdx )) ||
Jeff Johnson295189b2012-06-20 16:38:30 -070014191 ( eWLAN_PAL_FALSE == pWDICtx->bAssociationInProgress ))
14192 {
14193 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070014194 "%s: Association sequence for this BSS does not yet exist (bssIdx %d) or "
14195 "association no longer in progress %d - mysterious HAL response",
14196 __func__, pWDICtx->ucCurrentBSSSesIdx, pWDICtx->bAssociationInProgress);
Jeff Johnson295189b2012-06-20 16:38:30 -070014197
Jeff Johnsone7245742012-09-05 17:12:55 -070014198 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070014200 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070014201 }
14202
14203 pBSSSes = &pWDICtx->aBSSSessions[pWDICtx->ucCurrentBSSSesIdx];
14204
14205 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014206 Join Response is only allowed in init state
Jeff Johnson295189b2012-06-20 16:38:30 -070014207 -----------------------------------------------------------------------*/
14208 if ( WDI_ASSOC_JOINING_ST != pBSSSes->wdiAssocState)
14209 {
14210 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14211 "Join only allowed in Joining state - failure state is %d "
14212 "strange HAL response", pBSSSes->wdiAssocState);
14213
Jeff Johnsone7245742012-09-05 17:12:55 -070014214 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
14215
Jeff Johnson295189b2012-06-20 16:38:30 -070014216 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070014217 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 }
14219
14220
14221 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014222 If assoc has failed the current session will be deleted
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 -----------------------------------------------------------------------*/
14224 if ( WDI_STATUS_SUCCESS != wdiStatus )
14225 {
14226 /*Association was failed by HAL - remove session*/
14227 WDI_DeleteSession(pWDICtx, pBSSSes);
14228
14229 /*Association no longer in progress */
14230 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
14231
14232 /*Association no longer in progress - prepare pending assoc for processing*/
14233 WDI_DequeueAssocRequest(pWDICtx);
Jeff Johnsone7245742012-09-05 17:12:55 -070014234
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 }
14236 else
14237 {
14238 /*Transition to state Joining - this may be redundant as we are supposed
14239 to be in this state already - but just to be safe*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014240 pBSSSes->wdiAssocState = WDI_ASSOC_JOINING_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 }
14242
14243 wpalMutexRelease(&pWDICtx->wptMutex);
14244
14245 /*Notify UMAC*/
14246 wdiJoinRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14247
Jeff Johnsone7245742012-09-05 17:12:55 -070014248 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014249}/*WDI_ProcessJoinRsp*/
14250
14251
14252/**
Jeff Johnsone7245742012-09-05 17:12:55 -070014253 @brief Process Config BSS Response function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070014254 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014255
14256 @param pWDICtx: pointer to the WLAN DAL context
14257 pEventData: pointer to the event information structure
14258
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 @see
14260 @return Result of the function call
14261*/
14262WDI_Status
14263WDI_ProcessConfigBSSRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014264(
Jeff Johnson295189b2012-06-20 16:38:30 -070014265 WDI_ControlBlockType* pWDICtx,
14266 WDI_EventInfoType* pEventData
14267)
14268{
14269 WDI_ConfigBSSRspParamsType wdiConfigBSSParams;
14270 WDI_ConfigBSSRspCb wdiConfigBSSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070014271 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014272 WDI_BSSSessionType* pBSSSes = NULL;
14273
Jeff Johnsone7245742012-09-05 17:12:55 -070014274 tConfigBssRspMsg halConfigBssRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014275 WDI_AddStaParams wdiBcastAddSTAParam = {0};
14276 WDI_AddStaParams wdiAddSTAParam = {0};
Jeff Johnsone7245742012-09-05 17:12:55 -070014277
Jeff Johnson295189b2012-06-20 16:38:30 -070014278 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14279
14280 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014281 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014282 -------------------------------------------------------------------------*/
14283 if (( NULL == pEventData ) ||
14284 ( NULL == pEventData->pEventData))
14285 {
14286 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14287 "%s: Invalid parameters", __FUNCTION__);
14288 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014289 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014290 }
14291
14292 wdiConfigBSSRspCb = (WDI_ConfigBSSRspCb)pWDICtx->pfncRspCB;
14293
14294 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014295 Extract response and send it to UMAC
Jeff Johnson295189b2012-06-20 16:38:30 -070014296 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014297 wpalMemoryCopy( &halConfigBssRspMsg.configBssRspParams,
14298 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 sizeof(halConfigBssRspMsg.configBssRspParams));
14300
14301 wdiConfigBSSParams.wdiStatus = WDI_HAL_2_WDI_STATUS(
14302 halConfigBssRspMsg.configBssRspParams.status);
14303 if(WDI_STATUS_SUCCESS == wdiConfigBSSParams.wdiStatus)
14304 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014305 wpalMemoryCopy( wdiConfigBSSParams.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.macBSSID,
14307 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070014308
Jeff Johnson295189b2012-06-20 16:38:30 -070014309 wdiConfigBSSParams.ucBSSIdx = halConfigBssRspMsg.configBssRspParams.bssIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014310
14311 wdiConfigBSSParams.ucBcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014312 halConfigBssRspMsg.configBssRspParams.bcastDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014313
14314 wdiConfigBSSParams.ucUcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 halConfigBssRspMsg.configBssRspParams.ucastDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014316
Jeff Johnson295189b2012-06-20 16:38:30 -070014317 wdiConfigBSSParams.ucSTAIdx = halConfigBssRspMsg.configBssRspParams.bssStaIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014318
Jeff Johnson295189b2012-06-20 16:38:30 -070014319 #ifdef WLAN_FEATURE_VOWIFI
Jeff Johnsone7245742012-09-05 17:12:55 -070014320 wdiConfigBSSParams.ucTxMgmtPower =
Jeff Johnson295189b2012-06-20 16:38:30 -070014321 halConfigBssRspMsg.configBssRspParams.txMgmtPower;
14322 #endif
14323 wpalMemoryCopy( wdiConfigBSSParams.macSTA,
14324 halConfigBssRspMsg.configBssRspParams.staMac,
14325 WDI_MAC_ADDR_LEN );
Jeff Johnsone7245742012-09-05 17:12:55 -070014326
Jeff Johnson295189b2012-06-20 16:38:30 -070014327 wpalMutexAcquire(&pWDICtx->wptMutex);
14328 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014329 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070014330 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014331 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
14332 wdiConfigBSSParams.macBSSID,
14333 &pBSSSes);
14334
Jeff Johnson295189b2012-06-20 16:38:30 -070014335 /*-----------------------------------------------------------------------
14336 Config BSS response can only be received for an existing assoc that
Jeff Johnsone7245742012-09-05 17:12:55 -070014337 is current and in progress
Jeff Johnson295189b2012-06-20 16:38:30 -070014338 -----------------------------------------------------------------------*/
14339 if ( NULL == pBSSSes )
14340 {
14341 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14342 "Association sequence for this BSS does not yet exist "
14343 "- mysterious HAL response");
Jeff Johnsone7245742012-09-05 17:12:55 -070014344
14345 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
14346
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070014348 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070014349 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014350
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 /*Save data for this BSS*/
14352 pBSSSes->wdiBssType = pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.wdiBSSType;
14353 pBSSSes->ucBSSIdx = halConfigBssRspMsg.configBssRspParams.bssIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014354 pBSSSes->bcastDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014355 halConfigBssRspMsg.configBssRspParams.bcastDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014356 pBSSSes->bcastDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014357 halConfigBssRspMsg.configBssRspParams.bcastDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014358 pBSSSes->bcastMgmtDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014359 halConfigBssRspMsg.configBssRspParams.mgmtDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014360 pBSSSes->bcastMgmtDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014361 halConfigBssRspMsg.configBssRspParams.mgmtDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014362 pBSSSes->ucRmfEnabled =
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.ucRMFEnabled;
14364 pBSSSes->bcastStaIdx =
14365 halConfigBssRspMsg.configBssRspParams.bssBcastStaIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014366
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 /* !TO DO: Shuould we be updating the RMF Capability of self STA here? */
Jeff Johnsone7245742012-09-05 17:12:55 -070014368
Jeff Johnson295189b2012-06-20 16:38:30 -070014369 /*-------------------------------------------------------------------------
14370 Add Peer STA
14371 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014372 wdiAddSTAParam.ucSTAIdx = halConfigBssRspMsg.configBssRspParams.bssStaIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 wdiAddSTAParam.dpuIndex = halConfigBssRspMsg.configBssRspParams.dpuDescIndx;
14374 wdiAddSTAParam.dpuSig = halConfigBssRspMsg.configBssRspParams.ucastDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014375
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 /*This info can be retrieved from the cached initial request*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014377 wdiAddSTAParam.ucWmmEnabled =
Jeff Johnson295189b2012-06-20 16:38:30 -070014378 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.wdiSTAContext.ucWMMEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070014379 wdiAddSTAParam.ucHTCapable =
14380 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.wdiSTAContext.ucHTCapable;
14381 wdiAddSTAParam.ucStaType =
14382 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.wdiSTAContext.wdiSTAType;
14383
Jeff Johnson295189b2012-06-20 16:38:30 -070014384 /* MAC Address of STA */
Jeff Johnsone7245742012-09-05 17:12:55 -070014385 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
14386 halConfigBssRspMsg.configBssRspParams.staMac,
Jeff Johnson295189b2012-06-20 16:38:30 -070014387 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070014388
14389 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
14390 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.wdiSTAContext.macBSSID ,
14391 WDI_MAC_ADDR_LEN);
14392
Jeff Johnson295189b2012-06-20 16:38:30 -070014393 /*Add BSS specific parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014394 wdiAddSTAParam.bcastMgmtDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014395 halConfigBssRspMsg.configBssRspParams.mgmtDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014396 wdiAddSTAParam.bcastMgmtDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014397 halConfigBssRspMsg.configBssRspParams.mgmtDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014398 wdiAddSTAParam.bcastDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014399 halConfigBssRspMsg.configBssRspParams.bcastDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014400 wdiAddSTAParam.bcastDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014401 halConfigBssRspMsg.configBssRspParams.bcastDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014402 wdiAddSTAParam.ucRmfEnabled =
Jeff Johnson295189b2012-06-20 16:38:30 -070014403 pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.ucRMFEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070014404 wdiAddSTAParam.ucBSSIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070014405 halConfigBssRspMsg.configBssRspParams.bssIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014406
Jeff Johnson295189b2012-06-20 16:38:30 -070014407 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
14408 "Add STA to the table index: %d", wdiAddSTAParam.ucSTAIdx );
Jeff Johnsone7245742012-09-05 17:12:55 -070014409
Jeff Johnson295189b2012-06-20 16:38:30 -070014410 WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam);
14411 /*-------------------------------------------------------------------------
14412 Add Broadcast STA only in AP mode
14413 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014414 if( pWDICtx->wdiCachedConfigBssReq.wdiReqInfo.ucOperMode ==
Jeff Johnson295189b2012-06-20 16:38:30 -070014415 WDI_BSS_OPERATIONAL_MODE_AP )
14416 {
14417 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
14418 "Add BCAST STA to table for index: %d",
14419 halConfigBssRspMsg.configBssRspParams.bssBcastStaIdx );
Jeff Johnsone7245742012-09-05 17:12:55 -070014420
14421 wpalMemoryCopy( &wdiBcastAddSTAParam, &wdiAddSTAParam,
Jeff Johnson295189b2012-06-20 16:38:30 -070014422 sizeof(WDI_AddStaParams) );
Jeff Johnsone7245742012-09-05 17:12:55 -070014423
Jeff Johnson295189b2012-06-20 16:38:30 -070014424 WDI_AddBcastSTAtoSTATable( pWDICtx, &wdiBcastAddSTAParam,
14425 halConfigBssRspMsg.configBssRspParams.bssBcastStaIdx );
14426 }
14427 wpalMutexRelease(&pWDICtx->wptMutex);
14428 }
14429 else
14430 {
14431 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14432 "Config BSS RSP failed with status : %s(%d)",
14433 WDI_getHALStatusMsgString(
Jeff Johnsone7245742012-09-05 17:12:55 -070014434 halConfigBssRspMsg.configBssRspParams.status),
Jeff Johnson295189b2012-06-20 16:38:30 -070014435 halConfigBssRspMsg.configBssRspParams.status);
14436
Jeff Johnsone7245742012-09-05 17:12:55 -070014437
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 /*Association was failed by HAL - remove session*/
14439 WDI_DeleteSession(pWDICtx, pBSSSes);
14440
14441 /*Association no longer in progress */
14442 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
14443
14444 /*Association no longer in progress - prepare pending assoc for processing*/
14445 WDI_DequeueAssocRequest(pWDICtx);
14446
14447 }
14448
14449 /*Notify UMAC*/
14450 wdiConfigBSSRspCb( &wdiConfigBSSParams, pWDICtx->pRspCBUserData);
14451
Jeff Johnsone7245742012-09-05 17:12:55 -070014452 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014453}/*WDI_ProcessConfigBSSRsp*/
14454
14455
14456/**
14457 @brief Process Del BSS Response function (called when a response
14458 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014459
14460 @param pWDICtx: pointer to the WLAN DAL context
14461 pEventData: pointer to the event information structure
14462
Jeff Johnson295189b2012-06-20 16:38:30 -070014463 @see
14464 @return Result of the function call
14465*/
14466WDI_Status
14467WDI_ProcessDelBSSRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014468(
Jeff Johnson295189b2012-06-20 16:38:30 -070014469 WDI_ControlBlockType* pWDICtx,
14470 WDI_EventInfoType* pEventData
14471)
14472{
14473 WDI_DelBSSRspParamsType wdiDelBSSParams;
14474 WDI_DelBSSRspCb wdiDelBSSRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070014475 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014476 WDI_BSSSessionType* pBSSSes = NULL;
14477
Jeff Johnsone7245742012-09-05 17:12:55 -070014478 tDeleteBssRspMsg halDelBssRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14480
14481 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014482 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 -------------------------------------------------------------------------*/
14484 if (( NULL == pEventData ) ||
14485 ( NULL == pEventData->pEventData))
14486 {
14487 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14488 "%s: Invalid parameters", __FUNCTION__);
14489 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014490 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014491 }
14492
14493 wdiDelBSSRspCb = (WDI_DelBSSRspCb)pWDICtx->pfncRspCB;
14494
14495 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014496 Extract response and send it to UMAC
Jeff Johnson295189b2012-06-20 16:38:30 -070014497 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014498 wpalMemoryCopy( &halDelBssRspMsg.deleteBssRspParams,
14499 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014500 sizeof(halDelBssRspMsg.deleteBssRspParams));
14501
14502
14503 wdiDelBSSParams.wdiStatus = WDI_HAL_2_WDI_STATUS(
Jeff Johnsone7245742012-09-05 17:12:55 -070014504 halDelBssRspMsg.deleteBssRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014505
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -070014506 wdiDelBSSParams.ucBssIdx = halDelBssRspMsg.deleteBssRspParams.bssIdx;
14507
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 wpalMutexAcquire(&pWDICtx->wptMutex);
14509
14510 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014511 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014513 ucCurrentBSSSesIdx = WDI_FindAssocSessionByBSSIdx( pWDICtx,
14514 halDelBssRspMsg.deleteBssRspParams.bssIdx,
14515 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -070014516
14517 /*-----------------------------------------------------------------------
14518 Del BSS response can only be received for an existing assoc that
Jeff Johnsone7245742012-09-05 17:12:55 -070014519 is current and in progress
Jeff Johnson295189b2012-06-20 16:38:30 -070014520 -----------------------------------------------------------------------*/
14521 if ( NULL == pBSSSes )
14522 {
14523 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14524 "Association sequence for this BSS does not yet exist or "
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -070014525 "association no longer in progress ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 }
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -070014527 else
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 {
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -070014529 /*Extract BSSID for the response to UMAC*/
14530 wpalMemoryCopy(wdiDelBSSParams.macBSSID,
14531 pBSSSes->macBSSID, WDI_MAC_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -070014532
Madan Mohan Koyyalamudif371f172012-10-31 16:35:43 -070014533 /*-----------------------------------------------------------------------
14534 The current session will be deleted
14535 -----------------------------------------------------------------------*/
14536 WDI_DeleteSession(pWDICtx, pBSSSes);
14537
14538
14539 /* Delete the BCAST STA entry from the STA table if SAP/GO session is deleted */
14540 if(WDI_INFRA_AP_MODE == pBSSSes->wdiBssType)
14541 {
14542 (void)WDI_STATableDelSta( pWDICtx, pBSSSes->bcastStaIdx );
14543 }
14544
14545 /* Delete the STA's in this BSS */
14546 WDI_STATableBSSDelSta(pWDICtx, halDelBssRspMsg.deleteBssRspParams.bssIdx);
14547 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 wpalMutexRelease(&pWDICtx->wptMutex);
14549
14550 /*Notify UMAC*/
14551 wdiDelBSSRspCb( &wdiDelBSSParams, pWDICtx->pRspCBUserData);
14552
Jeff Johnsone7245742012-09-05 17:12:55 -070014553 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014554}/*WDI_ProcessDelBSSRsp*/
14555
14556/**
14557 @brief Process Post Assoc Rsp function (called when a response
14558 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014559
14560 @param pWDICtx: pointer to the WLAN DAL context
14561 pEventData: pointer to the event information structure
14562
Jeff Johnson295189b2012-06-20 16:38:30 -070014563 @see
14564 @return Result of the function call
14565*/
14566WDI_Status
14567WDI_ProcessPostAssocRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014568(
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 WDI_ControlBlockType* pWDICtx,
14570 WDI_EventInfoType* pEventData
14571)
14572{
14573 WDI_PostAssocRspParamsType wdiPostAssocParams;
14574 WDI_PostAssocRspCb wdiPostAssocRspCb;
Jeff Johnsone7245742012-09-05 17:12:55 -070014575 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070014577 tPostAssocRspMsg halPostAssocRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14579
14580 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014581 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014582 -------------------------------------------------------------------------*/
14583 if (( NULL == pEventData ) ||
14584 ( NULL == pEventData->pEventData))
14585 {
14586 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14587 "%s: Invalid parameters", __FUNCTION__);
14588 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014589 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014590 }
14591
14592 wdiPostAssocRspCb = (WDI_PostAssocRspCb)pWDICtx->pfncRspCB;
14593
14594 /*-------------------------------------------------------------------------
14595 Extract response and send it to UMAC
14596 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014597 wpalMemoryCopy( &halPostAssocRspMsg.postAssocRspParams,
14598 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 sizeof(halPostAssocRspMsg.postAssocRspParams));
14600
14601 /*Extract the Post Assoc STA Params */
14602
Jeff Johnsone7245742012-09-05 17:12:55 -070014603 wdiPostAssocParams.staParams.ucSTAIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070014604 halPostAssocRspMsg.postAssocRspParams.configStaRspParams.staIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014605 wdiPostAssocParams.staParams.ucUcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014606 halPostAssocRspMsg.postAssocRspParams.configStaRspParams.ucUcastSig;
Jeff Johnsone7245742012-09-05 17:12:55 -070014607 wdiPostAssocParams.staParams.ucBcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014608 halPostAssocRspMsg.postAssocRspParams.configStaRspParams.ucBcastSig;
14609
Jeff Johnsone7245742012-09-05 17:12:55 -070014610 wdiPostAssocParams.wdiStatus =
14611 WDI_HAL_2_WDI_STATUS(halPostAssocRspMsg.postAssocRspParams.configStaRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014612
14613 /*Copy the MAC addresses from the cached storage in the WDI CB as they are not
14614 included in the response */
Jeff Johnsone7245742012-09-05 17:12:55 -070014615 wpalMemoryCopy( wdiPostAssocParams.staParams.macSTA,
14616 pWDICtx->wdiCachedPostAssocReq.wdiSTAParams.macSTA,
Jeff Johnson295189b2012-06-20 16:38:30 -070014617 WDI_MAC_ADDR_LEN);
14618
14619 /* Extract Post Assoc BSS Params */
14620
Jeff Johnsone7245742012-09-05 17:12:55 -070014621 wpalMemoryCopy( wdiPostAssocParams.bssParams.macBSSID,
14622 pWDICtx->wdiCachedPostAssocReq.wdiBSSParams.macBSSID,
14623 WDI_MAC_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -070014624
14625 /*Copy the MAC addresses from the cached storage in the WDI CB as they are not
14626 included in the response */
Jeff Johnsone7245742012-09-05 17:12:55 -070014627 wpalMemoryCopy( wdiPostAssocParams.bssParams.macSTA,
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 pWDICtx->wdiCachedPostAssocReq.wdiBSSParams.wdiSTAContext
14629 .macSTA, WDI_MAC_ADDR_LEN);
14630
Jeff Johnsone7245742012-09-05 17:12:55 -070014631 wdiPostAssocParams.bssParams.ucBcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014632 halPostAssocRspMsg.postAssocRspParams.configStaRspParams.ucBcastSig;
14633
Jeff Johnsone7245742012-09-05 17:12:55 -070014634 wdiPostAssocParams.bssParams.ucUcastSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070014635 halPostAssocRspMsg.postAssocRspParams.configStaRspParams.ucUcastSig;
14636
14637 wdiPostAssocParams.bssParams.ucBSSIdx =
14638 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.bssIdx;
14639
Jeff Johnsone7245742012-09-05 17:12:55 -070014640 wdiPostAssocParams.bssParams.ucSTAIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070014641 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.bssStaIdx;
14642
14643 wpalMutexAcquire(&pWDICtx->wptMutex);
14644
14645 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014646 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070014647 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014648 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
Jeff Johnson295189b2012-06-20 16:38:30 -070014649 wdiPostAssocParams.bssParams.
Jeff Johnsone7245742012-09-05 17:12:55 -070014650 macBSSID, &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -070014651
14652 /*-----------------------------------------------------------------------
14653 Post assoc response can only be received for an existing assoc that
Jeff Johnsone7245742012-09-05 17:12:55 -070014654 is current and in progress
Jeff Johnson295189b2012-06-20 16:38:30 -070014655 -----------------------------------------------------------------------*/
14656 if (( NULL == pBSSSes ) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014657 ( ucCurrentBSSSesIdx != pWDICtx->ucCurrentBSSSesIdx ) ||
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 ( eWLAN_PAL_FALSE == pWDICtx->bAssociationInProgress ))
14659 {
14660 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14661 "Association sequence for this BSS does not yet exist or "
14662 "association no longer in progress - mysterious HAL response");
14663
Jeff Johnsone7245742012-09-05 17:12:55 -070014664 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
14665
Jeff Johnson295189b2012-06-20 16:38:30 -070014666 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070014667 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 }
14669
14670 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014671 Post Assoc Request is only allowed in Joining state
Jeff Johnson295189b2012-06-20 16:38:30 -070014672 -----------------------------------------------------------------------*/
14673 if ( WDI_ASSOC_JOINING_ST != pBSSSes->wdiAssocState)
14674 {
14675 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14676 "Post Assoc not allowed before JOIN - failing request "
14677 "strange HAL response");
14678
Jeff Johnsone7245742012-09-05 17:12:55 -070014679 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
14680
Jeff Johnson295189b2012-06-20 16:38:30 -070014681 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070014682 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070014683 }
14684
14685 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014686 If assoc has failed the current session will be deleted
Jeff Johnson295189b2012-06-20 16:38:30 -070014687 -----------------------------------------------------------------------*/
14688 if ( WDI_STATUS_SUCCESS != wdiPostAssocParams.wdiStatus )
14689 {
14690 /*Association was failed by HAL - remove session*/
14691 WDI_DeleteSession(pWDICtx, pBSSSes);
14692 }
14693 else
14694 {
14695 /*Transition to state POST Assoc*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014696 pBSSSes->wdiAssocState = WDI_ASSOC_POST_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -070014697
14698 /*Save DPU Info*/
Jeff Johnsone7245742012-09-05 17:12:55 -070014699 pBSSSes->bcastMgmtDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.mgmtDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014701 pBSSSes->bcastMgmtDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014702 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.mgmtDpuSignature;
Jeff Johnsone7245742012-09-05 17:12:55 -070014703 pBSSSes->bcastDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070014704 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.bcastDpuDescIndx;
Jeff Johnsone7245742012-09-05 17:12:55 -070014705 pBSSSes->bcastDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070014706 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.bcastDpuSignature;
14707
Jeff Johnsone7245742012-09-05 17:12:55 -070014708 pBSSSes->ucBSSIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 halPostAssocRspMsg.postAssocRspParams.configBssRspParams.bssIdx;
14710 }
14711
14712 /*Association no longer in progress */
14713 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
14714
14715 /*Association no longer in progress - prepare pending assoc for processing*/
14716 WDI_DequeueAssocRequest(pWDICtx);
14717
14718 wpalMutexRelease(&pWDICtx->wptMutex);
14719
14720 /*Notify UMAC*/
14721 wdiPostAssocRspCb( &wdiPostAssocParams, pWDICtx->pRspCBUserData);
14722
Jeff Johnsone7245742012-09-05 17:12:55 -070014723 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014724}/*WDI_ProcessPostAssocRsp*/
14725
14726/**
Jeff Johnsone7245742012-09-05 17:12:55 -070014727 @brief Process Del STA Rsp function (called when a response is
Jeff Johnson295189b2012-06-20 16:38:30 -070014728 being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014729
14730 @param pWDICtx: pointer to the WLAN DAL context
14731 pEventData: pointer to the event information structure
14732
Jeff Johnson295189b2012-06-20 16:38:30 -070014733 @see
14734 @return Result of the function call
14735*/
14736WDI_Status
14737WDI_ProcessDelSTARsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014738(
Jeff Johnson295189b2012-06-20 16:38:30 -070014739 WDI_ControlBlockType* pWDICtx,
14740 WDI_EventInfoType* pEventData
14741)
14742{
14743 WDI_DelSTARspParamsType wdiDelSTARsp;
14744 WDI_DelSTARspCb wdiDelSTARspCb;
14745 wpt_uint8 staType;
Jeff Johnsone7245742012-09-05 17:12:55 -070014746 tDeleteStaRspMsg halDelStaRspMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14748
14749 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014750 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 -------------------------------------------------------------------------*/
14752 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14753 ( NULL == pEventData->pEventData))
14754 {
14755 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14756 "%s: Invalid parameters", __FUNCTION__);
14757 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014758 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014759 }
14760
14761 wdiDelSTARspCb = (WDI_DelSTARspCb)pWDICtx->pfncRspCB;
14762
14763 /*-------------------------------------------------------------------------
14764 Extract response and send it to UMAC
14765 -------------------------------------------------------------------------*/
14766 wpalMemoryCopy( &halDelStaRspMsg.delStaRspParams,
Jeff Johnsone7245742012-09-05 17:12:55 -070014767 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070014768 sizeof(halDelStaRspMsg.delStaRspParams));
14769
14770 wdiDelSTARsp.ucSTAIdx = halDelStaRspMsg.delStaRspParams.staId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014771 wdiDelSTARsp.wdiStatus =
14772 WDI_HAL_2_WDI_STATUS(halDelStaRspMsg.delStaRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014773
14774 WDI_STATableGetStaType(pWDICtx, wdiDelSTARsp.ucSTAIdx, &staType);
14775
14776 /* If the DEL STA request is for self STA do not delete it - Really weird!!What happens in concurrency */
14777 if(staType == WDI_STA_ENTRY_SELF)
14778 {
14779 WDI_StaStruct* pSTATable = (WDI_StaStruct*) pWDICtx->staTable;
14780
14781 /* At this point add the self-STA */
14782
14783 /*! TO DO: wdiAddSTAParam.ucWmmEnabled */
14784 /*! TO DO: wdiAddSTAParam.ucHTCapable */
14785 /*! TO DO: wdiAddSTAParam.ucRmfEnabled */
14786
14787#define WDI_DPU_SELF_STA_DEFAULT_IDX 0
14788#define WDI_DPU_SELF_STA_DEFAULT_SIG 0
14789
14790 //all DPU indices are the same for self STA
14791 pSTATable[wdiDelSTARsp.ucSTAIdx].dpuIndex = WDI_DPU_SELF_STA_DEFAULT_IDX;
14792 pSTATable[wdiDelSTARsp.ucSTAIdx].bcastDpuIndex = WDI_DPU_SELF_STA_DEFAULT_IDX;
14793 pSTATable[wdiDelSTARsp.ucSTAIdx].bcastMgmtDpuIndex = WDI_DPU_SELF_STA_DEFAULT_IDX;
14794 pSTATable[wdiDelSTARsp.ucSTAIdx].bcastDpuSignature = WDI_DPU_SELF_STA_DEFAULT_SIG;
14795 pSTATable[wdiDelSTARsp.ucSTAIdx].bcastMgmtDpuSignature = WDI_DPU_SELF_STA_DEFAULT_SIG;
14796 pSTATable[wdiDelSTARsp.ucSTAIdx].dpuSig = WDI_DPU_SELF_STA_DEFAULT_SIG;
Madan Mohan Koyyalamudi15a48f02012-10-05 17:13:53 -070014797
14798 pSTATable[wdiDelSTARsp.ucSTAIdx].bssIdx = WDI_BSS_INVALID_IDX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014799 }
14800 else
14801 {
14802 //Delete the station in the table
14803 WDI_STATableDelSta( pWDICtx, wdiDelSTARsp.ucSTAIdx);
14804 }
14805
14806 /*Notify UMAC*/
14807 wdiDelSTARspCb( &wdiDelSTARsp, pWDICtx->pRspCBUserData);
14808
Jeff Johnsone7245742012-09-05 17:12:55 -070014809 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014810}/*WDI_ProcessDelSTARsp*/
14811
14812
14813/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070014814 Security Response Processing Functions
Jeff Johnson295189b2012-06-20 16:38:30 -070014815==========================================================================*/
14816
14817/**
14818 @brief Process Set BSS Key Rsp function (called when a response
14819 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014820
14821 @param pWDICtx: pointer to the WLAN DAL context
14822 pEventData: pointer to the event information structure
14823
Jeff Johnson295189b2012-06-20 16:38:30 -070014824 @see
14825 @return Result of the function call
14826*/
14827WDI_Status
14828WDI_ProcessSetBssKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014829(
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 WDI_ControlBlockType* pWDICtx,
14831 WDI_EventInfoType* pEventData
14832)
14833{
14834 WDI_Status wdiStatus;
14835 eHalStatus halStatus;
14836 WDI_SetBSSKeyRspCb wdiSetBSSKeyRspCb;
14837 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14838
14839 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014840 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 -------------------------------------------------------------------------*/
14842 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14843 ( NULL == pEventData->pEventData))
14844 {
14845 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14846 "%s: Invalid parameters", __FUNCTION__);
14847 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014848 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014849 }
14850
14851 wdiSetBSSKeyRspCb = (WDI_SetBSSKeyRspCb)pWDICtx->pfncRspCB;
14852
14853 /*-------------------------------------------------------------------------
14854 Extract response and send it to UMAC
14855 -------------------------------------------------------------------------*/
14856 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070014857 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070014858
14859 if ( eHAL_STATUS_SUCCESS != halStatus )
14860 {
14861 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14862 "Set BSS Key failed with status %s (%d)",
14863 WDI_getHALStatusMsgString(halStatus),
14864 halStatus);
14865 /* send the status to UMAC, don't return from here*/
14866 }
14867
14868 /*Notify UMAC*/
14869 wdiSetBSSKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14870
Jeff Johnsone7245742012-09-05 17:12:55 -070014871 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014872}/*WDI_ProcessSetBssKeyRsp*/
14873
14874/**
14875 @brief Process Remove BSS Key Rsp function (called when a response
14876 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014877
14878 @param pWDICtx: pointer to the WLAN DAL context
14879 pEventData: pointer to the event information structure
14880
Jeff Johnson295189b2012-06-20 16:38:30 -070014881 @see
14882 @return Result of the function call
14883*/
14884WDI_Status
14885WDI_ProcessRemoveBssKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014886(
Jeff Johnson295189b2012-06-20 16:38:30 -070014887 WDI_ControlBlockType* pWDICtx,
14888 WDI_EventInfoType* pEventData
14889)
14890{
14891 WDI_Status wdiStatus;
14892 eHalStatus halStatus;
14893 WDI_RemoveBSSKeyRspCb wdiRemoveBSSKeyRspCb;
14894 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14895
14896 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014897 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014898 -------------------------------------------------------------------------*/
14899 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14900 ( NULL == pEventData->pEventData))
14901 {
14902 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14903 "%s: Invalid parameters", __FUNCTION__);
14904 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014905 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 }
14907
14908 wdiRemoveBSSKeyRspCb = (WDI_RemoveBSSKeyRspCb)pWDICtx->pfncRspCB;
14909
14910 /*-------------------------------------------------------------------------
14911 Extract response and send it to UMAC
14912 -------------------------------------------------------------------------*/
14913 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070014914 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070014915
14916 if ( eHAL_STATUS_SUCCESS != halStatus )
14917 {
14918 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14919 "Remove BSS Key failed with status %s (%d )",
14920 WDI_getHALStatusMsgString(halStatus),
14921 halStatus);
14922 /* send the status to UMAC, don't return from here*/
14923 }
14924
14925 /*Notify UMAC*/
14926 wdiRemoveBSSKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14927
Jeff Johnsone7245742012-09-05 17:12:55 -070014928 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014929}/*WDI_ProcessSetBssKeyRsp*/
14930
14931
14932/**
14933 @brief Process Set STA Key Rsp function (called when a response
14934 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014935
14936 @param pWDICtx: pointer to the WLAN DAL context
14937 pEventData: pointer to the event information structure
14938
Jeff Johnson295189b2012-06-20 16:38:30 -070014939 @see
14940 @return Result of the function call
14941*/
14942WDI_Status
14943WDI_ProcessSetStaKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070014944(
Jeff Johnson295189b2012-06-20 16:38:30 -070014945 WDI_ControlBlockType* pWDICtx,
14946 WDI_EventInfoType* pEventData
14947)
14948{
14949 WDI_Status wdiStatus;
14950 eHalStatus halStatus;
14951 WDI_SetSTAKeyRspCb wdiSetSTAKeyRspCb;
14952 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
14953
14954 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070014955 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070014956 -------------------------------------------------------------------------*/
14957 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
14958 ( NULL == pEventData->pEventData))
14959 {
14960 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
14961 "%s: Invalid parameters", __FUNCTION__);
14962 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070014963 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014964 }
14965
14966 wdiSetSTAKeyRspCb = (WDI_SetSTAKeyRspCb)pWDICtx->pfncRspCB;
14967
14968 /*-------------------------------------------------------------------------
14969 Extract response and send it to UMAC
14970 -------------------------------------------------------------------------*/
14971 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070014972 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070014973
14974 if ( eHAL_STATUS_SUCCESS != halStatus )
14975 {
14976 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
14977 "Set STA Key failed with status %s (%d)",
14978 WDI_getHALStatusMsgString(halStatus),
14979 halStatus);
14980 /* send the status to UMAC, don't return from here*/
14981 }
14982
14983 /*Notify UMAC*/
14984 wdiSetSTAKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
14985
Jeff Johnsone7245742012-09-05 17:12:55 -070014986 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070014987}/*WDI_ProcessSetSTAKeyRsp*/
14988
14989/**
Jeff Johnsone7245742012-09-05 17:12:55 -070014990 @brief Process Remove STA Key Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070014991 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070014992
14993 @param pWDICtx: pointer to the WLAN DAL context
14994 pEventData: pointer to the event information structure
14995
Jeff Johnson295189b2012-06-20 16:38:30 -070014996 @see
14997 @return Result of the function call
14998*/
14999WDI_Status
15000WDI_ProcessRemoveStaKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015001(
Jeff Johnson295189b2012-06-20 16:38:30 -070015002 WDI_ControlBlockType* pWDICtx,
15003 WDI_EventInfoType* pEventData
15004)
15005{
15006 WDI_Status wdiStatus;
15007 eHalStatus halStatus;
15008 WDI_RemoveSTAKeyRspCb wdiRemoveSTAKeyRspCb;
15009 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15010
15011 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015012 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 -------------------------------------------------------------------------*/
15014 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15015 ( NULL == pEventData->pEventData))
15016 {
15017 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15018 "%s: Invalid parameters", __FUNCTION__);
15019 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015020 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015021 }
15022
15023 wdiRemoveSTAKeyRspCb = (WDI_RemoveSTAKeyRspCb)pWDICtx->pfncRspCB;
15024
15025 /*-------------------------------------------------------------------------
15026 Extract response and send it to UMAC
15027 -------------------------------------------------------------------------*/
15028 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070015029 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015030
15031 if ( eHAL_STATUS_SUCCESS != halStatus )
15032 {
15033 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
15034 "Remove STA Key failed with status %s (%d)",
15035 WDI_getHALStatusMsgString(halStatus),
15036 halStatus);
15037 /* send the status to UMAC, don't return from here*/
15038 }
15039
15040 /*Notify UMAC*/
15041 wdiRemoveSTAKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15042
Jeff Johnsone7245742012-09-05 17:12:55 -070015043 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015044}/*WDI_ProcessRemoveStaKeyRsp*/
15045
15046/**
Jeff Johnsone7245742012-09-05 17:12:55 -070015047 @brief Process Set STA Bcast Key Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070015048 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015049
15050 @param pWDICtx: pointer to the WLAN DAL context
15051 pEventData: pointer to the event information structure
15052
Jeff Johnson295189b2012-06-20 16:38:30 -070015053 @see
15054 @return Result of the function call
15055*/
15056WDI_Status
15057WDI_ProcessSetStaBcastKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015058(
Jeff Johnson295189b2012-06-20 16:38:30 -070015059 WDI_ControlBlockType* pWDICtx,
15060 WDI_EventInfoType* pEventData
15061)
15062{
15063 WDI_Status wdiStatus;
15064 eHalStatus halStatus;
15065 WDI_SetSTAKeyRspCb wdiSetSTABcastKeyRspCb;
15066 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15067
15068 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015069 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015070 -------------------------------------------------------------------------*/
15071 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15072 ( NULL == pEventData->pEventData))
15073 {
15074 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15075 "%s: Invalid parameters", __FUNCTION__);
15076 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015077 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015078 }
15079
15080 wdiSetSTABcastKeyRspCb = (WDI_SetSTAKeyRspCb)pWDICtx->pfncRspCB;
15081
15082 /*-------------------------------------------------------------------------
15083 Extract response and send it to UMAC
15084 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015085 wpalMemoryCopy( &halStatus,
15086 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015087 sizeof(halStatus));
15088
Jeff Johnsone7245742012-09-05 17:12:55 -070015089 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015090
15091 if ( eHAL_STATUS_SUCCESS != halStatus )
15092 {
15093 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
15094 "Set STA Key failed with status %s (%d)",
15095 WDI_getHALStatusMsgString(halStatus),
15096 halStatus);
15097 /* send the status to UMAC, don't return from here*/
15098 }
15099
15100 /*Notify UMAC*/
15101 wdiSetSTABcastKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15102
Jeff Johnsone7245742012-09-05 17:12:55 -070015103 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015104}/*WDI_ProcessSetSTABcastKeyRsp*/
15105
15106/**
15107 @brief Process Remove STA Bcast Key Rsp function (called when a
15108 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015109
15110 @param pWDICtx: pointer to the WLAN DAL context
15111 pEventData: pointer to the event information structure
15112
Jeff Johnson295189b2012-06-20 16:38:30 -070015113 @see
15114 @return Result of the function call
15115*/
15116WDI_Status
15117WDI_ProcessRemoveStaBcastKeyRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015118(
Jeff Johnson295189b2012-06-20 16:38:30 -070015119 WDI_ControlBlockType* pWDICtx,
15120 WDI_EventInfoType* pEventData
15121)
15122{
15123 WDI_Status wdiStatus;
15124 eHalStatus halStatus;
15125 WDI_RemoveSTAKeyRspCb wdiRemoveSTABcastKeyRspCb;
15126 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15127
15128 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015129 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015130 -------------------------------------------------------------------------*/
15131 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15132 ( NULL == pEventData->pEventData))
15133 {
15134 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15135 "%s: Invalid parameters", __FUNCTION__);
15136 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015137 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015138 }
15139
15140 wdiRemoveSTABcastKeyRspCb = (WDI_RemoveSTAKeyRspCb)pWDICtx->pfncRspCB;
15141
15142 /*-------------------------------------------------------------------------
15143 Extract response and send it to UMAC
15144 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015145 wpalMemoryCopy( &halStatus,
15146 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015147 sizeof(halStatus));
15148
Jeff Johnsone7245742012-09-05 17:12:55 -070015149 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015150
15151 if ( eHAL_STATUS_SUCCESS != halStatus )
15152 {
15153 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
15154 "Remove STA Key failed with status %s (%d)",
15155 WDI_getHALStatusMsgString(halStatus),
15156 halStatus);
15157 /* send the status to UMAC, don't return from here*/
15158 }
15159
15160 /*Notify UMAC*/
15161 wdiRemoveSTABcastKeyRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15162
Jeff Johnsone7245742012-09-05 17:12:55 -070015163 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015164}/*WDI_ProcessRemoveStaBcastKeyRsp*/
15165
15166
15167/*==========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070015168 QoS and BA Response Processing Functions
Jeff Johnson295189b2012-06-20 16:38:30 -070015169==========================================================================*/
15170
15171/**
15172 @brief Process Add TSpec Rsp function (called when a response
15173 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015174
15175 @param pWDICtx: pointer to the WLAN DAL context
15176 pEventData: pointer to the event information structure
15177
Jeff Johnson295189b2012-06-20 16:38:30 -070015178 @see
15179 @return Result of the function call
15180*/
15181WDI_Status
15182WDI_ProcessAddTSpecRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015183(
Jeff Johnson295189b2012-06-20 16:38:30 -070015184 WDI_ControlBlockType* pWDICtx,
15185 WDI_EventInfoType* pEventData
15186)
15187{
15188 WDI_Status wdiStatus;
15189 eHalStatus halStatus;
15190 WDI_AddTsRspCb wdiAddTsRspCb;
15191 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15192
15193 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015194 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015195 -------------------------------------------------------------------------*/
15196 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15197 ( NULL == pEventData->pEventData))
15198 {
15199 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15200 "%s: Invalid parameters", __FUNCTION__);
15201 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015202 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015203 }
15204
15205 wdiAddTsRspCb = (WDI_AddTsRspCb)pWDICtx->pfncRspCB;
15206
15207 /*-------------------------------------------------------------------------
15208 Extract response and send it to UMAC
15209 -------------------------------------------------------------------------*/
15210 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070015211 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015212
15213 /*Notify UMAC*/
15214 wdiAddTsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15215
Jeff Johnsone7245742012-09-05 17:12:55 -070015216 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015217}/*WDI_ProcessAddTSpecRsp*/
15218
15219
15220/**
15221 @brief Process Del TSpec Rsp function (called when a response
15222 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015223
15224 @param pWDICtx: pointer to the WLAN DAL context
15225 pEventData: pointer to the event information structure
15226
Jeff Johnson295189b2012-06-20 16:38:30 -070015227 @see
15228 @return Result of the function call
15229*/
15230WDI_Status
15231WDI_ProcessDelTSpecRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015232(
Jeff Johnson295189b2012-06-20 16:38:30 -070015233 WDI_ControlBlockType* pWDICtx,
15234 WDI_EventInfoType* pEventData
15235)
15236{
15237 WDI_Status wdiStatus;
15238 eHalStatus halStatus;
15239 WDI_DelTsRspCb wdiDelTsRspCb;
15240 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15241
15242 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015243 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 -------------------------------------------------------------------------*/
15245 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15246 ( NULL == pEventData->pEventData))
15247 {
15248 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15249 "%s: Invalid parameters", __FUNCTION__);
15250 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015251 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015252 }
15253
15254 wdiDelTsRspCb = (WDI_DelTsRspCb)pWDICtx->pfncRspCB;
15255
15256 /*-------------------------------------------------------------------------
15257 Extract response and send it to UMAC
15258 -------------------------------------------------------------------------*/
15259 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070015260 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015261
15262 /*Notify UMAC*/
15263 wdiDelTsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15264
Jeff Johnsone7245742012-09-05 17:12:55 -070015265 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015266}/*WDI_ProcessDelTSpecRsp*/
15267
15268/**
Jeff Johnsone7245742012-09-05 17:12:55 -070015269 @brief Process Update EDCA Parameters Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070015270 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015271
15272 @param pWDICtx: pointer to the WLAN DAL context
15273 pEventData: pointer to the event information structure
15274
Jeff Johnson295189b2012-06-20 16:38:30 -070015275 @see
15276 @return Result of the function call
15277*/
15278WDI_Status
15279WDI_ProcessUpdateEDCAParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015280(
Jeff Johnson295189b2012-06-20 16:38:30 -070015281 WDI_ControlBlockType* pWDICtx,
15282 WDI_EventInfoType* pEventData
15283)
15284{
15285 WDI_Status wdiStatus;
15286 eHalStatus halStatus;
15287 WDI_UpdateEDCAParamsRspCb wdiUpdateEDCAParamsRspCb;
15288 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15289
15290 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015291 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 -------------------------------------------------------------------------*/
15293 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15294 ( NULL == pEventData->pEventData))
15295 {
15296 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15297 "%s: Invalid parameters", __FUNCTION__);
15298 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015299 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 }
15301
15302 wdiUpdateEDCAParamsRspCb = (WDI_UpdateEDCAParamsRspCb)pWDICtx->pfncRspCB;
15303
15304 /*-------------------------------------------------------------------------
15305 Extract response and send it to UMAC
15306 -------------------------------------------------------------------------*/
15307 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070015308 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015309
15310 /*Notify UMAC*/
15311 wdiUpdateEDCAParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15312
Jeff Johnsone7245742012-09-05 17:12:55 -070015313 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015314}/*WDI_ProcessUpdateEDCAParamsRsp*/
15315
15316
15317/**
15318 @brief Process Add BA Rsp function (called when a response
15319 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015320
15321 @param pWDICtx: pointer to the WLAN DAL context
15322 pEventData: pointer to the event information structure
15323
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 @see
15325 @return Result of the function call
15326*/
15327WDI_Status
15328WDI_ProcessAddBASessionRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015329(
Jeff Johnson295189b2012-06-20 16:38:30 -070015330 WDI_ControlBlockType* pWDICtx,
15331 WDI_EventInfoType* pEventData
15332)
15333{
15334 WDI_AddBASessionRspCb wdiAddBASessionRspCb;
15335
15336 tAddBASessionRspParams halBASessionRsp;
15337 WDI_AddBASessionRspParamsType wdiBASessionRsp;
15338
Jeff Johnsone7245742012-09-05 17:12:55 -070015339
Jeff Johnson295189b2012-06-20 16:38:30 -070015340 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15341
15342 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015343 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015344 -------------------------------------------------------------------------*/
15345 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15346 ( NULL == pEventData->pEventData))
15347 {
15348 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15349 "%s: Invalid parameters", __FUNCTION__);
15350 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015351 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015352 }
15353
15354 wdiAddBASessionRspCb = (WDI_AddBASessionRspCb)pWDICtx->pfncRspCB;
15355
15356 /*-------------------------------------------------------------------------
15357 Extract response and send it to UMAC
15358 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015359 wpalMemoryCopy( &halBASessionRsp,
15360 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 sizeof(halBASessionRsp));
15362
15363 wdiBASessionRsp.wdiStatus = WDI_HAL_2_WDI_STATUS(halBASessionRsp.status);
15364
Jeff Johnson43971f52012-07-17 12:26:56 -070015365 if ( WDI_STATUS_SUCCESS == wdiBASessionRsp.wdiStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070015366 {
15367 wdiBASessionRsp.ucBaDialogToken = halBASessionRsp.baDialogToken;
15368 wdiBASessionRsp.ucBaTID = halBASessionRsp.baTID;
15369 wdiBASessionRsp.ucBaBufferSize = halBASessionRsp.baBufferSize;
15370 wdiBASessionRsp.usBaSessionID = halBASessionRsp.baSessionID;
15371 wdiBASessionRsp.ucWinSize = halBASessionRsp.winSize;
15372 wdiBASessionRsp.ucSTAIdx = halBASessionRsp.STAID;
15373 wdiBASessionRsp.usBaSSN = halBASessionRsp.SSN;
15374 }
15375
15376 /*Notify UMAC*/
15377 wdiAddBASessionRspCb( &wdiBASessionRsp, pWDICtx->pRspCBUserData);
15378
Jeff Johnsone7245742012-09-05 17:12:55 -070015379 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015380}/*WDI_ProcessAddSessionBARsp*/
15381
15382
15383/**
15384 @brief Process Del BA Rsp function (called when a response
15385 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015386
15387 @param pWDICtx: pointer to the WLAN DAL context
15388 pEventData: pointer to the event information structure
15389
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 @see
15391 @return Result of the function call
15392*/
15393WDI_Status
15394WDI_ProcessDelBARsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015395(
Jeff Johnson295189b2012-06-20 16:38:30 -070015396 WDI_ControlBlockType* pWDICtx,
15397 WDI_EventInfoType* pEventData
15398)
15399{
15400 WDI_Status wdiStatus;
15401 eHalStatus halStatus;
15402 WDI_DelBARspCb wdiDelBARspCb;
15403 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15404
15405 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015406 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015407 -------------------------------------------------------------------------*/
15408 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15409 ( NULL == pEventData->pEventData))
15410 {
15411 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15412 "%s: Invalid parameters", __FUNCTION__);
15413 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015414 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015415 }
15416
15417 wdiDelBARspCb = (WDI_DelBARspCb)pWDICtx->pfncRspCB;
15418
15419 /*-------------------------------------------------------------------------
15420 Extract response and send it to UMAC
15421 -------------------------------------------------------------------------*/
15422 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070015423 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015424
15425 if ( eHAL_STATUS_SUCCESS == halStatus )
15426 {
15427 /*! TO DO: I should notify the DAL Data Path that the BA was deleted*/
15428 }
15429
15430 /*Notify UMAC*/
15431 wdiDelBARspCb( wdiStatus, pWDICtx->pRspCBUserData);
15432
Jeff Johnsone7245742012-09-05 17:12:55 -070015433 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015434}/*WDI_ProcessDelBARsp*/
15435
15436#ifdef FEATURE_WLAN_CCX
15437/**
15438 @brief Process TSM Stats Rsp function (called when a response
15439 is being received over the bus from HAL)
15440
15441 @param pWDICtx: pointer to the WLAN DAL context
15442 pEventData: pointer to the event information structure
15443
15444 @see
15445 @return Result of the function call
15446*/
15447WDI_Status
15448WDI_ProcessTsmStatsRsp
15449(
15450 WDI_ControlBlockType* pWDICtx,
15451 WDI_EventInfoType* pEventData
15452)
15453{
15454 WDI_TsmRspCb wdiTsmStatsRspCb;
15455 tTsmStatsRspMsg halTsmStatsRspMsg;
15456 WDI_TSMStatsRspParamsType wdiTsmStatsRspParams;
15457 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15458
15459 /*-------------------------------------------------------------------------
15460 Sanity check
15461 -------------------------------------------------------------------------*/
15462 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15463 ( NULL == pEventData->pEventData))
15464 {
15465 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
15466 "%s: Invalid parameters", __FUNCTION__);
15467 WDI_ASSERT(0);
15468 return WDI_STATUS_E_FAILURE;
15469 }
15470
15471 wdiTsmStatsRspCb = (WDI_TsmRspCb)pWDICtx->pfncRspCB;
15472
15473 /*-------------------------------------------------------------------------
15474 Unpack HAL Response Message - the header was already extracted by the
15475 main Response Handling procedure
15476 -------------------------------------------------------------------------*/
15477 wpalMemoryCopy( &halTsmStatsRspMsg.tsmStatsRspParams,
15478 pEventData->pEventData,
15479 sizeof(halTsmStatsRspMsg.tsmStatsRspParams));
15480
15481 wdiTsmStatsRspParams.UplinkPktQueueDly = halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktQueueDly;
15482 wpalMemoryCopy( wdiTsmStatsRspParams.UplinkPktQueueDlyHist,
15483 halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktQueueDlyHist,
15484 sizeof(halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktQueueDlyHist)/
15485 sizeof(halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktQueueDlyHist[0]));
15486 wdiTsmStatsRspParams.UplinkPktTxDly = halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktTxDly;
15487 wdiTsmStatsRspParams.UplinkPktLoss = halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktLoss;
15488 wdiTsmStatsRspParams.UplinkPktCount = halTsmStatsRspMsg.tsmStatsRspParams.UplinkPktCount;
15489 wdiTsmStatsRspParams.RoamingCount = halTsmStatsRspMsg.tsmStatsRspParams.RoamingCount;
15490 wdiTsmStatsRspParams.RoamingDly = halTsmStatsRspMsg.tsmStatsRspParams.RoamingDly;
15491 wdiTsmStatsRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(
15492 halTsmStatsRspMsg.tsmStatsRspParams.status);
15493
15494 /*Notify UMAC*/
15495 wdiTsmStatsRspCb( &wdiTsmStatsRspParams, pWDICtx->pRspCBUserData);
15496
15497 return WDI_STATUS_SUCCESS;
15498}/*WDI_ProcessTsmStatsRsp*/
15499
15500#endif
15501
15502
15503
15504/**
15505 @brief Process Flush AC Rsp function (called when a response
15506 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015507
15508 @param pWDICtx: pointer to the WLAN DAL context
15509 pEventData: pointer to the event information structure
15510
Jeff Johnson295189b2012-06-20 16:38:30 -070015511 @see
15512 @return Result of the function call
15513*/
15514WDI_Status
15515WDI_ProcessFlushAcRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015516(
Jeff Johnson295189b2012-06-20 16:38:30 -070015517 WDI_ControlBlockType* pWDICtx,
15518 WDI_EventInfoType* pEventData
15519)
15520{
15521 WDI_Status wdiStatus;
15522 eHalStatus halStatus;
15523 WDI_FlushAcRspCb wdiFlushAcRspCb;
15524 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15525
15526 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015527 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015528 -------------------------------------------------------------------------*/
15529 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15530 ( NULL == pEventData->pEventData))
15531 {
15532 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15533 "%s: Invalid parameters", __FUNCTION__);
15534 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015535 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 }
15537
15538 wdiFlushAcRspCb = (WDI_FlushAcRspCb)pWDICtx->pfncRspCB;
15539
15540 /*-------------------------------------------------------------------------
15541 Extract response and send it to UMAC
15542 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015543 wpalMemoryCopy( &halStatus,
15544 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 sizeof(halStatus));
15546
Jeff Johnsone7245742012-09-05 17:12:55 -070015547 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015548
15549 /*Notify UMAC*/
15550 wdiFlushAcRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15551
Jeff Johnsone7245742012-09-05 17:12:55 -070015552 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015553}/*WDI_ProcessFlushAcRsp*/
15554
15555/**
Jeff Johnsone7245742012-09-05 17:12:55 -070015556 @brief Process BT AMP event Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070015557 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015558
15559 @param pWDICtx: pointer to the WLAN DAL context
15560 pEventData: pointer to the event information structure
15561
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 @see
15563 @return Result of the function call
15564*/
15565WDI_Status
15566WDI_ProcessBtAmpEventRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015567(
Jeff Johnson295189b2012-06-20 16:38:30 -070015568 WDI_ControlBlockType* pWDICtx,
15569 WDI_EventInfoType* pEventData
15570)
15571{
15572 WDI_Status wdiStatus;
15573 eHalStatus halStatus;
15574 WDI_BtAmpEventRspCb wdiBtAmpEventRspCb;
15575 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15576
15577 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015578 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015579 -------------------------------------------------------------------------*/
15580 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15581 ( NULL == pEventData->pEventData))
15582 {
15583 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15584 "%s: Invalid parameters", __FUNCTION__);
15585 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015586 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015587 }
15588
15589 wdiBtAmpEventRspCb = (WDI_BtAmpEventRspCb)pWDICtx->pfncRspCB;
15590
15591 /*-------------------------------------------------------------------------
15592 Extract response and send it to UMAC
15593 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015594 wpalMemoryCopy( &halStatus,
15595 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015596 sizeof(halStatus));
15597
Jeff Johnsone7245742012-09-05 17:12:55 -070015598 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070015599
15600 /*Notify UMAC*/
15601 wdiBtAmpEventRspCb( wdiStatus, pWDICtx->pRspCBUserData);
15602
Jeff Johnsone7245742012-09-05 17:12:55 -070015603 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015604}/*WDI_ProcessBtAmpEventRsp*/
15605
15606
15607/**
Jeff Johnsone7245742012-09-05 17:12:55 -070015608 @brief Process ADD STA SELF Rsp function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070015609 when a response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015610
15611 @param pWDICtx: pointer to the WLAN DAL context
15612 pEventData: pointer to the event information structure
15613
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 @see
15615 @return Result of the function call
15616*/
15617WDI_Status
15618WDI_ProcessAddSTASelfRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015619(
Jeff Johnson295189b2012-06-20 16:38:30 -070015620 WDI_ControlBlockType* pWDICtx,
15621 WDI_EventInfoType* pEventData
15622)
15623{
15624 WDI_AddSTASelfRspParamsType wdiAddSTASelfParams;
15625 WDI_AddSTASelfParamsRspCb wdiAddSTASelfReqParamsRspCb;
15626 tAddStaSelfRspMsg halAddStaSelfRsp;
15627 WDI_AddStaParams wdiAddSTAParam = {0};
15628 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15629
15630 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015631 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015632 -------------------------------------------------------------------------*/
15633 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15634 ( NULL == pEventData->pEventData))
15635 {
15636 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15637 "%s: Invalid parameters", __FUNCTION__);
15638 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015639 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015640 }
15641
Jeff Johnsone7245742012-09-05 17:12:55 -070015642 wdiAddSTASelfReqParamsRspCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070015643 (WDI_AddSTASelfParamsRspCb)pWDICtx->pfncRspCB;
15644
15645 /*-------------------------------------------------------------------------
15646 Extract response and send it to UMAC
15647 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015648 wpalMemoryCopy( &halAddStaSelfRsp.addStaSelfRspParams,
15649 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015650 sizeof(halAddStaSelfRsp.addStaSelfRspParams));
15651
15652
Jeff Johnsone7245742012-09-05 17:12:55 -070015653 wdiAddSTASelfParams.wdiStatus =
15654 WDI_HAL_2_WDI_STATUS(halAddStaSelfRsp.addStaSelfRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015655
Jeff Johnsone7245742012-09-05 17:12:55 -070015656 wdiAddSTASelfParams.ucSTASelfIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070015657 halAddStaSelfRsp.addStaSelfRspParams.selfStaIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070015658 wdiAddSTASelfParams.dpuIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070015659 halAddStaSelfRsp.addStaSelfRspParams.dpuIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070015660 wdiAddSTASelfParams.dpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070015661 halAddStaSelfRsp.addStaSelfRspParams.dpuSignature;
15662
15663 wpalMemoryCopy(wdiAddSTASelfParams.macSelfSta,
15664 pWDICtx->wdiCacheAddSTASelfReq.wdiAddSTASelfInfo.selfMacAddr,
15665 WDI_MAC_ADDR_LEN);
15666
15667
15668#ifdef HAL_SELF_STA_PER_BSS
15669
15670 /* At this point add the self-STA */
15671
15672 /*! TO DO: wdiAddSTAParam.ucWmmEnabled */
15673 /*! TO DO: wdiAddSTAParam.ucHTCapable */
15674 /*! TO DO: wdiAddSTAParam.ucRmfEnabled */
15675
15676 //all DPU indices are the same for self STA
15677
15678 /*DPU Information*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015679 wdiAddSTAParam.dpuIndex = wdiAddSTASelfParams.dpuIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015680 wdiAddSTAParam.dpuSig = wdiAddSTASelfParams.dpuSignature;
15681 wdiAddSTAParam.bcastDpuSignature = wdiAddSTASelfParams.dpuSignature;
15682 wdiAddSTAParam.bcastMgmtDpuSignature = wdiAddSTASelfParams.dpuSignature;
15683 wdiAddSTAParam.bcastDpuIndex = wdiAddSTASelfParams.dpuIdx;
15684 wdiAddSTAParam.bcastMgmtDpuIndex = wdiAddSTASelfParams.dpuIdx;
15685
15686 wpalMemoryCopy(wdiAddSTAParam.staMacAddr, wdiAddSTASelfParams.macSelfSta,
15687 WDI_MAC_ADDR_LEN);
15688
15689 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_SELF; /* 0 - self */
15690 wdiAddSTAParam.ucSTAIdx = wdiAddSTASelfParams.ucSTASelfIdx;
15691
Jeff Johnsone7245742012-09-05 17:12:55 -070015692 if(halAddStaSelfRsp.addStaSelfRspParams.status
Jeff Johnson295189b2012-06-20 16:38:30 -070015693 != eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO)
15694 {
15695 (void)WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam);
15696 }
15697#endif
15698
15699 /*Notify UMAC*/
15700 wdiAddSTASelfReqParamsRspCb( &wdiAddSTASelfParams, pWDICtx->pRspCBUserData);
15701
Jeff Johnsone7245742012-09-05 17:12:55 -070015702 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015703}/*WDI_ProcessAddSTASelfRsp*/
15704
15705
15706
15707/**
Jeff Johnsone7245742012-09-05 17:12:55 -070015708 @brief WDI_ProcessDelSTASelfRsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015710
15711 @param pWDICtx: pointer to the WLAN DAL context
15712 pEventData: pointer to the event information structure
15713
Jeff Johnson295189b2012-06-20 16:38:30 -070015714 @see
15715 @return Result of the function call
15716*/
15717WDI_Status
15718WDI_ProcessDelSTASelfRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015719(
Jeff Johnson295189b2012-06-20 16:38:30 -070015720 WDI_ControlBlockType* pWDICtx,
15721 WDI_EventInfoType* pEventData
15722)
15723{
15724 WDI_DelSTASelfRspParamsType wdiDelStaSelfRspParams;
15725 WDI_DelSTASelfRspCb wdiDelStaSelfRspCb;
15726 tDelStaSelfRspParams delStaSelfRspParams;
15727 wpt_uint8 ucStaIdx;
15728
15729 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15730
15731 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015732 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015733 -------------------------------------------------------------------------*/
15734 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15735 ( NULL == pEventData->pEventData))
15736 {
15737 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15738 "%s: Invalid parameters", __FUNCTION__);
15739 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015740 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015741 }
15742
15743 wdiDelStaSelfRspCb = (WDI_DelSTASelfRspCb)pWDICtx->pfncRspCB;
15744
15745 /*-------------------------------------------------------------------------
15746 Extract response and send it to UMAC
15747 -------------------------------------------------------------------------*/
15748
Jeff Johnsone7245742012-09-05 17:12:55 -070015749 wpalMemoryCopy( &delStaSelfRspParams,
Jeff Johnson295189b2012-06-20 16:38:30 -070015750 (wpt_uint8*)pEventData->pEventData,
15751 sizeof(tDelStaSelfRspParams));
15752
Jeff Johnsone7245742012-09-05 17:12:55 -070015753 wdiDelStaSelfRspParams.wdiStatus =
15754 WDI_HAL_2_WDI_STATUS(delStaSelfRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015755
Jeff Johnsone7245742012-09-05 17:12:55 -070015756 /* delStaSelfRspParams.status is not
Jeff Johnson295189b2012-06-20 16:38:30 -070015757 eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO*/
15758 if( eHAL_STATUS_SUCCESS == delStaSelfRspParams.status )
15759 {
15760 WDI_Status wdiStatus;
Jeff Johnsone7245742012-09-05 17:12:55 -070015761 wdiStatus = WDI_STATableFindStaidByAddr(pWDICtx,
Jeff Johnson295189b2012-06-20 16:38:30 -070015762 delStaSelfRspParams.selfMacAddr,
15763 &ucStaIdx);
15764 if(WDI_STATUS_E_FAILURE == wdiStatus)
15765 {
15766 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
15767 "%s: Unable to extract the STA Idx ", __FUNCTION__);
15768 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015769 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015770 }
15771 WDI_STATableDelSta(pWDICtx, ucStaIdx);
15772 }
15773
15774 /*Notify UMAC*/
15775 wdiDelStaSelfRspCb(&wdiDelStaSelfRspParams, (void*) pWDICtx->pRspCBUserData);
15776
15777 return WDI_STATUS_SUCCESS;
15778}
15779
Jeff Johnsone7245742012-09-05 17:12:55 -070015780#ifdef FEATURE_OEM_DATA_SUPPORT
15781/**
15782 @brief Start Oem Data Rsp function (called when a
15783 response is being received over the bus from HAL)
Jeff Johnson295189b2012-06-20 16:38:30 -070015784
Jeff Johnsone7245742012-09-05 17:12:55 -070015785 @param pWDICtx: pointer to the WLAN DAL context
15786 pEventData: pointer to the event information structure
15787
15788 @see
15789 @return Result of the function call
15790*/
15791#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
15792
15793WDI_Status
15794WDI_ProcessStartOemDataRsp
15795(
15796 WDI_ControlBlockType* pWDICtx,
15797 WDI_EventInfoType* pEventData
15798)
15799{
15800 WDI_oemDataRspCb wdiOemDataRspCb;
15801 WDI_oemDataRspParamsType* wdiOemDataRspParams;
15802 tStartOemDataRspParams* halStartOemDataRspParams;
15803
15804 /*-------------------------------------------------------------------------
15805 Sanity check
15806 -------------------------------------------------------------------------*/
15807 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15808 ( NULL == pEventData->pEventData))
15809 {
15810 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15811 "%s: Invalid parameters", __FUNCTION__);
15812 WDI_ASSERT(0);
15813 return WDI_STATUS_E_FAILURE;
15814 }
15815
15816 wdiOemDataRspCb = (WDI_oemDataRspCb)pWDICtx->pfncRspCB;
15817
15818 /*-------------------------------------------------------------------------
15819 Extract response and send it to UMAC
15820 -------------------------------------------------------------------------*/
15821 halStartOemDataRspParams = (tStartOemDataRspParams *)pEventData->pEventData;
15822
15823
15824 //It is the responsibility of the application code to check for failure
15825 //conditions!
15826
15827 //Allocate memory for WDI OEM DATA RSP structure
15828 wdiOemDataRspParams = wpalMemoryAllocate(sizeof(WDI_oemDataRspParamsType)) ;
15829
15830 if(NULL == wdiOemDataRspParams)
15831 {
15832 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15833 "Failed to allocate memory in OEM DATA Response %x %x %x ",
15834 pWDICtx, pEventData, pEventData->pEventData);
15835 WDI_ASSERT(0);
15836 return WDI_STATUS_E_FAILURE;
15837 }
15838
15839 /* Populate WDI structure members */
15840 wpalMemoryCopy(wdiOemDataRspParams->oemDataRsp, halStartOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
15841
15842 /*Notify UMAC*/
15843 wdiOemDataRspCb(wdiOemDataRspParams, pWDICtx->pRspCBUserData);
15844
15845 //Free memory allocated for WDI OEM_DATA MEAS RSP structure
15846 wpalMemoryFree(wdiOemDataRspParams);
15847
15848 return WDI_STATUS_SUCCESS;
15849}/*WDI_PrcoessStartOemDataRsp*/
15850#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015851
15852/*===========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070015853 Miscellaneous Control Response Processing API
Jeff Johnson295189b2012-06-20 16:38:30 -070015854===========================================================================*/
15855
15856/**
15857 @brief Process Channel Switch Rsp function (called when a response
15858 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015859
15860 @param pWDICtx: pointer to the WLAN DAL context
15861 pEventData: pointer to the event information structure
15862
Jeff Johnson295189b2012-06-20 16:38:30 -070015863 @see
15864 @return Result of the function call
15865*/
15866WDI_Status
15867WDI_ProcessChannelSwitchRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015868(
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 WDI_ControlBlockType* pWDICtx,
15870 WDI_EventInfoType* pEventData
15871)
15872{
15873 WDI_SwitchCHRspParamsType wdiSwitchChRsp;
15874 WDI_SwitchChRspCb wdiChSwitchRspCb;
15875 tSwitchChannelRspParams halSwitchChannelRsp;
15876 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15877
15878 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015879 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015880 -------------------------------------------------------------------------*/
15881 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15882 ( NULL == pEventData->pEventData))
15883 {
15884 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15885 "%s: Invalid parameters", __FUNCTION__);
15886 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015887 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015888 }
15889
15890 wdiChSwitchRspCb = (WDI_SwitchChRspCb)pWDICtx->pfncRspCB;
15891
15892 /*-------------------------------------------------------------------------
15893 Extract response and send it to UMAC
15894 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015895 wpalMemoryCopy( &halSwitchChannelRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -070015896 (wpt_uint8*)pEventData->pEventData,
15897 sizeof(halSwitchChannelRsp));
15898
Jeff Johnsone7245742012-09-05 17:12:55 -070015899 wdiSwitchChRsp.wdiStatus =
15900 WDI_HAL_2_WDI_STATUS(halSwitchChannelRsp.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015901 wdiSwitchChRsp.ucChannel = halSwitchChannelRsp.channelNumber;
15902
15903#ifdef WLAN_FEATURE_VOWIFI
Jeff Johnsone7245742012-09-05 17:12:55 -070015904 wdiSwitchChRsp.ucTxMgmtPower = halSwitchChannelRsp.txMgmtPower;
Jeff Johnson295189b2012-06-20 16:38:30 -070015905#endif
15906
15907 /*Notify UMAC*/
15908 wdiChSwitchRspCb( &wdiSwitchChRsp, pWDICtx->pRspCBUserData);
15909
Jeff Johnsone7245742012-09-05 17:12:55 -070015910 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070015911}/*WDI_ProcessChannelSwitchRsp*/
15912
15913
15914/**
15915 @brief Process Config STA Rsp function (called when a response
15916 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070015917
15918 @param pWDICtx: pointer to the WLAN DAL context
15919 pEventData: pointer to the event information structure
15920
Jeff Johnson295189b2012-06-20 16:38:30 -070015921 @see
15922 @return Result of the function call
15923*/
15924WDI_Status
15925WDI_ProcessConfigStaRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070015926(
Jeff Johnson295189b2012-06-20 16:38:30 -070015927 WDI_ControlBlockType* pWDICtx,
15928 WDI_EventInfoType* pEventData
15929)
15930{
15931 WDI_ConfigSTARspParamsType wdiCfgSTAParams;
15932 WDI_ConfigSTARspCb wdiConfigSTARspCb;
15933 WDI_AddStaParams wdiAddSTAParam;
15934
15935 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070015936 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015937
Jeff Johnsone7245742012-09-05 17:12:55 -070015938 tConfigStaRspMsg halConfigStaRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015939 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
15940
15941 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070015942 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070015943 -------------------------------------------------------------------------*/
15944 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
15945 ( NULL == pEventData->pEventData))
15946 {
15947 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
15948 "%s: Invalid parameters", __FUNCTION__);
15949 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070015950 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015951 }
15952
15953 wdiConfigSTARspCb = (WDI_ConfigSTARspCb)pWDICtx->pfncRspCB;
15954
15955 /*-------------------------------------------------------------------------
15956 Extract response and send it to UMAC
15957 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015958 wpalMemoryCopy( &halConfigStaRsp.configStaRspParams,
15959 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070015960 sizeof(halConfigStaRsp.configStaRspParams));
15961
15962
15963 wdiCfgSTAParams.ucSTAIdx = halConfigStaRsp.configStaRspParams.staIdx;
15964 wdiCfgSTAParams.ucBssIdx = halConfigStaRsp.configStaRspParams.bssIdx;
15965 wdiCfgSTAParams.ucUcastSig = halConfigStaRsp.configStaRspParams.ucUcastSig;
15966 wdiCfgSTAParams.ucBcastSig = halConfigStaRsp.configStaRspParams.ucBcastSig;
15967 wdiCfgSTAParams.ucMgmtSig = halConfigStaRsp.configStaRspParams.ucMgmtSig;
15968
15969 /* MAC Address of STA - take from cache as it does not come back in the
15970 response*/
15971 wpalMemoryCopy( wdiCfgSTAParams.macSTA,
Jeff Johnsone7245742012-09-05 17:12:55 -070015972 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.macSTA,
Jeff Johnson295189b2012-06-20 16:38:30 -070015973 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070015974
15975 wdiCfgSTAParams.wdiStatus =
15976 WDI_HAL_2_WDI_STATUS(halConfigStaRsp.configStaRspParams.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015977
15978 wdiCfgSTAParams.ucDpuIndex = halConfigStaRsp.configStaRspParams.dpuIndex;
15979 wdiCfgSTAParams.ucBcastDpuIndex = halConfigStaRsp.configStaRspParams.bcastDpuIndex;
15980 wdiCfgSTAParams.ucBcastMgmtDpuIdx = halConfigStaRsp.configStaRspParams.bcastMgmtDpuIdx;
15981
15982 if ( WDI_STATUS_SUCCESS == wdiCfgSTAParams.wdiStatus )
15983 {
15984 if ( WDI_ADD_STA == pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.wdiAction )
15985 {
15986 /* ADD STA to table */
Jeff Johnsone7245742012-09-05 17:12:55 -070015987 wdiAddSTAParam.ucSTAIdx = halConfigStaRsp.configStaRspParams.staIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 wdiAddSTAParam.dpuSig = halConfigStaRsp.configStaRspParams.ucUcastSig;
15989 wdiAddSTAParam.dpuIndex = halConfigStaRsp.configStaRspParams.dpuIndex;
Jeff Johnsone7245742012-09-05 17:12:55 -070015990
Jeff Johnson295189b2012-06-20 16:38:30 -070015991 /*This info can be retrieved from the cached initial request*/
Jeff Johnsone7245742012-09-05 17:12:55 -070015992 wdiAddSTAParam.ucWmmEnabled =
Jeff Johnson295189b2012-06-20 16:38:30 -070015993 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.ucWMMEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070015994 wdiAddSTAParam.ucHTCapable =
15995 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.ucHTCapable;
15996 wdiAddSTAParam.ucStaType =
15997 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.wdiSTAType;
15998
Jeff Johnson295189b2012-06-20 16:38:30 -070015999 /* MAC Address of STA */
Jeff Johnsone7245742012-09-05 17:12:55 -070016000 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
16001 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.macSTA,
Jeff Johnson295189b2012-06-20 16:38:30 -070016002 WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070016003
16004 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
16005 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.macBSSID ,
16006 WDI_MAC_ADDR_LEN);
16007
16008 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
16009 pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.macBSSID,
16010 &pBSSSes);
Jeff Johnson295189b2012-06-20 16:38:30 -070016011
16012 if ( NULL == pBSSSes )
16013 {
16014 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
16015 "Association for this BSSID is not in place");
Jeff Johnsone7245742012-09-05 17:12:55 -070016016
Jeff Johnson295189b2012-06-20 16:38:30 -070016017 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016018 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070016019 }
16020
16021 /*Add BSS specific parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016022 wdiAddSTAParam.bcastMgmtDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070016023 halConfigStaRsp.configStaRspParams.bcastMgmtDpuIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070016024 wdiAddSTAParam.bcastMgmtDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070016025 halConfigStaRsp.configStaRspParams.ucMgmtSig;
Jeff Johnsone7245742012-09-05 17:12:55 -070016026 wdiAddSTAParam.bcastDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070016027 halConfigStaRsp.configStaRspParams.bcastDpuIndex;
Jeff Johnsone7245742012-09-05 17:12:55 -070016028 wdiAddSTAParam.bcastDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070016029 halConfigStaRsp.configStaRspParams.ucBcastSig;
16030 wdiAddSTAParam.ucRmfEnabled = pBSSSes->ucRmfEnabled;
16031 wdiAddSTAParam.ucBSSIdx = ucCurrentBSSSesIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070016032
Jeff Johnson295189b2012-06-20 16:38:30 -070016033 WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam);
16034 }
16035 if( WDI_UPDATE_STA == pWDICtx->wdiCachedConfigStaReq.wdiReqInfo.wdiAction )
16036 {
16037 WDI_StaStruct* pSTATable = (WDI_StaStruct*) pWDICtx->staTable;
16038
Jeff Johnsone7245742012-09-05 17:12:55 -070016039 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].bcastDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070016040 halConfigStaRsp.configStaRspParams.bcastDpuIndex;
Jeff Johnsone7245742012-09-05 17:12:55 -070016041 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].bcastDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070016042 halConfigStaRsp.configStaRspParams.ucBcastSig;
Jeff Johnsone7245742012-09-05 17:12:55 -070016043 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].bcastMgmtDpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070016044 halConfigStaRsp.configStaRspParams.bcastMgmtDpuIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070016045 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].bcastMgmtDpuSignature =
Jeff Johnson295189b2012-06-20 16:38:30 -070016046 halConfigStaRsp.configStaRspParams.ucMgmtSig;
Jeff Johnsone7245742012-09-05 17:12:55 -070016047 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].bssIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070016048 halConfigStaRsp.configStaRspParams.bssIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070016049 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].dpuIndex =
Jeff Johnson295189b2012-06-20 16:38:30 -070016050 halConfigStaRsp.configStaRspParams.dpuIndex;
Jeff Johnsone7245742012-09-05 17:12:55 -070016051 pSTATable[halConfigStaRsp.configStaRspParams.staIdx].dpuSig =
Jeff Johnson295189b2012-06-20 16:38:30 -070016052 halConfigStaRsp.configStaRspParams.ucUcastSig;
16053 }
16054 }
16055
16056 /*Notify UMAC*/
16057 wdiConfigSTARspCb( &wdiCfgSTAParams, pWDICtx->pRspCBUserData);
16058
Jeff Johnsone7245742012-09-05 17:12:55 -070016059 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016060}/*WDI_ProcessConfigStaRsp*/
16061
16062
16063/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016064 @brief Process Set Link State Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070016065 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016066
16067 @param pWDICtx: pointer to the WLAN DAL context
16068 pEventData: pointer to the event information structure
16069
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 @see
16071 @return Result of the function call
16072*/
16073WDI_Status
16074WDI_ProcessSetLinkStateRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016075(
Jeff Johnson295189b2012-06-20 16:38:30 -070016076 WDI_ControlBlockType* pWDICtx,
16077 WDI_EventInfoType* pEventData
16078)
16079{
16080 WDI_Status wdiStatus;
16081 eHalStatus halStatus;
16082 WDI_SetLinkStateRspCb wdiSetLinkStateRspCb;
16083
16084 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070016085 wpt_uint8 ucCurrentBSSSesIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016086 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16087
16088 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016089 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016090 -------------------------------------------------------------------------*/
16091 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16092 ( NULL == pEventData->pEventData))
16093 {
16094 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16095 "%s: Invalid parameters", __FUNCTION__);
16096 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016097 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016098 }
16099
16100 wdiSetLinkStateRspCb = (WDI_SetLinkStateRspCb)pWDICtx->pfncRspCB;
16101
16102 wpalMutexAcquire(&pWDICtx->wptMutex);
16103
16104 /*If the link is being transitioned to idle - the BSS is to be deleted
16105 - this type of ending a session is possible when UMAC has failed an
16106 - association session during Join*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016107 if ( WDI_LINK_IDLE_STATE ==
Jeff Johnson295189b2012-06-20 16:38:30 -070016108 pWDICtx->wdiCacheSetLinkStReq.wdiLinkInfo.wdiLinkState )
16109 {
16110 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016111 Find the BSS for which the request is made
Jeff Johnson295189b2012-06-20 16:38:30 -070016112 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016113 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
16114 pWDICtx->wdiCacheSetLinkStReq.wdiLinkInfo.macBSSID,
16115 &pBSSSes);
16116
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 /*-----------------------------------------------------------------------
16118 Del BSS response can only be received for an existing assoc that
Jeff Johnsone7245742012-09-05 17:12:55 -070016119 is current and in progress
Jeff Johnson295189b2012-06-20 16:38:30 -070016120 -----------------------------------------------------------------------*/
16121 if ( NULL == pBSSSes )
16122 {
16123 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
16124 "Set link response received outside association session");
16125 }
16126 else
16127 {
16128 /* For BT AMP roles no need to delete the sessions if assoc fails. There
16129 will be del BSS coming after this to stop the beaconing & cleaning up the
16130 sessions*/
16131 if(( WDI_BTAMP_STA_MODE != pBSSSes->wdiBssType )&&
16132 ( WDI_BTAMP_AP_MODE != pBSSSes->wdiBssType ))
16133 {
16134 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016135 The current session will be deleted
Jeff Johnson295189b2012-06-20 16:38:30 -070016136 -----------------------------------------------------------------------*/
16137 WDI_DeleteSession(pWDICtx, pBSSSes);
16138
16139 /*-----------------------------------------------------------------------
16140 Check to see if this association is in progress - if so disable the
16141 flag as this has ended
16142 -----------------------------------------------------------------------*/
16143 if ( ucCurrentBSSSesIdx == pWDICtx->ucCurrentBSSSesIdx )
Jeff Johnsone7245742012-09-05 17:12:55 -070016144 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016145 /*Association no longer in progress */
16146 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
16147 /*Association no longer in progress - prepare pending assoc for processing*/
16148 WDI_DequeueAssocRequest(pWDICtx);
16149 }
16150 }
16151 }
16152 }
16153 /* If the link state has been set to POST ASSOC, reset the "association in
16154 progress" flag */
Jeff Johnsone7245742012-09-05 17:12:55 -070016155 if ( WDI_LINK_POSTASSOC_STATE ==
Jeff Johnson295189b2012-06-20 16:38:30 -070016156 pWDICtx->wdiCacheSetLinkStReq.wdiLinkInfo.wdiLinkState )
16157 {
16158 pWDICtx->bAssociationInProgress = eWLAN_PAL_FALSE;
16159 WDI_DequeueAssocRequest(pWDICtx);
16160 }
16161
16162 wpalMutexRelease(&pWDICtx->wptMutex);
16163
16164 /*-------------------------------------------------------------------------
16165 Extract response and send it to UMAC
16166 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016167 wpalMemoryCopy( &halStatus,
16168 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 sizeof(halStatus));
16170
Jeff Johnsone7245742012-09-05 17:12:55 -070016171 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016172
16173 /*Notify UMAC*/
16174 wdiSetLinkStateRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16175
Jeff Johnsone7245742012-09-05 17:12:55 -070016176 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016177}/*WDI_ProcessSetLinkStateRsp*/
16178
16179/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016180 @brief Process Get Stats Rsp function (called when a response is
Jeff Johnson295189b2012-06-20 16:38:30 -070016181 being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016182
16183 @param pWDICtx: pointer to the WLAN DAL context
16184 pEventData: pointer to the event information structure
16185
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 @see
16187 @return Result of the function call
16188*/
16189WDI_Status
16190WDI_ProcessGetStatsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016191(
Jeff Johnson295189b2012-06-20 16:38:30 -070016192 WDI_ControlBlockType* pWDICtx,
16193 WDI_EventInfoType* pEventData
16194)
16195{
16196 WDI_GetStatsRspParamsType *wdiGetStatsRsp;
16197 WDI_GetStatsRspCb wdiGetStatsRspCb;
16198 tHalStatsRspParams* pHalStatsRspParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016199
Jeff Johnson295189b2012-06-20 16:38:30 -070016200 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16201
16202 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016203 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016204 -------------------------------------------------------------------------*/
16205 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16206 ( NULL == pEventData->pEventData))
16207 {
16208 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16209 "%s: Invalid parameters", __FUNCTION__);
16210 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016211 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 }
16213
16214 /*-------------------------------------------------------------------------
16215 Extract response and send it to UMAC
16216 -------------------------------------------------------------------------*/
16217 pHalStatsRspParams = (tHalStatsRspParams *)pEventData->pEventData;
16218
16219 /*allocate the stats response buffer */
16220 wdiGetStatsRsp = (WDI_GetStatsRspParamsType *)wpalMemoryAllocate(
16221 pHalStatsRspParams->msgLen - sizeof(tHalStatsRspParams)
16222 + sizeof(WDI_GetStatsRspParamsType));
16223
16224 if(NULL == wdiGetStatsRsp)
16225 {
16226 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
16227 "Failed to allocate memory in Get Stats Response %x %x %x ",
16228 pWDICtx, pEventData, pEventData->pEventData);
16229 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016230 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016231 }
16232
16233 wdiGetStatsRspCb = (WDI_GetStatsRspCb)pWDICtx->pfncRspCB;
16234
16235 wpalMemoryZero(wdiGetStatsRsp, pHalStatsRspParams->msgLen);
16236 wdiGetStatsRsp->usMsgType = pHalStatsRspParams->msgType;
16237 wdiGetStatsRsp->usMsgLen = pHalStatsRspParams->msgLen;
16238 wdiGetStatsRsp->wdiStatus = WDI_HAL_2_WDI_STATUS(pHalStatsRspParams->status);
16239 wdiGetStatsRsp->ucSTAIdx = pHalStatsRspParams->staId;
16240 wdiGetStatsRsp->uStatsMask = pHalStatsRspParams->statsMask;
16241
16242 /* copy the stats from buffer at the end of the tHalStatsRspParams message */
16243 wpalMemoryCopy(wdiGetStatsRsp + 1,
16244 (wpt_uint8*)pEventData->pEventData + sizeof(tHalStatsRspParams),
16245 pHalStatsRspParams->msgLen - sizeof(tHalStatsRspParams));
16246
16247 /*Notify UMAC*/
16248 wdiGetStatsRspCb( wdiGetStatsRsp, pWDICtx->pRspCBUserData);
16249
16250 wpalMemoryFree(wdiGetStatsRsp);
16251
Jeff Johnsone7245742012-09-05 17:12:55 -070016252 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016253}/*WDI_ProcessGetStatsRsp*/
16254
16255
16256/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016257 @brief Process Update Cfg Rsp function (called when a response is
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016259
16260 @param pWDICtx: pointer to the WLAN DAL context
16261 pEventData: pointer to the event information structure
16262
Jeff Johnson295189b2012-06-20 16:38:30 -070016263 @see
16264 @return Result of the function call
16265*/
16266WDI_Status
16267WDI_ProcessUpdateCfgRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016268(
Jeff Johnson295189b2012-06-20 16:38:30 -070016269 WDI_ControlBlockType* pWDICtx,
16270 WDI_EventInfoType* pEventData
16271)
16272{
16273 WDI_Status wdiStatus;
16274 eHalStatus halStatus;
16275 WDI_UpdateCfgRspCb wdiUpdateCfgRspCb;
16276 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16277
16278 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016279 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 -------------------------------------------------------------------------*/
16281 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16282 ( NULL == pEventData->pEventData))
16283 {
16284 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16285 "%s: Invalid parameters", __FUNCTION__);
16286 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016287 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016288 }
16289
16290 wdiUpdateCfgRspCb = (WDI_UpdateCfgRspCb)pWDICtx->pfncRspCB;
16291
16292 /*-------------------------------------------------------------------------
16293 Extract response and send it to UMAC
16294 -------------------------------------------------------------------------*/
16295 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070016296 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016297
16298 /*Notify UMAC*/
16299 wdiUpdateCfgRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16300
Jeff Johnsone7245742012-09-05 17:12:55 -070016301 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016302}/*WDI_ProcessUpdateCfgRsp*/
16303
16304
16305
16306/**
16307 @brief Process Add BA Rsp function (called when a response
16308 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016309
16310 @param pWDICtx: pointer to the WLAN DAL context
16311 pEventData: pointer to the event information structure
16312
Jeff Johnson295189b2012-06-20 16:38:30 -070016313 @see
16314 @return Result of the function call
16315*/
16316WDI_Status
16317WDI_ProcessAddBARsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016318(
Jeff Johnson295189b2012-06-20 16:38:30 -070016319 WDI_ControlBlockType* pWDICtx,
16320 WDI_EventInfoType* pEventData
16321)
16322{
16323 WDI_AddBARspCb wdiAddBARspCb;
16324
16325 tAddBARspParams halAddBARsp;
16326 WDI_AddBARspinfoType wdiAddBARsp;
16327
16328 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16329
16330 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016331 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016332 -------------------------------------------------------------------------*/
16333 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16334 ( NULL == pEventData->pEventData))
16335 {
16336 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16337 "%s: Invalid parameters", __FUNCTION__);
16338 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016339 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016340 }
16341
16342 wdiAddBARspCb = (WDI_AddBARspCb)pWDICtx->pfncRspCB;
16343
16344 /*-------------------------------------------------------------------------
16345 Extract response and send it to UMAC
16346 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016347 wpalMemoryCopy( &halAddBARsp,
16348 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016349 sizeof(halAddBARsp));
16350
16351 wdiAddBARsp.wdiStatus = WDI_HAL_2_WDI_STATUS(halAddBARsp.status);
16352
Jeff Johnson43971f52012-07-17 12:26:56 -070016353 if ( WDI_STATUS_SUCCESS == wdiAddBARsp.wdiStatus )
Jeff Johnson295189b2012-06-20 16:38:30 -070016354 {
16355 wdiAddBARsp.ucBaDialogToken = halAddBARsp.baDialogToken;
16356 }
16357
16358 /*Notify UMAC*/
16359 wdiAddBARspCb( &wdiAddBARsp, pWDICtx->pRspCBUserData);
16360
Jeff Johnsone7245742012-09-05 17:12:55 -070016361 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016362}/*WDI_ProcessAddSessionBARsp*/
16363
16364/**
16365 @brief Process Add BA Rsp function (called when a response
16366 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016367
16368 @param pWDICtx: pointer to the WLAN DAL context
16369 pEventData: pointer to the event information structure
16370
Jeff Johnson295189b2012-06-20 16:38:30 -070016371 @see
16372 @return Result of the function call
16373*/
16374WDI_Status
16375WDI_ProcessTriggerBARsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016376(
Jeff Johnson295189b2012-06-20 16:38:30 -070016377 WDI_ControlBlockType* pWDICtx,
16378 WDI_EventInfoType* pEventData
16379)
16380{
16381 WDI_TriggerBARspCb wdiTriggerBARspCb;
16382
16383 tTriggerBARspParams* halTriggerBARsp;
16384 tTriggerBaRspCandidate* halBaCandidate;
16385 WDI_TriggerBARspParamsType* wdiTriggerBARsp;
16386 WDI_TriggerBARspCandidateType* wdiTriggerBARspCandidate;
16387 wpt_uint16 index;
16388 wpt_uint16 TidIndex;
Jeff Johnsone7245742012-09-05 17:12:55 -070016389
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16391
16392 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016393 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 -------------------------------------------------------------------------*/
16395 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16396 ( NULL == pEventData->pEventData))
16397 {
16398 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16399 "%s: Invalid parameters", __FUNCTION__);
16400 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016401 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016402 }
16403
16404 wdiTriggerBARspCb = (WDI_TriggerBARspCb)pWDICtx->pfncRspCB;
16405
16406 /*-------------------------------------------------------------------------
16407 Extract response and send it to UMAC
16408 -------------------------------------------------------------------------*/
16409 halTriggerBARsp = (tTriggerBARspParams *)pEventData->pEventData;
16410
Jeff Johnsone7245742012-09-05 17:12:55 -070016411 wdiTriggerBARsp = wpalMemoryAllocate(sizeof(WDI_TriggerBARspParamsType) +
16412 halTriggerBARsp->baCandidateCnt *
Jeff Johnson295189b2012-06-20 16:38:30 -070016413 sizeof(WDI_TriggerBARspCandidateType));
16414 if(NULL == wdiTriggerBARsp)
16415 {
16416 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16417 "Failed to allocate memory in Trigger BA Response %x %x %x ",
16418 pWDICtx, pEventData, pEventData->pEventData);
16419 wpalMemoryFree(halTriggerBARsp);
16420 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016421 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016422 }
16423
16424 wdiTriggerBARsp->wdiStatus = WDI_HAL_2_WDI_STATUS(halTriggerBARsp->status);
16425
16426 if ( WDI_STATUS_SUCCESS == wdiTriggerBARsp->wdiStatus)
16427 {
16428 wdiTriggerBARsp->usBaCandidateCnt = halTriggerBARsp->baCandidateCnt;
Jeff Johnsone7245742012-09-05 17:12:55 -070016429 wpalMemoryCopy(wdiTriggerBARsp->macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -070016430 halTriggerBARsp->bssId , WDI_MAC_ADDR_LEN);
16431
16432 wdiTriggerBARspCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBARsp + 1);
16433 halBaCandidate = (tTriggerBaRspCandidate*)(halTriggerBARsp + 1);
16434
16435 for(index = 0; index < wdiTriggerBARsp->usBaCandidateCnt; index++)
16436 {
Jeff Johnsone7245742012-09-05 17:12:55 -070016437 wpalMemoryCopy(wdiTriggerBARspCandidate->macSTA,
Jeff Johnson295189b2012-06-20 16:38:30 -070016438 halBaCandidate->staAddr, WDI_MAC_ADDR_LEN);
16439 for(TidIndex = 0; TidIndex < STA_MAX_TC; TidIndex++)
16440 {
Jeff Johnsone7245742012-09-05 17:12:55 -070016441 wdiTriggerBARspCandidate->wdiBAInfo[TidIndex].fBaEnable =
Jeff Johnson295189b2012-06-20 16:38:30 -070016442 halBaCandidate->baInfo[TidIndex].fBaEnable;
Jeff Johnsone7245742012-09-05 17:12:55 -070016443 wdiTriggerBARspCandidate->wdiBAInfo[TidIndex].startingSeqNum =
Jeff Johnson295189b2012-06-20 16:38:30 -070016444 halBaCandidate->baInfo[TidIndex].startingSeqNum;
16445 }
16446 wdiTriggerBARspCandidate++;
16447 halBaCandidate++;
16448 }
16449 }
16450
16451 /*Notify UMAC*/
16452 wdiTriggerBARspCb( wdiTriggerBARsp, pWDICtx->pRspCBUserData);
16453
16454 wpalMemoryFree(wdiTriggerBARsp);
Jeff Johnsone7245742012-09-05 17:12:55 -070016455 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016456}/*WDI_ProcessAddSessionBARsp*/
16457
16458/**
16459 @brief Process Update Beacon Params Rsp function (called when a response
16460 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016461
16462 @param pWDICtx: pointer to the WLAN DAL context
16463 pEventData: pointer to the event information structure
16464
Jeff Johnson295189b2012-06-20 16:38:30 -070016465 @see
16466 @return Result of the function call
16467*/
16468WDI_Status
16469WDI_ProcessUpdateBeaconParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016470(
Jeff Johnson295189b2012-06-20 16:38:30 -070016471 WDI_ControlBlockType* pWDICtx,
16472 WDI_EventInfoType* pEventData
16473)
16474{
16475 WDI_Status wdiStatus;
16476 eHalStatus halStatus;
16477 WDI_UpdateBeaconParamsRspCb wdiUpdateBeaconParamsRspCb;
16478 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16479
16480 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016481 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 -------------------------------------------------------------------------*/
16483 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16484 ( NULL == pEventData->pEventData))
16485 {
16486 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16487 "%s: Invalid parameters", __FUNCTION__);
16488 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016489 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 }
16491
16492 wdiUpdateBeaconParamsRspCb = (WDI_UpdateBeaconParamsRspCb)pWDICtx->pfncRspCB;
16493
16494 /*-------------------------------------------------------------------------
16495 Extract response and send it to UMAC
16496 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016497 wpalMemoryCopy( &halStatus,
16498 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016499 sizeof(halStatus));
16500
Jeff Johnsone7245742012-09-05 17:12:55 -070016501 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016502
16503 /*Notify UMAC*/
16504 wdiUpdateBeaconParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16505
Jeff Johnsone7245742012-09-05 17:12:55 -070016506 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016507}/*WDI_ProcessUpdateBeaconParamsRsp*/
16508
16509/**
16510 @brief Process Send Beacon template Rsp function (called when a response
16511 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016512
16513 @param pWDICtx: pointer to the WLAN DAL context
16514 pEventData: pointer to the event information structure
16515
Jeff Johnson295189b2012-06-20 16:38:30 -070016516 @see
16517 @return Result of the function call
16518*/
16519WDI_Status
16520WDI_ProcessSendBeaconParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016521(
Jeff Johnson295189b2012-06-20 16:38:30 -070016522 WDI_ControlBlockType* pWDICtx,
16523 WDI_EventInfoType* pEventData
16524)
16525{
16526 WDI_Status wdiStatus;
16527 eHalStatus halStatus;
16528 WDI_SendBeaconParamsRspCb wdiSendBeaconParamsRspCb;
16529 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16530
16531 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016532 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016533 -------------------------------------------------------------------------*/
16534 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16535 ( NULL == pEventData->pEventData))
16536 {
16537 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16538 "%s: Invalid parameters", __FUNCTION__);
16539 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016540 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016541 }
16542
16543 wdiSendBeaconParamsRspCb = (WDI_SendBeaconParamsRspCb)pWDICtx->pfncRspCB;
16544
16545 /*-------------------------------------------------------------------------
16546 Extract response and send it to UMAC
16547 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016548 wpalMemoryCopy( &halStatus,
16549 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016550 sizeof(halStatus));
16551
Jeff Johnsone7245742012-09-05 17:12:55 -070016552 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016553
16554 /*Notify UMAC*/
16555 wdiSendBeaconParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16556
Jeff Johnsone7245742012-09-05 17:12:55 -070016557 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016558}/*WDI_ProcessSendBeaconParamsRsp*/
16559
Jeff Johnsone7245742012-09-05 17:12:55 -070016560
Jeff Johnson295189b2012-06-20 16:38:30 -070016561/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016562 @brief Process Update Probe Resp Template Rsp function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070016563 when a response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016564
16565 @param pWDICtx: pointer to the WLAN DAL context
16566 pEventData: pointer to the event information structure
16567
Jeff Johnson295189b2012-06-20 16:38:30 -070016568 @see
16569 @return Result of the function call
16570*/
16571WDI_Status
16572WDI_ProcessUpdateProbeRspTemplateRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016573(
Jeff Johnson295189b2012-06-20 16:38:30 -070016574 WDI_ControlBlockType* pWDICtx,
16575 WDI_EventInfoType* pEventData
16576)
16577{
16578 WDI_Status wdiStatus;
16579 eHalStatus halStatus;
16580 WDI_UpdateProbeRspTemplateRspCb wdiUpdProbeRspTemplRspCb;
16581 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16582
16583 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016584 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016585 -------------------------------------------------------------------------*/
16586 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16587 ( NULL == pEventData->pEventData))
16588 {
16589 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16590 "%s: Invalid parameters", __FUNCTION__);
16591 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016592 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016593 }
16594
16595 wdiUpdProbeRspTemplRspCb = (WDI_UpdateProbeRspTemplateRspCb)pWDICtx->pfncRspCB;
16596
16597 /*-------------------------------------------------------------------------
16598 Extract response and send it to UMAC
16599 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016600 wpalMemoryCopy( &halStatus,
16601 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016602 sizeof(halStatus));
16603
Jeff Johnsone7245742012-09-05 17:12:55 -070016604 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016605
16606 /*Notify UMAC*/
16607 wdiUpdProbeRspTemplRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16608
Jeff Johnsone7245742012-09-05 17:12:55 -070016609 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016610}/*WDI_ProcessUpdateProbeRspTemplateRsp*/
16611
16612 /**
16613 @brief Process Set Max Tx Power Rsp function (called when a response
16614 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016615
16616 @param pWDICtx: pointer to the WLAN DAL context
16617 pEventData: pointer to the event information structure
16618
Jeff Johnson295189b2012-06-20 16:38:30 -070016619 @see
16620 @return Result of the function call
16621*/
16622WDI_Status
16623WDI_ProcessSetMaxTxPowerRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016624(
Jeff Johnson295189b2012-06-20 16:38:30 -070016625 WDI_ControlBlockType* pWDICtx,
16626 WDI_EventInfoType* pEventData
16627)
16628{
16629 tSetMaxTxPwrRspMsg halTxpowerrsp;
Jeff Johnsone7245742012-09-05 17:12:55 -070016630
Jeff Johnson295189b2012-06-20 16:38:30 -070016631 WDI_SetMaxTxPowerRspMsg wdiSetMaxTxPowerRspMsg;
Jeff Johnsone7245742012-09-05 17:12:55 -070016632
Jeff Johnson295189b2012-06-20 16:38:30 -070016633 WDA_SetMaxTxPowerRspCb wdiReqStatusCb;
16634 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16635
16636 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016637 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016638 -------------------------------------------------------------------------*/
16639 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16640 ( NULL == pEventData->pEventData))
16641 {
16642 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16643 "%s: Invalid parameters", __FUNCTION__);
16644 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016645 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016646 }
16647
16648 wdiReqStatusCb = (WDA_SetMaxTxPowerRspCb)pWDICtx->pfncRspCB;
16649
16650 /*-------------------------------------------------------------------------
16651 Extract response and send it to UMAC
16652 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016653 wpalMemoryCopy( &halTxpowerrsp.setMaxTxPwrRspParams,
16654 pEventData->pEventData,
16655 sizeof(halTxpowerrsp.setMaxTxPwrRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070016656
16657 if ( eHAL_STATUS_SUCCESS != halTxpowerrsp.setMaxTxPwrRspParams.status )
16658 {
16659 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
16660 "Error status returned in Set Max Tx Power Response ");
Jeff Johnsone7245742012-09-05 17:12:55 -070016661 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
16662 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016663 }
16664
Jeff Johnsone7245742012-09-05 17:12:55 -070016665 wdiSetMaxTxPowerRspMsg.wdiStatus =
Jeff Johnson295189b2012-06-20 16:38:30 -070016666 WDI_HAL_2_WDI_STATUS(halTxpowerrsp.setMaxTxPwrRspParams.status);
Jeff Johnsone7245742012-09-05 17:12:55 -070016667 wdiSetMaxTxPowerRspMsg.ucPower = halTxpowerrsp.setMaxTxPwrRspParams.power;
Jeff Johnson295189b2012-06-20 16:38:30 -070016668
16669 /*Notify UMAC*/
16670 wdiReqStatusCb( &wdiSetMaxTxPowerRspMsg, pWDICtx->pRspCBUserData);
16671
Jeff Johnsone7245742012-09-05 17:12:55 -070016672 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016673}
16674
16675#ifdef WLAN_FEATURE_P2P
16676/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016677 @brief Process P2P Group Owner Notice Of Absense Rsp function (called
Jeff Johnson295189b2012-06-20 16:38:30 -070016678 when a response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016679
16680 @param pWDICtx: pointer to the WLAN DAL context
16681 pEventData: pointer to the event information structure
16682
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 @see
16684 @return Result of the function call
16685*/
16686WDI_Status
16687WDI_ProcessP2PGONOARsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016688(
Jeff Johnson295189b2012-06-20 16:38:30 -070016689 WDI_ControlBlockType* pWDICtx,
16690 WDI_EventInfoType* pEventData
16691)
16692{
16693 WDI_Status wdiStatus;
16694 eHalStatus halStatus;
16695 WDI_SetP2PGONOAReqParamsRspCb wdiP2PGONOAReqParamsRspCb;
16696 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16697
16698 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016699 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016700 -------------------------------------------------------------------------*/
16701 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16702 ( NULL == pEventData->pEventData))
16703 {
16704 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16705 "%s: Invalid parameters", __FUNCTION__);
16706 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016707 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016708 }
16709
16710 wdiP2PGONOAReqParamsRspCb = (WDI_SetP2PGONOAReqParamsRspCb)pWDICtx->pfncRspCB;
16711
16712 /*-------------------------------------------------------------------------
16713 Extract response and send it to UMAC
16714 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070016715 wpalMemoryCopy( &halStatus,
16716 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070016717 sizeof(halStatus));
16718
Jeff Johnsone7245742012-09-05 17:12:55 -070016719 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016720
16721 /*Notify UMAC*/
16722 wdiP2PGONOAReqParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16723
Jeff Johnsone7245742012-09-05 17:12:55 -070016724 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016725}/*WDI_ProcessP2PGONOARsp*/
16726#endif
16727/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016728 @brief Process Enter IMPS Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070016729 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016730
16731 @param pWDICtx: pointer to the WLAN DAL context
16732 pEventData: pointer to the event information structure
16733
Jeff Johnson295189b2012-06-20 16:38:30 -070016734 @see
16735 @return Result of the function call
16736*/
16737WDI_Status
16738WDI_ProcessEnterImpsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016739(
Jeff Johnson295189b2012-06-20 16:38:30 -070016740 WDI_ControlBlockType* pWDICtx,
16741 WDI_EventInfoType* pEventData
16742)
16743{
16744 WDI_Status wdiStatus;
16745 eHalStatus halStatus;
16746 WDI_EnterImpsRspCb wdiEnterImpsRspCb;
16747 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16748
16749 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016750 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016751 -------------------------------------------------------------------------*/
16752 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16753 ( NULL == pEventData->pEventData))
16754 {
16755 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16756 "%s: Invalid parameters", __FUNCTION__);
16757 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016758 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016759 }
16760
16761 wdiEnterImpsRspCb = (WDI_EnterImpsRspCb)pWDICtx->pfncRspCB;
16762
16763 /*-------------------------------------------------------------------------
16764 Extract response and send it to UMAC
16765 -------------------------------------------------------------------------*/
16766 halStatus = *((eHalStatus*)pEventData->pEventData);
16767
Jeff Johnsone7245742012-09-05 17:12:55 -070016768 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016769
Madan Mohan Koyyalamudi48e375a2012-09-24 13:19:17 -070016770 /* If IMPS req failed, riva is not power collapsed Put the DXE in FULL state.
16771 * Other module states are taken care by PMC.
16772 * TODO: How do we take care of the case where IMPS is success, but riva power collapse fails??
16773 */
16774 if (wdiStatus != WDI_STATUS_SUCCESS) {
16775
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016776 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
16777 "WDI Process Enter IMPS RSP failed With HAL Status Code: %d",
16778 halStatus);
16779 /* Call Back is not required as we are putting the DXE in FULL
16780 * and riva is already in full (IMPS RSP Failed)*/
16781 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
Madan Mohan Koyyalamudi48e375a2012-09-24 13:19:17 -070016782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016783 /*Notify UMAC*/
16784 wdiEnterImpsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16785
Jeff Johnsone7245742012-09-05 17:12:55 -070016786 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016787}/*WDI_ProcessEnterImpsRsp*/
16788
16789/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016790 @brief Process Exit IMPS Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070016791 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016792
16793 @param pWDICtx: pointer to the WLAN DAL context
16794 pEventData: pointer to the event information structure
16795
Jeff Johnson295189b2012-06-20 16:38:30 -070016796 @see
16797 @return Result of the function call
16798*/
16799WDI_Status
16800WDI_ProcessExitImpsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016801(
Jeff Johnson295189b2012-06-20 16:38:30 -070016802 WDI_ControlBlockType* pWDICtx,
16803 WDI_EventInfoType* pEventData
16804)
16805{
16806 WDI_Status wdiStatus;
16807 eHalStatus halStatus;
16808 WDI_ExitImpsRspCb wdiExitImpsRspCb;
16809 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16810
16811 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016812 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016813 -------------------------------------------------------------------------*/
16814 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16815 ( NULL == pEventData->pEventData))
16816 {
16817 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16818 "%s: Invalid parameters", __FUNCTION__);
16819 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016820 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016821 }
16822
16823 wdiExitImpsRspCb = (WDI_ExitImpsRspCb)pWDICtx->pfncRspCB;
16824
16825 /*-------------------------------------------------------------------------
16826 Extract response and send it to UMAC
16827 -------------------------------------------------------------------------*/
16828 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070016829 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016830
16831 // notify DTS that we are entering Full power
16832 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
16833
16834 /*Notify UMAC*/
16835 wdiExitImpsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
16836
Jeff Johnsone7245742012-09-05 17:12:55 -070016837 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016838}/*WDI_ProcessExitImpsRsp*/
16839
16840/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016841 @brief Process Enter BMPS Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070016842 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016843
16844 @param pWDICtx: pointer to the WLAN DAL context
16845 pEventData: pointer to the event information structure
16846
Jeff Johnson295189b2012-06-20 16:38:30 -070016847 @see
16848 @return Result of the function call
16849*/
16850WDI_Status
16851WDI_ProcessEnterBmpsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016852(
Jeff Johnson295189b2012-06-20 16:38:30 -070016853 WDI_ControlBlockType* pWDICtx,
16854 WDI_EventInfoType* pEventData
16855)
16856{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016857 eHalStatus halStatus = eHAL_STATUS_FAILURE;
16858 tHalEnterBmpsRspParams halEnterBmpsRsp;
16859 WDI_EnterBmpsRspCb wdiEnterBmpsRspCb;
16860 WDI_EnterBmpsRspParamsType wdiEnterBmpsRspparams;
16861
Jeff Johnson295189b2012-06-20 16:38:30 -070016862 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16863
16864 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016865 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016866 -------------------------------------------------------------------------*/
16867 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16868 ( NULL == pEventData->pEventData))
16869 {
16870 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16871 "%s: Invalid parameters", __FUNCTION__);
16872 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016873 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016874 }
16875
Jeff Johnson295189b2012-06-20 16:38:30 -070016876 /*-------------------------------------------------------------------------
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016877 Extract response and send it to UMAC
16878 -------------------------------------------------------------------------*/
16879 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
16880 {
16881 wpalMemoryCopy( &halEnterBmpsRsp,
16882 pEventData->pEventData,
16883 sizeof(halEnterBmpsRsp));
16884
16885 //Used to print debug message
16886 halStatus = halEnterBmpsRsp.status;
16887 wdiEnterBmpsRspparams.wdiStatus = WDI_HAL_2_WDI_STATUS(halEnterBmpsRsp.status);
16888 wdiEnterBmpsRspparams.bssIdx = halEnterBmpsRsp.bssIdx;
16889 }
16890 else
16891 {
16892 halStatus = *((eHalStatus*)pEventData->pEventData);
16893 wdiEnterBmpsRspparams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
16894 }
16895
16896 wdiEnterBmpsRspCb = (WDI_EnterBmpsRspCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070016897
Madan Mohan Koyyalamudi48e375a2012-09-24 13:19:17 -070016898 /* If BMPS req failed, riva is not power collapsed put the DXE in FULL state.
16899 * Other module states are taken care by PMC.
16900 * TODO: How do we take care of the case where BMPS is success, but riva power collapse fails??
16901 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016902 if (wdiEnterBmpsRspparams.wdiStatus != WDI_STATUS_SUCCESS)
16903 {
Madan Mohan Koyyalamudi48e375a2012-09-24 13:19:17 -070016904
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016905 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016906 "WDI Process Enter BMPS RSP failed With HAL Status Code: %d",
16907 halStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016908 /* Call Back is not required as we are putting the DXE in FULL
16909 * and riva is already in FULL (BMPS RSP Failed)*/
16910 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
16911 pWDICtx->bInBmps = eWLAN_PAL_FALSE;
Madan Mohan Koyyalamudi48e375a2012-09-24 13:19:17 -070016912 }
16913
Jeff Johnson295189b2012-06-20 16:38:30 -070016914 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016915 wdiEnterBmpsRspCb( &wdiEnterBmpsRspparams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070016916
Jeff Johnsone7245742012-09-05 17:12:55 -070016917 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016918}/*WDI_ProcessEnterBmpsRsp*/
16919
16920/**
Jeff Johnsone7245742012-09-05 17:12:55 -070016921 @brief Process Exit BMPS Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070016922 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016923
16924 @param pWDICtx: pointer to the WLAN DAL context
16925 pEventData: pointer to the event information structure
16926
Jeff Johnson295189b2012-06-20 16:38:30 -070016927 @see
16928 @return Result of the function call
16929*/
16930WDI_Status
16931WDI_ProcessExitBmpsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016932(
Jeff Johnson295189b2012-06-20 16:38:30 -070016933 WDI_ControlBlockType* pWDICtx,
16934 WDI_EventInfoType* pEventData
16935)
16936{
Jeff Johnson295189b2012-06-20 16:38:30 -070016937 eHalStatus halStatus;
16938 WDI_ExitBmpsRspCb wdiExitBmpsRspCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016939 tHalExitBmpsRspParams halExitBmpsRsp;
16940 WDI_ExitBmpsRspParamsType wdiExitBmpsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016941 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
16942
16943 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070016944 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070016945 -------------------------------------------------------------------------*/
16946 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
16947 ( NULL == pEventData->pEventData))
16948 {
16949 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
16950 "%s: Invalid parameters", __FUNCTION__);
16951 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070016952 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016953 }
16954
16955 wdiExitBmpsRspCb = (WDI_ExitBmpsRspCb)pWDICtx->pfncRspCB;
16956
16957 /*-------------------------------------------------------------------------
16958 Extract response and send it to UMAC
16959 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016960
16961 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
16962 {
16963 wpalMemoryCopy( &halExitBmpsRsp,
16964 pEventData->pEventData,
16965 sizeof(halExitBmpsRsp));
16966
16967 wdiExitBmpsRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halExitBmpsRsp.status);
16968 wdiExitBmpsRspParams.bssIdx = halExitBmpsRsp.bssIdx;
16969 }
16970 else
16971 {
16972 halStatus = *((eHalStatus*)pEventData->pEventData);
16973 wdiExitBmpsRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
16974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016975
16976 // notify DTS that we are entering Full power
16977 WDTS_SetPowerState(pWDICtx, WDTS_POWER_STATE_FULL, NULL);
16978
16979 pWDICtx->bInBmps = eWLAN_PAL_FALSE;
16980
16981 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016982 wdiExitBmpsRspCb( &wdiExitBmpsRspParams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070016983
Jeff Johnsone7245742012-09-05 17:12:55 -070016984 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070016985}/*WDI_ProcessExitBmpsRsp*/
16986
16987/**
16988 @brief Process Enter UAPSD Rsp function (called when a response
16989 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070016990
16991 @param pWDICtx: pointer to the WLAN DAL context
16992 pEventData: pointer to the event information structure
16993
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 @see
16995 @return Result of the function call
16996*/
16997WDI_Status
16998WDI_ProcessEnterUapsdRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070016999(
Jeff Johnson295189b2012-06-20 16:38:30 -070017000 WDI_ControlBlockType* pWDICtx,
17001 WDI_EventInfoType* pEventData
17002)
17003{
Jeff Johnson295189b2012-06-20 16:38:30 -070017004 eHalStatus halStatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017005 tUapsdRspParams halEnterUapsdRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070017006 WDI_EnterUapsdRspCb wdiEnterUapsdRspCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017007 WDI_EnterUapsdRspParamsType wdiEnterUapsdRspParams;
17008
Jeff Johnson295189b2012-06-20 16:38:30 -070017009 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17010
17011 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017012 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017013 -------------------------------------------------------------------------*/
17014 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17015 ( NULL == pEventData->pEventData))
17016 {
17017 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17018 "%s: Invalid parameters", __FUNCTION__);
17019 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017020 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017021 }
17022
17023 wdiEnterUapsdRspCb = (WDI_EnterUapsdRspCb)pWDICtx->pfncRspCB;
17024
17025 /*-------------------------------------------------------------------------
17026 Extract response and send it to UMAC
17027 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017028 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17029 {
17030 wpalMemoryCopy( &halEnterUapsdRsp,
17031 pEventData->pEventData,
17032 sizeof(halEnterUapsdRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -070017033
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017034 wdiEnterUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halEnterUapsdRsp.status);
17035 wdiEnterUapsdRspParams.bssIdx = halEnterUapsdRsp.bssIdx;
17036 }
17037 else
17038 {
17039 halStatus = *((eHalStatus*)pEventData->pEventData);
17040 wdiEnterUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
17041 }
17042
17043 if(WDI_STATUS_SUCCESS == wdiEnterUapsdRspParams.wdiStatus)
Jeff Johnson295189b2012-06-20 16:38:30 -070017044 {
17045 // Set the DPU routing flag to the FW WQ, all the TX frames would be now pushed
17046 // from DPU to the FW-WQ (5) in UAPSD. FW would be in data path, monitoring
17047 // the traffic to decide when to suspend the trigger frames when there is no traffic
17048 // activity on the trigger enabled ACs
17049 pWDICtx->ucDpuRF = BMUWQ_FW_DPU_TX;
17050
17051#ifdef WLAN_PERF
17052 // Increment the BD signature to refresh the fast path BD utilization
17053 pWDICtx->uBdSigSerialNum++;
17054#endif
17055 }
17056
17057 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017058 wdiEnterUapsdRspCb( &wdiEnterUapsdRspParams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017059
Jeff Johnsone7245742012-09-05 17:12:55 -070017060 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017061}/*WDI_ProcessEnterUapsdRsp*/
17062
17063/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017064 @brief Process Exit UAPSD Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070017065 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017066
17067 @param pWDICtx: pointer to the WLAN DAL context
17068 pEventData: pointer to the event information structure
17069
Jeff Johnson295189b2012-06-20 16:38:30 -070017070 @see
17071 @return Result of the function call
17072*/
17073WDI_Status
17074WDI_ProcessExitUapsdRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017075(
Jeff Johnson295189b2012-06-20 16:38:30 -070017076 WDI_ControlBlockType* pWDICtx,
17077 WDI_EventInfoType* pEventData
17078)
17079{
Jeff Johnson295189b2012-06-20 16:38:30 -070017080 eHalStatus halStatus;
17081 WDI_ExitUapsdRspCb wdiExitUapsdRspCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017082 tHalExitUapsdRspParams halExitUapsdRsp;
17083 WDI_ExitUapsdRspParamsType wdiExitUapsdRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017084 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17085
17086 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017087 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017088 -------------------------------------------------------------------------*/
17089 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17090 ( NULL == pEventData->pEventData))
17091 {
17092 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17093 "%s: Invalid parameters", __FUNCTION__);
17094 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017095 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017096 }
17097
17098 wdiExitUapsdRspCb = (WDI_ExitUapsdRspCb)pWDICtx->pfncRspCB;
17099
17100 /*-------------------------------------------------------------------------
17101 Extract response and send it to UMAC
17102 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017103 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17104 {
17105 wpalMemoryCopy( &halExitUapsdRsp,
17106 pEventData->pEventData,
17107 sizeof(halExitUapsdRsp));
17108
17109 wdiExitUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halExitUapsdRsp.status);
17110 wdiExitUapsdRspParams.bssIdx = halExitUapsdRsp.bssIdx;
17111 }
17112 else
17113 {
17114 halStatus = *((eHalStatus*)pEventData->pEventData);
17115 wdiExitUapsdRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
17116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017117 // Restore back the DPU routing flag in the TxBD, for DPU to push the TxBDs to BTQM
17118 // directly instead of the FW WQ.
17119 pWDICtx->ucDpuRF = BMUWQ_BTQM_TX_MGMT;
17120
17121#ifdef WLAN_PERF
17122 // Increment the BD signature to refresh the fast path BD utilization
17123 pWDICtx->uBdSigSerialNum++;
17124#endif
17125
17126 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017127 wdiExitUapsdRspCb( &wdiExitUapsdRspParams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017128
Jeff Johnsone7245742012-09-05 17:12:55 -070017129 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017130}/*WDI_ProcessExitUapsdRsp*/
17131
17132/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017133 @brief Process set UAPSD params Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070017134 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017135
17136 @param pWDICtx: pointer to the WLAN DAL context
17137 pEventData: pointer to the event information structure
17138
Jeff Johnson295189b2012-06-20 16:38:30 -070017139 @see
17140 @return Result of the function call
17141*/
17142WDI_Status
17143WDI_ProcessSetUapsdAcParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017144(
Jeff Johnson295189b2012-06-20 16:38:30 -070017145 WDI_ControlBlockType* pWDICtx,
17146 WDI_EventInfoType* pEventData
17147)
17148{
17149 WDI_Status wdiStatus;
17150 eHalStatus halStatus;
17151 WDI_SetUapsdAcParamsCb wdiSetUapsdAcParamsCb;
17152 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17153
17154 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017155 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017156 -------------------------------------------------------------------------*/
17157 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17158 ( NULL == pEventData->pEventData))
17159 {
17160 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17161 "%s: Invalid parameters", __FUNCTION__);
17162 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017163 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017164 }
17165
17166 wdiSetUapsdAcParamsCb = (WDI_SetUapsdAcParamsCb)pWDICtx->pfncRspCB;
17167
17168 /*-------------------------------------------------------------------------
17169 Extract response and send it to UMAC
17170 -------------------------------------------------------------------------*/
17171 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017172 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017173
17174 /*Notify UMAC*/
17175 wdiSetUapsdAcParamsCb( wdiStatus, pWDICtx->pRspCBUserData);
17176
Jeff Johnsone7245742012-09-05 17:12:55 -070017177 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017178}/*WDI_ProcessSetUapsdAcParamsRsp*/
17179
17180/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017181 @brief Process update UAPSD params Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070017182 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017183
17184 @param pWDICtx: pointer to the WLAN DAL context
17185 pEventData: pointer to the event information structure
17186
Jeff Johnson295189b2012-06-20 16:38:30 -070017187 @see
17188 @return Result of the function call
17189*/
17190WDI_Status
17191WDI_ProcessUpdateUapsdParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017192(
Jeff Johnson295189b2012-06-20 16:38:30 -070017193 WDI_ControlBlockType* pWDICtx,
17194 WDI_EventInfoType* pEventData
17195)
17196{
17197 WDI_Status wdiStatus;
17198 eHalStatus halStatus;
17199 WDI_UpdateUapsdParamsCb wdiUpdateUapsdParamsCb;
17200 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17201
17202 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017203 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017204 -------------------------------------------------------------------------*/
17205 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17206 ( NULL == pEventData->pEventData))
17207 {
17208 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17209 "%s: Invalid parameters", __FUNCTION__);
17210 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017211 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017212 }
17213
17214 wdiUpdateUapsdParamsCb = (WDI_UpdateUapsdParamsCb)pWDICtx->pfncRspCB;
17215
17216 /*-------------------------------------------------------------------------
17217 Extract response and send it to UMAC
17218 -------------------------------------------------------------------------*/
17219 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017220 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017221
17222 /*Notify UMAC*/
17223 wdiUpdateUapsdParamsCb( wdiStatus, pWDICtx->pRspCBUserData);
17224
Jeff Johnsone7245742012-09-05 17:12:55 -070017225 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017226}/*WDI_ProcessUpdateUapsdParamsRsp*/
17227
17228/**
17229 @brief Process Configure RXP filter Rsp function (called when a
17230 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017231
17232 @param pWDICtx: pointer to the WLAN DAL context
17233 pEventData: pointer to the event information structure
17234
Jeff Johnson295189b2012-06-20 16:38:30 -070017235 @see
17236 @return Result of the function call
17237*/
17238WDI_Status
17239WDI_ProcessConfigureRxpFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017240(
Jeff Johnson295189b2012-06-20 16:38:30 -070017241 WDI_ControlBlockType* pWDICtx,
17242 WDI_EventInfoType* pEventData
17243)
17244{
17245 WDI_Status wdiStatus;
17246 eHalStatus halStatus;
17247 WDI_ConfigureRxpFilterCb wdiConfigureRxpFilterCb;
17248 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17249
17250 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017251 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017252 -------------------------------------------------------------------------*/
17253 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17254 ( NULL == pEventData->pEventData))
17255 {
17256 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17257 "%s: Invalid parameters", __FUNCTION__);
17258 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017259 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017260 }
17261
17262 wdiConfigureRxpFilterCb = (WDI_ConfigureRxpFilterCb)pWDICtx->pfncRspCB;
17263
17264 /*-------------------------------------------------------------------------
17265 Extract response and send it to UMAC
17266 -------------------------------------------------------------------------*/
17267 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017268 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017269
17270 /*Notify UMAC*/
17271 wdiConfigureRxpFilterCb( wdiStatus, pWDICtx->pRspCBUserData);
17272
Jeff Johnsone7245742012-09-05 17:12:55 -070017273 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017274}/*WDI_ProcessConfigureRxpFilterRsp*/
17275
17276/**
17277 @brief Process Set beacon filter Rsp function (called when a
17278 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017279
17280 @param pWDICtx: pointer to the WLAN DAL context
17281 pEventData: pointer to the event information structure
17282
Jeff Johnson295189b2012-06-20 16:38:30 -070017283 @see
17284 @return Result of the function call
17285*/
17286WDI_Status
17287WDI_ProcessSetBeaconFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017288(
Jeff Johnson295189b2012-06-20 16:38:30 -070017289 WDI_ControlBlockType* pWDICtx,
17290 WDI_EventInfoType* pEventData
17291)
17292{
17293 WDI_Status wdiStatus;
17294 eHalStatus halStatus;
17295 WDI_SetBeaconFilterCb wdiBeaconFilterCb;
17296 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17297
17298 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017299 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017300 -------------------------------------------------------------------------*/
17301 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17302 ( NULL == pEventData->pEventData))
17303 {
17304 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17305 "%s: Invalid parameters", __FUNCTION__);
17306 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017307 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017308 }
17309
17310 wdiBeaconFilterCb = (WDI_SetBeaconFilterCb)pWDICtx->pfncRspCB;
17311
17312 /*-------------------------------------------------------------------------
17313 Extract response and send it to UMAC
17314 -------------------------------------------------------------------------*/
17315 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017316 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017317
17318 /*Notify UMAC*/
17319 wdiBeaconFilterCb( wdiStatus, pWDICtx->pRspCBUserData);
17320
Jeff Johnsone7245742012-09-05 17:12:55 -070017321 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017322}/*WDI_ProcessSetBeaconFilterRsp*/
17323
17324/**
17325 @brief Process remove beacon filter Rsp function (called when a
17326 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017327
17328 @param pWDICtx: pointer to the WLAN DAL context
17329 pEventData: pointer to the event information structure
17330
Jeff Johnson295189b2012-06-20 16:38:30 -070017331 @see
17332 @return Result of the function call
17333*/
17334WDI_Status
17335WDI_ProcessRemBeaconFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017336(
Jeff Johnson295189b2012-06-20 16:38:30 -070017337 WDI_ControlBlockType* pWDICtx,
17338 WDI_EventInfoType* pEventData
17339)
17340{
17341 WDI_Status wdiStatus;
17342 eHalStatus halStatus;
17343 WDI_RemBeaconFilterCb wdiBeaconFilterCb;
17344 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17345
17346 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017347 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017348 -------------------------------------------------------------------------*/
17349 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17350 ( NULL == pEventData->pEventData))
17351 {
17352 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17353 "%s: Invalid parameters", __FUNCTION__);
17354 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017355 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017356 }
17357
17358 wdiBeaconFilterCb = (WDI_RemBeaconFilterCb)pWDICtx->pfncRspCB;
17359
17360 /*-------------------------------------------------------------------------
17361 Extract response and send it to UMAC
17362 -------------------------------------------------------------------------*/
17363 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017364 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017365
17366 /*Notify UMAC*/
17367 wdiBeaconFilterCb( wdiStatus, pWDICtx->pRspCBUserData);
17368
Jeff Johnsone7245742012-09-05 17:12:55 -070017369 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017370}/*WDI_ProcessRemBeaconFilterRsp*/
17371
17372/**
17373 @brief Process set RSSI thresholds Rsp function (called when a
17374 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017375
17376 @param pWDICtx: pointer to the WLAN DAL context
17377 pEventData: pointer to the event information structure
17378
Jeff Johnson295189b2012-06-20 16:38:30 -070017379 @see
17380 @return Result of the function call
17381*/
17382WDI_Status
17383WDI_ProcessSetRSSIThresoldsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017384(
Jeff Johnson295189b2012-06-20 16:38:30 -070017385 WDI_ControlBlockType* pWDICtx,
17386 WDI_EventInfoType* pEventData
17387)
17388{
17389 WDI_Status wdiStatus;
17390 eHalStatus halStatus;
17391 WDI_SetRSSIThresholdsCb wdiRSSIThresholdsCb;
17392 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17393
17394 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017395 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017396 -------------------------------------------------------------------------*/
17397 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17398 ( NULL == pEventData->pEventData))
17399 {
17400 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17401 "%s: Invalid parameters", __FUNCTION__);
17402 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017403 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017404 }
17405
17406 wdiRSSIThresholdsCb = (WDI_SetRSSIThresholdsCb)pWDICtx->pfncRspCB;
17407
17408 /*-------------------------------------------------------------------------
17409 Extract response and send it to UMAC
17410 -------------------------------------------------------------------------*/
17411 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017412 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017413
17414 /*Notify UMAC*/
17415 wdiRSSIThresholdsCb( wdiStatus, pWDICtx->pRspCBUserData);
17416
Jeff Johnsone7245742012-09-05 17:12:55 -070017417 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017418}/*WDI_ProcessSetRSSIThresoldsRsp*/
17419
17420/**
17421 @brief Process host offload Rsp function (called when a
17422 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017423
17424 @param pWDICtx: pointer to the WLAN DAL context
17425 pEventData: pointer to the event information structure
17426
Jeff Johnson295189b2012-06-20 16:38:30 -070017427 @see
17428 @return Result of the function call
17429*/
17430WDI_Status
17431WDI_ProcessHostOffloadRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017432(
Jeff Johnson295189b2012-06-20 16:38:30 -070017433 WDI_ControlBlockType* pWDICtx,
17434 WDI_EventInfoType* pEventData
17435)
17436{
17437 WDI_Status wdiStatus;
17438 eHalStatus halStatus;
17439 WDI_HostOffloadCb wdiHostOffloadCb;
17440 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17441
17442 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017443 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017444 -------------------------------------------------------------------------*/
17445 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17446 ( NULL == pEventData->pEventData))
17447 {
17448 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17449 "%s: Invalid parameters", __FUNCTION__);
17450 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017451 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017452 }
17453
17454 wdiHostOffloadCb = (WDI_HostOffloadCb)pWDICtx->pfncRspCB;
17455
17456 /*-------------------------------------------------------------------------
17457 Extract response and send it to UMAC
17458 -------------------------------------------------------------------------*/
17459 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017460 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017461
17462 /*Notify UMAC*/
17463 wdiHostOffloadCb( wdiStatus, pWDICtx->pRspCBUserData);
17464
Jeff Johnsone7245742012-09-05 17:12:55 -070017465 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017466}/*WDI_ProcessHostOffloadRsp*/
17467
17468/**
17469 @brief Process keep alive Rsp function (called when a
17470 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017471
17472 @param pWDICtx: pointer to the WLAN DAL context
17473 pEventData: pointer to the event information structure
17474
Jeff Johnson295189b2012-06-20 16:38:30 -070017475 @see
17476 @return Result of the function call
17477*/
17478WDI_Status
17479WDI_ProcessKeepAliveRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017480(
Jeff Johnson295189b2012-06-20 16:38:30 -070017481 WDI_ControlBlockType* pWDICtx,
17482 WDI_EventInfoType* pEventData
17483)
17484{
17485 WDI_Status wdiStatus;
17486 eHalStatus halStatus;
17487 WDI_KeepAliveCb wdiKeepAliveCb;
17488 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17489 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
17490 "Received WDI_ProcessKeepAliveRsp Callback from HAL");
17491
17492
17493 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017494 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017495 -------------------------------------------------------------------------*/
17496 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17497 ( NULL == pEventData->pEventData))
17498 {
17499 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17500 "%s: Invalid parameters", __FUNCTION__);
17501 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017502 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017503 }
17504
Jeff Johnsone7245742012-09-05 17:12:55 -070017505 wdiKeepAliveCb = (WDI_KeepAliveCb)pWDICtx->pfncRspCB;
17506
Jeff Johnson295189b2012-06-20 16:38:30 -070017507 /*-------------------------------------------------------------------------
17508 Extract response and send it to UMAC
17509 -------------------------------------------------------------------------*/
17510 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017511 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017512
17513 /*Notify UMAC*/
17514 wdiKeepAliveCb( wdiStatus, pWDICtx->pRspCBUserData);
17515
Jeff Johnsone7245742012-09-05 17:12:55 -070017516 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017517}/*WDI_ProcessKeepAliveRsp*/
17518
17519/**
17520 @brief Process wowl add ptrn Rsp function (called when a
17521 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017522
17523 @param pWDICtx: pointer to the WLAN DAL context
17524 pEventData: pointer to the event information structure
17525
Jeff Johnson295189b2012-06-20 16:38:30 -070017526 @see
17527 @return Result of the function call
17528*/
17529WDI_Status
17530WDI_ProcessWowlAddBcPtrnRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017531(
Jeff Johnson295189b2012-06-20 16:38:30 -070017532 WDI_ControlBlockType* pWDICtx,
17533 WDI_EventInfoType* pEventData
17534)
17535{
Jeff Johnson295189b2012-06-20 16:38:30 -070017536 eHalStatus halStatus;
17537 WDI_WowlAddBcPtrnCb wdiWowlAddBcPtrnCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017538 tHalAddWowlBcastPtrnRspParams halAddWowlBcastPtrRsp;
17539 WDI_WowlAddBcPtrnRspParamsType wdiWowlAddBcPtrRsp;
17540
Jeff Johnson295189b2012-06-20 16:38:30 -070017541 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17542
17543 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017544 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017545 -------------------------------------------------------------------------*/
17546 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17547 ( NULL == pEventData->pEventData))
17548 {
17549 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17550 "%s: Invalid parameters", __FUNCTION__);
17551 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017552 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017553 }
17554
17555 wdiWowlAddBcPtrnCb = (WDI_WowlAddBcPtrnCb)pWDICtx->pfncRspCB;
17556
17557 /*-------------------------------------------------------------------------
17558 Extract response and send it to UMAC
17559 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017560 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17561 {
17562 wpalMemoryCopy( &halAddWowlBcastPtrRsp,
17563 pEventData->pEventData,
17564 sizeof(halAddWowlBcastPtrRsp));
17565
17566 wdiWowlAddBcPtrRsp.wdiStatus =
17567 WDI_HAL_2_WDI_STATUS(halAddWowlBcastPtrRsp.status);
17568 }
17569 else
17570 {
17571 halStatus = *((eHalStatus*)pEventData->pEventData);
17572 wdiWowlAddBcPtrRsp.wdiStatus =
17573 WDI_HAL_2_WDI_STATUS(halStatus);
17574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017575
17576 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017577 wdiWowlAddBcPtrnCb( &wdiWowlAddBcPtrRsp, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017578
Jeff Johnsone7245742012-09-05 17:12:55 -070017579 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017580}/*WDI_ProcessWowlAddBcPtrnRsp*/
17581
17582/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017583 @brief Process wowl delete ptrn Rsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070017584 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017585
17586 @param pWDICtx: pointer to the WLAN DAL context
17587 pEventData: pointer to the event information structure
17588
Jeff Johnson295189b2012-06-20 16:38:30 -070017589 @see
17590 @return Result of the function call
17591*/
17592WDI_Status
17593WDI_ProcessWowlDelBcPtrnRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017594(
Jeff Johnson295189b2012-06-20 16:38:30 -070017595 WDI_ControlBlockType* pWDICtx,
17596 WDI_EventInfoType* pEventData
17597)
17598{
Jeff Johnson295189b2012-06-20 16:38:30 -070017599 eHalStatus halStatus;
17600 WDI_WowlDelBcPtrnCb wdiWowlDelBcPtrnCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017601 tHalDelWowlBcastPtrnRspParams halDelWowlBcastPtrRsp;
17602 WDI_WowlDelBcPtrnRspParamsType wdiWowlDelBcstPtrRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070017603 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17604
17605 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017606 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017607 -------------------------------------------------------------------------*/
17608 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17609 ( NULL == pEventData->pEventData))
17610 {
17611 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17612 "%s: Invalid parameters", __FUNCTION__);
17613 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017614 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017615 }
17616
17617 wdiWowlDelBcPtrnCb = (WDI_WowlDelBcPtrnCb)pWDICtx->pfncRspCB;
17618
17619 /*-------------------------------------------------------------------------
17620 Extract response and send it to UMAC
17621 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017622 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17623 {
17624 wpalMemoryCopy( &halDelWowlBcastPtrRsp,
17625 pEventData->pEventData,
17626 sizeof(halDelWowlBcastPtrRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -070017627
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017628 wdiWowlDelBcstPtrRsp.wdiStatus =
17629 WDI_HAL_2_WDI_STATUS(halDelWowlBcastPtrRsp.status);
17630 }
17631 else
17632 {
17633 halStatus = *((eHalStatus*)pEventData->pEventData);
17634 wdiWowlDelBcstPtrRsp.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
17635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017636 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017637 wdiWowlDelBcPtrnCb( &wdiWowlDelBcstPtrRsp, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017638
Jeff Johnsone7245742012-09-05 17:12:55 -070017639 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017640}/*WDI_ProcessWowlDelBcPtrnRsp*/
17641
17642/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017643 @brief Process wowl enter Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070017644 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017645
17646 @param pWDICtx: pointer to the WLAN DAL context
17647 pEventData: pointer to the event information structure
17648
Jeff Johnson295189b2012-06-20 16:38:30 -070017649 @see
17650 @return Result of the function call
17651*/
17652WDI_Status
17653WDI_ProcessWowlEnterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017654(
Jeff Johnson295189b2012-06-20 16:38:30 -070017655 WDI_ControlBlockType* pWDICtx,
17656 WDI_EventInfoType* pEventData
17657)
17658{
Jeff Johnson295189b2012-06-20 16:38:30 -070017659 eHalStatus halStatus;
17660 WDI_WowlEnterReqCb wdiWowlEnterCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017661 WDI_WowlEnterRspParamsType wdiwowlEnterRsp;
17662 tHalEnterWowlRspParams halEnterWowlRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017663 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17664
17665 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017666 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017667 -------------------------------------------------------------------------*/
17668 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17669 ( NULL == pEventData->pEventData))
17670 {
17671 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17672 "%s: Invalid parameters", __FUNCTION__);
17673 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017674 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017675 }
17676
17677 wdiWowlEnterCb = (WDI_WowlEnterReqCb)pWDICtx->pfncRspCB;
17678
17679 /*-------------------------------------------------------------------------
17680 Extract response and send it to UMAC
17681 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017682 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17683 {
17684 wpalMemoryCopy( &halEnterWowlRspParams,
17685 (wpt_uint8*)pEventData->pEventData,
17686 sizeof(halEnterWowlRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070017687
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017688 wdiwowlEnterRsp.bssIdx = halEnterWowlRspParams.bssIdx;
17689 wdiwowlEnterRsp.status =
17690 WDI_HAL_2_WDI_STATUS(halEnterWowlRspParams.status);
17691 }
17692 else
17693 {
17694 halStatus = *((eHalStatus*)pEventData->pEventData);
17695 wdiwowlEnterRsp.status = WDI_HAL_2_WDI_STATUS(halStatus);
17696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017697 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017698 wdiWowlEnterCb( &wdiwowlEnterRsp, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017699
Jeff Johnsone7245742012-09-05 17:12:55 -070017700 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017701}/*WDI_ProcessWowlEnterRsp*/
17702
17703/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017704 @brief Process wowl exit Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070017705 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017706
17707 @param pWDICtx: pointer to the WLAN DAL context
17708 pEventData: pointer to the event information structure
17709
Jeff Johnson295189b2012-06-20 16:38:30 -070017710 @see
17711 @return Result of the function call
17712*/
17713WDI_Status
17714WDI_ProcessWowlExitRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017715(
Jeff Johnson295189b2012-06-20 16:38:30 -070017716 WDI_ControlBlockType* pWDICtx,
17717 WDI_EventInfoType* pEventData
17718)
17719{
Jeff Johnson295189b2012-06-20 16:38:30 -070017720 eHalStatus halStatus;
17721 WDI_WowlExitReqCb wdiWowlExitCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017722 tHalExitWowlRspParams halExitWowlRspParams;
17723 WDI_WowlExitRspParamsType wdiWowlExitRsp;
17724
Jeff Johnson295189b2012-06-20 16:38:30 -070017725 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17726
17727 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017728 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017729 -------------------------------------------------------------------------*/
17730 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17731 ( NULL == pEventData->pEventData))
17732 {
17733 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17734 "%s: Invalid parameters", __FUNCTION__);
17735 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017736 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 }
17738
17739 wdiWowlExitCb = (WDI_WowlExitReqCb)pWDICtx->pfncRspCB;
17740
17741 /*-------------------------------------------------------------------------
17742 Extract response and send it to UMAC
17743 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017744 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
17745 {
17746 wpalMemoryCopy( &halExitWowlRspParams,
17747 pEventData->pEventData,
17748 sizeof(halExitWowlRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070017749
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017750 wdiWowlExitRsp.status = WDI_HAL_2_WDI_STATUS(halExitWowlRspParams.status);
17751 wdiWowlExitRsp.bssIdx = halExitWowlRspParams.bssIdx;
17752
17753 }
17754 else
17755 {
17756 halStatus = *((eHalStatus*)pEventData->pEventData);
17757 wdiWowlExitRsp.status = WDI_HAL_2_WDI_STATUS(halStatus);
17758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017759 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017760 wdiWowlExitCb( &wdiWowlExitRsp, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017761
Jeff Johnsone7245742012-09-05 17:12:55 -070017762 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017763}/*WDI_ProcessWowlExitRsp*/
17764
17765/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017766 @brief Process Configure Apps CPU wakeup State Rsp function
Jeff Johnson295189b2012-06-20 16:38:30 -070017767 (called when a response is being received over the bus
17768 from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017769
17770 @param pWDICtx: pointer to the WLAN DAL context
17771 pEventData: pointer to the event information structure
17772
Jeff Johnson295189b2012-06-20 16:38:30 -070017773 @see
17774 @return Result of the function call
17775*/
17776WDI_Status
17777WDI_ProcessConfigureAppsCpuWakeupStateRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017778(
Jeff Johnson295189b2012-06-20 16:38:30 -070017779 WDI_ControlBlockType* pWDICtx,
17780 WDI_EventInfoType* pEventData
17781)
17782{
17783 WDI_Status wdiStatus;
17784 eHalStatus halStatus;
17785 WDI_ConfigureAppsCpuWakeupStateCb wdiConfigureAppsCpuWakeupStateCb;
17786 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17787
17788 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017789 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017790 -------------------------------------------------------------------------*/
17791 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17792 ( NULL == pEventData->pEventData))
17793 {
17794 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17795 "%s: Invalid parameters", __FUNCTION__);
17796 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017797 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017798 }
17799
17800 wdiConfigureAppsCpuWakeupStateCb = (WDI_ConfigureAppsCpuWakeupStateCb)pWDICtx->pfncRspCB;
17801
17802 /*-------------------------------------------------------------------------
17803 Extract response and send it to UMAC
17804 -------------------------------------------------------------------------*/
17805 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070017806 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017807
17808 /*Notify UMAC*/
17809 wdiConfigureAppsCpuWakeupStateCb( wdiStatus, pWDICtx->pRspCBUserData);
17810
Jeff Johnsone7245742012-09-05 17:12:55 -070017811 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017812}/*WDI_ProcessConfigureAppsCpuWakeupStateRsp*/
17813
17814
17815/**
17816 @brief Process Nv download(called when a response
17817 is being received over the bus from HAL,will check if the responce is )
Jeff Johnsone7245742012-09-05 17:12:55 -070017818
17819 @param pWDICtx: pointer to the WLAN DAL context
17820 pEventData: pointer to the event information structure
17821
Jeff Johnson295189b2012-06-20 16:38:30 -070017822 @see
17823 @return Result of the function call
17824*/
17825WDI_Status
17826WDI_ProcessNvDownloadRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017827(
Jeff Johnson295189b2012-06-20 16:38:30 -070017828 WDI_ControlBlockType* pWDICtx,
17829 WDI_EventInfoType* pEventData
17830)
17831{
17832
17833 WDI_NvDownloadRspCb wdiNvDownloadRspCb;
17834 tHalNvImgDownloadRspParams halNvDownloadRsp;
17835 WDI_NvDownloadRspInfoType wdiNvDownloadRsp;
17836
17837 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017838 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017839 -------------------------------------------------------------------------*/
17840 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17841 ( NULL == pEventData->pEventData))
17842 {
17843 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17844 "%s: Invalid parameters", __FUNCTION__);
17845 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017846 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017847 }
17848
17849 /*-------------------------------------------------------------------------
17850 Extract response and send it to UMAC
17851 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070017852 wpalMemoryCopy( &halNvDownloadRsp,
17853 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070017854 sizeof(halNvDownloadRsp));
17855
17856 wdiNvDownloadRsp.wdiStatus = WDI_HAL_2_WDI_STATUS(halNvDownloadRsp.status);
17857
17858 if((wdiNvDownloadRsp.wdiStatus == WDI_STATUS_SUCCESS) &&
Jeff Johnsone7245742012-09-05 17:12:55 -070017859 (pWDICtx->wdiNvBlobInfo.usCurrentFragment !=
17860 pWDICtx->wdiNvBlobInfo.usTotalFragment ))
Jeff Johnson295189b2012-06-20 16:38:30 -070017861 {
17862 WDI_NvDownloadReq(&pWDICtx->wdiCachedNvDownloadReq,
Jeff Johnsone7245742012-09-05 17:12:55 -070017863 (WDI_NvDownloadRspCb)pWDICtx->pfncRspCB, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070017864 }
17865 else
17866 {
17867 /*Reset the Nv related global information in WDI context information */
17868 pWDICtx->wdiNvBlobInfo.usTotalFragment = 0;
17869 pWDICtx->wdiNvBlobInfo.usFragmentSize = 0;
17870 pWDICtx->wdiNvBlobInfo.usCurrentFragment = 0;
17871 /*call WDA callback function for last fragment */
17872 wdiNvDownloadRspCb = (WDI_NvDownloadRspCb)pWDICtx->pfncRspCB;
17873 wdiNvDownloadRspCb( &wdiNvDownloadRsp, pWDICtx->pRspCBUserData);
17874 }
17875
Jeff Johnsone7245742012-09-05 17:12:55 -070017876 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017877}
17878#ifdef WLAN_FEATURE_VOWIFI_11R
17879/**
17880 @brief Process Add TSpec Rsp function (called when a response
17881 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017882
17883 @param pWDICtx: pointer to the WLAN DAL context
17884 pEventData: pointer to the event information structure
17885
Jeff Johnson295189b2012-06-20 16:38:30 -070017886 @see
17887 @return Result of the function call
17888*/
17889WDI_Status
17890WDI_ProcessAggrAddTSpecRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017891(
Jeff Johnson295189b2012-06-20 16:38:30 -070017892 WDI_ControlBlockType* pWDICtx,
17893 WDI_EventInfoType* pEventData
17894)
17895{
17896 WDI_Status wdiStatus;
17897 tAggrAddTsRspParams aggrAddTsRsp;
17898 WDI_AggrAddTsRspCb wdiAggrAddTsRspCb;
17899 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17900
17901 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017902 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017903 -------------------------------------------------------------------------*/
17904 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17905 ( NULL == pEventData->pEventData))
17906 {
17907 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17908 "%s: Invalid parameters", __FUNCTION__);
17909 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017910 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017911 }
17912
17913 wdiAggrAddTsRspCb = (WDI_AddTsRspCb)pWDICtx->pfncRspCB;
17914
17915 /*-------------------------------------------------------------------------
17916 Extract response and send it to UMAC
17917 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070017918 wpalMemoryCopy( &aggrAddTsRsp,
17919 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070017920 sizeof(aggrAddTsRsp));
17921
17922 /* What is the difference between status0 and status1? */
Jeff Johnsone7245742012-09-05 17:12:55 -070017923 wdiStatus = WDI_HAL_2_WDI_STATUS(aggrAddTsRsp.status0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017924
17925 /*Notify UMAC*/
17926 wdiAggrAddTsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
17927
Jeff Johnsone7245742012-09-05 17:12:55 -070017928 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070017929}/*WDI_ProcessAddTSpecRsp*/
17930#endif /* WLAN_FEATURE_VOWIFI_11R */
17931
17932/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017933 @brief WDI_ProcessHostResumeRsp function (called when a
Jeff Johnson295189b2012-06-20 16:38:30 -070017934 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017935
17936 @param pWDICtx: pointer to the WLAN DAL context
17937 pEventData: pointer to the event information structure
17938
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 @see
17940 @return Result of the function call
17941*/
17942WDI_Status
17943WDI_ProcessHostResumeRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017944(
Jeff Johnson295189b2012-06-20 16:38:30 -070017945 WDI_ControlBlockType* pWDICtx,
17946 WDI_EventInfoType* pEventData
17947)
17948{
17949 WDI_SuspendResumeRspParamsType wdiResumeRspParams;
17950 WDI_HostResumeEventRspCb wdiHostResumeRspCb;
17951 tHalHostResumeRspParams hostResumeRspMsg;
17952 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17953
17954 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070017955 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070017956 -------------------------------------------------------------------------*/
17957 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
17958 ( NULL == pEventData->pEventData))
17959 {
17960 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
17961 "%s: Invalid parameters", __FUNCTION__);
17962 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070017963 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017964 }
17965
17966 wdiHostResumeRspCb = (WDI_HostResumeEventRspCb)pWDICtx->pfncRspCB;
17967
17968 /*-------------------------------------------------------------------------
17969 Extract response and send it to UMAC
17970 -------------------------------------------------------------------------*/
17971
Jeff Johnsone7245742012-09-05 17:12:55 -070017972 wpalMemoryCopy( &hostResumeRspMsg,
Jeff Johnson295189b2012-06-20 16:38:30 -070017973 (wpt_uint8*)pEventData->pEventData,
17974 sizeof(hostResumeRspMsg));
17975
Jeff Johnsone7245742012-09-05 17:12:55 -070017976 wdiResumeRspParams.wdiStatus =
17977 WDI_HAL_2_WDI_STATUS(hostResumeRspMsg.status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017978
17979 /*Notify UMAC*/
17980 wdiHostResumeRspCb(&wdiResumeRspParams, (void*) pWDICtx->pRspCBUserData);
17981
17982 return WDI_STATUS_SUCCESS;
17983}
17984
17985/**
Jeff Johnsone7245742012-09-05 17:12:55 -070017986 @brief Process Set Tx PER Rsp function (called when a response
Jeff Johnson295189b2012-06-20 16:38:30 -070017987 is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070017988
17989 @param pWDICtx: pointer to the WLAN DAL context
17990 pEventData: pointer to the event information structure
17991
Jeff Johnson295189b2012-06-20 16:38:30 -070017992 @see
17993 @return Result of the function call
17994*/
17995WDI_Status
17996WDI_ProcessSetTxPerTrackingRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070017997(
Jeff Johnson295189b2012-06-20 16:38:30 -070017998 WDI_ControlBlockType* pWDICtx,
17999 WDI_EventInfoType* pEventData
18000)
18001{
18002 WDI_Status wdiStatus;
18003 eHalStatus halStatus;
18004 WDI_SetTxPerTrackingRspCb pwdiSetTxPerTrackingRspCb;
18005 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18006
18007 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018008 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018009 -------------------------------------------------------------------------*/
18010 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18011 ( NULL == pEventData->pEventData))
18012 {
18013 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18014 "%s: Invalid parameters", __FUNCTION__);
18015 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018016 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018017 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018018
18019 pwdiSetTxPerTrackingRspCb = (WDI_SetTxPerTrackingRspCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070018020
18021 /*-------------------------------------------------------------------------
18022 Extract response and send it to UMAC
18023 -------------------------------------------------------------------------*/
18024 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070018025 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018026
18027 /*Notify UMAC*/
18028 pwdiSetTxPerTrackingRspCb( wdiStatus, pWDICtx->pRspCBUserData);
18029
Jeff Johnsone7245742012-09-05 17:12:55 -070018030 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018031}/*WDI_ProcessSetTxPerTrackingRsp*/
18032
18033/*==========================================================================
18034 Indications from HAL
18035 ==========================================================================*/
18036/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018037 @brief Process Low RSSI Indication function (called when an
Jeff Johnson295189b2012-06-20 16:38:30 -070018038 indication of this kind is being received over the bus
18039 from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018040
18041 @param pWDICtx: pointer to the WLAN DAL context
18042 pEventData: pointer to the event information structure
18043
Jeff Johnson295189b2012-06-20 16:38:30 -070018044 @see
18045 @return Result of the function call
18046*/
18047WDI_Status
18048WDI_ProcessLowRSSIInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018049(
Jeff Johnson295189b2012-06-20 16:38:30 -070018050 WDI_ControlBlockType* pWDICtx,
18051 WDI_EventInfoType* pEventData
18052)
18053{
18054 WDI_LowLevelIndType wdiInd;
18055 tHalRSSINotificationIndMsg halRSSINotificationIndMsg;
18056 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18057
18058 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018059 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018060 -------------------------------------------------------------------------*/
18061 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18062 ( NULL == pEventData->pEventData))
18063 {
18064 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18065 "%s: Invalid parameters", __FUNCTION__);
18066 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018067 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018068 }
18069
18070 /*-------------------------------------------------------------------------
18071 Extract indication and send it to UMAC
18072 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018073 wpalMemoryCopy( (void *)&halRSSINotificationIndMsg.rssiNotificationParams,
18074 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070018075 sizeof(tHalRSSINotification));
18076
18077 /*Fill in the indication parameters*/
18078 wdiInd.wdiIndicationType = WDI_RSSI_NOTIFICATION_IND;
18079 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross =
18080 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres1PosCross;
18081 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross =
18082 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres1NegCross;
18083 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross =
18084 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres2PosCross;
18085 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross =
18086 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres2NegCross;
18087 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross =
18088 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres3PosCross;
18089 wdiInd.wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross =
18090 halRSSINotificationIndMsg.rssiNotificationParams.bRssiThres3NegCross;
18091
18092 /*Notify UMAC*/
18093 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018094
18095 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018096}/*WDI_ProcessLowRSSIInd*/
18097
18098
18099/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018100 @brief Process Missed Beacon Indication function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070018101 an indication of this kind is being received over the
18102 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018103
18104 @param pWDICtx: pointer to the WLAN DAL context
18105 pEventData: pointer to the event information structure
18106
Jeff Johnson295189b2012-06-20 16:38:30 -070018107 @see
18108 @return Result of the function call
18109*/
18110WDI_Status
18111WDI_ProcessMissedBeaconInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018112(
Jeff Johnson295189b2012-06-20 16:38:30 -070018113 WDI_ControlBlockType* pWDICtx,
18114 WDI_EventInfoType* pEventData
18115)
18116{
18117 WDI_Status wdiStatus;
18118 eHalStatus halStatus;
18119 WDI_LowLevelIndType wdiInd;
18120 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18121
18122 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018123 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018124 -------------------------------------------------------------------------*/
18125 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18126 ( NULL == pEventData->pEventData))
18127 {
18128 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18129 "%s: Invalid parameters", __FUNCTION__);
18130 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018131 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018132 }
18133
18134 /*-------------------------------------------------------------------------
18135 Extract indication and send it to UMAC
18136 -------------------------------------------------------------------------*/
18137 /*! TO DO: Parameters need to be unpacked according to HAL struct*/
18138 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070018139 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018140
18141 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018142 wdiInd.wdiIndicationType = WDI_MISSED_BEACON_IND;
18143
Jeff Johnson295189b2012-06-20 16:38:30 -070018144 /*Notify UMAC*/
18145 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018146
18147 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018148}/*WDI_ProcessMissedBeaconInd*/
18149
18150
18151/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018152 @brief Process Unk Addr Frame Indication function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070018153 an indication of this kind is being received over the
18154 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018155
18156 @param pWDICtx: pointer to the WLAN DAL context
18157 pEventData: pointer to the event information structure
18158
Jeff Johnson295189b2012-06-20 16:38:30 -070018159 @see
18160 @return Result of the function call
18161*/
18162WDI_Status
18163WDI_ProcessUnkAddrFrameInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018164(
Jeff Johnson295189b2012-06-20 16:38:30 -070018165 WDI_ControlBlockType* pWDICtx,
18166 WDI_EventInfoType* pEventData
18167)
18168{
18169 WDI_Status wdiStatus;
18170 eHalStatus halStatus;
18171 WDI_LowLevelIndType wdiInd;
18172 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18173
18174 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018175 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018176 -------------------------------------------------------------------------*/
18177 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18178 ( NULL == pEventData->pEventData))
18179 {
18180 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18181 "%s: Invalid parameters", __FUNCTION__);
18182 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018183 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018184 }
18185
18186 /*-------------------------------------------------------------------------
18187 Extract indication and send it to UMAC
18188 -------------------------------------------------------------------------*/
18189 /*! TO DO: Parameters need to be unpacked according to HAL struct*/
18190 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070018191 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018192
18193 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018194 wdiInd.wdiIndicationType = WDI_UNKNOWN_ADDR2_FRAME_RX_IND;
Jeff Johnson295189b2012-06-20 16:38:30 -070018195 /* ! TO DO - fill in from HAL struct:
18196 wdiInd.wdiIndicationData.wdiUnkAddr2FrmInfo*/
18197
18198 /*Notify UMAC*/
18199 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018200
18201 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018202}/*WDI_ProcessUnkAddrFrameInd*/
18203
18204
18205/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018206 @brief Process MIC Failure Indication function (called when an
Jeff Johnson295189b2012-06-20 16:38:30 -070018207 indication of this kind is being received over the bus
18208 from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018209
18210 @param pWDICtx: pointer to the WLAN DAL context
18211 pEventData: pointer to the event information structure
18212
Jeff Johnson295189b2012-06-20 16:38:30 -070018213 @see
18214 @return Result of the function call
18215*/
18216WDI_Status
18217WDI_ProcessMicFailureInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018218(
Jeff Johnson295189b2012-06-20 16:38:30 -070018219 WDI_ControlBlockType* pWDICtx,
18220 WDI_EventInfoType* pEventData
18221)
18222{
18223 WDI_LowLevelIndType wdiInd;
18224 tpSirMicFailureInd pHalMicFailureInd;
18225
18226 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18227
18228 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018229 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018230 -------------------------------------------------------------------------*/
18231 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18232 ( NULL == pEventData->pEventData))
18233 {
18234 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18235 "%s: Invalid parameters", __FUNCTION__);
18236 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018237 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018238 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018239
Jeff Johnson295189b2012-06-20 16:38:30 -070018240 pHalMicFailureInd = (tpSirMicFailureInd)pEventData->pEventData;
18241 /*-------------------------------------------------------------------------
18242 Extract indication and send it to UMAC
18243 -------------------------------------------------------------------------*/
18244
18245 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018246 wdiInd.wdiIndicationType = WDI_MIC_FAILURE_IND;
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.bssId,
18248 pHalMicFailureInd->bssId, WDI_MAC_ADDR_LEN);
18249 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
18250 pHalMicFailureInd->info.srcMacAddr, WDI_MAC_ADDR_LEN);
18251 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.macTaAddr,
18252 pHalMicFailureInd->info.taMacAddr, WDI_MAC_ADDR_LEN);
18253 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.macDstAddr,
18254 pHalMicFailureInd->info.dstMacAddr, WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070018255 wdiInd.wdiIndicationData.wdiMICFailureInfo.ucMulticast =
Jeff Johnson295189b2012-06-20 16:38:30 -070018256 pHalMicFailureInd->info.multicast;
Jeff Johnsone7245742012-09-05 17:12:55 -070018257 wdiInd.wdiIndicationData.wdiMICFailureInfo.ucIV1 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018258 pHalMicFailureInd->info.IV1;
Jeff Johnsone7245742012-09-05 17:12:55 -070018259 wdiInd.wdiIndicationData.wdiMICFailureInfo.keyId=
Jeff Johnson295189b2012-06-20 16:38:30 -070018260 pHalMicFailureInd->info.keyId;
18261 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.TSC,
18262 pHalMicFailureInd->info.TSC,WDI_CIPHER_SEQ_CTR_SIZE);
18263 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiMICFailureInfo.macRxAddr,
18264 pHalMicFailureInd->info.rxMacAddr, WDI_MAC_ADDR_LEN);
18265 /*Notify UMAC*/
18266 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018267
18268 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018269}/*WDI_ProcessMicFailureInd*/
18270
18271
18272/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018273 @brief Process Fatal Failure Indication function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070018274 an indication of this kind is being received over the
18275 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018276
18277 @param pWDICtx: pointer to the WLAN DAL context
18278 pEventData: pointer to the event information structure
18279
Jeff Johnson295189b2012-06-20 16:38:30 -070018280 @see
18281 @return Result of the function call
18282*/
18283WDI_Status
18284WDI_ProcessFatalErrorInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018285(
Jeff Johnson295189b2012-06-20 16:38:30 -070018286 WDI_ControlBlockType* pWDICtx,
18287 WDI_EventInfoType* pEventData
18288)
18289{
18290 WDI_Status wdiStatus;
18291 eHalStatus halStatus;
18292 WDI_LowLevelIndType wdiInd;
18293 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18294
18295 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018296 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018297 -------------------------------------------------------------------------*/
18298 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18299 ( NULL == pEventData->pEventData))
18300 {
18301 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18302 "%s: Invalid parameters", __FUNCTION__);
18303 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018304 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018305 }
18306
18307 /*-------------------------------------------------------------------------
18308 Extract indication and send it to UMAC
18309 -------------------------------------------------------------------------*/
18310
18311 /*! TO DO: Parameters need to be unpacked according to HAL struct*/
18312 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070018313 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018314
18315 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
18316 "Fatal failure received from device %d ", halStatus );
Jeff Johnsone7245742012-09-05 17:12:55 -070018317
Jeff Johnson295189b2012-06-20 16:38:30 -070018318 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018319 wdiInd.wdiIndicationType = WDI_FATAL_ERROR_IND;
18320 wdiInd.wdiIndicationData.usErrorCode = WDI_ERR_DEV_INTERNAL_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018321
18322 /*Notify UMAC*/
18323 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018324
18325 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018326}/*WDI_ProcessFatalErrorInd*/
18327
18328/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018329 @brief Process Delete STA Indication function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070018330 an indication of this kind is being received over the
18331 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018332
18333 @param pWDICtx: pointer to the WLAN DAL context
18334 pEventData: pointer to the event information structure
18335
Jeff Johnson295189b2012-06-20 16:38:30 -070018336 @see
18337 @return Result of the function call
18338*/
18339WDI_Status
18340WDI_ProcessDelSTAInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018341(
Jeff Johnson295189b2012-06-20 16:38:30 -070018342 WDI_ControlBlockType* pWDICtx,
18343 WDI_EventInfoType* pEventData
18344)
18345{
18346 tDeleteStaContextParams halDelSTACtx;
18347 WDI_LowLevelIndType wdiInd;
18348 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18349
18350 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018351 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018352 -------------------------------------------------------------------------*/
18353 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18354 ( NULL == pEventData->pEventData))
18355 {
18356 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18357 "%s: Invalid parameters", __FUNCTION__);
18358 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018359 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018360 }
18361
18362 /*-------------------------------------------------------------------------
18363 Extract indication and send it to UMAC
18364 -------------------------------------------------------------------------*/
18365
18366 /* Parameters need to be unpacked according to HAL struct*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018367 wpalMemoryCopy( &halDelSTACtx,
18368 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070018369 sizeof(halDelSTACtx));
18370
18371 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018372 wdiInd.wdiIndicationType = WDI_DEL_STA_IND;
Jeff Johnson295189b2012-06-20 16:38:30 -070018373
18374 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
18375 halDelSTACtx.addr2, WDI_MAC_ADDR_LEN);
18376 wpalMemoryCopy(wdiInd.wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
18377 halDelSTACtx.bssId, WDI_MAC_ADDR_LEN);
18378
Jeff Johnsone7245742012-09-05 17:12:55 -070018379 wdiInd.wdiIndicationData.wdiDeleteSTAIndType.usAssocId =
Jeff Johnson295189b2012-06-20 16:38:30 -070018380 halDelSTACtx.assocId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018381 wdiInd.wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx =
Jeff Johnson295189b2012-06-20 16:38:30 -070018382 halDelSTACtx.staId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018383 wdiInd.wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode =
18384 halDelSTACtx.reasonCode;
Jeff Johnson295189b2012-06-20 16:38:30 -070018385
18386 /*Notify UMAC*/
18387 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018388
18389 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018390}/*WDI_ProcessDelSTAInd*/
18391
18392/**
18393*@brief Process Coex Indication function (called when
18394 an indication of this kind is being received over the
18395 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018396
18397 @param pWDICtx: pointer to the WLAN DAL context
18398 pEventData: pointer to the event information structure
18399
Jeff Johnson295189b2012-06-20 16:38:30 -070018400 @see
18401 @return Result of the function call
18402*/
18403WDI_Status
18404WDI_ProcessCoexInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018405(
Jeff Johnson295189b2012-06-20 16:38:30 -070018406 WDI_ControlBlockType* pWDICtx,
18407 WDI_EventInfoType* pEventData
18408)
18409{
18410 WDI_LowLevelIndType wdiInd;
18411 tCoexIndMsg halCoexIndMsg;
18412 wpt_uint32 index;
18413 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18414
18415 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018416 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018417 -------------------------------------------------------------------------*/
18418 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18419 ( NULL == pEventData->pEventData ))
18420 {
18421 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18422 "%s: Invalid parameters", __FUNCTION__);
18423 WDI_ASSERT( 0 );
Jeff Johnsone7245742012-09-05 17:12:55 -070018424 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018425 }
18426
18427 /*-------------------------------------------------------------------------
18428 Extract indication and send it to UMAC
18429 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018430 wpalMemoryCopy( &halCoexIndMsg.coexIndParams,
18431 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070018432 sizeof(halCoexIndMsg.coexIndParams) );
18433
18434 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018435 wdiInd.wdiIndicationType = WDI_COEX_IND;
18436 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndType = halCoexIndMsg.coexIndParams.coexIndType;
Jeff Johnson295189b2012-06-20 16:38:30 -070018437 for (index = 0; index < WDI_COEX_IND_DATA_SIZE; index++)
18438 {
Jeff Johnsone7245742012-09-05 17:12:55 -070018439 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndData[index] = halCoexIndMsg.coexIndParams.coexIndData[index];
Jeff Johnson295189b2012-06-20 16:38:30 -070018440 }
18441
18442 // DEBUG
18443 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
18444 "[COEX WDI] Coex Ind Type (%x) data (%x %x %x %x)",
Jeff Johnsone7245742012-09-05 17:12:55 -070018445 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndType,
18446 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndData[0],
18447 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndData[1],
18448 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndData[2],
18449 wdiInd.wdiIndicationData.wdiCoexInfo.coexIndData[3] );
Jeff Johnson295189b2012-06-20 16:38:30 -070018450
18451 /*Notify UMAC*/
18452 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018453
18454 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018455}/*WDI_ProcessCoexInd*/
18456
18457/**
18458*@brief Process Tx Complete Indication function (called when
18459 an indication of this kind is being received over the
18460 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018461
18462 @param pWDICtx: pointer to the WLAN DAL context
18463 pEventData: pointer to the event information structure
18464
Jeff Johnson295189b2012-06-20 16:38:30 -070018465 @see
18466 @return Result of the function call
18467*/
18468WDI_Status
18469WDI_ProcessTxCompleteInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018470(
Jeff Johnson295189b2012-06-20 16:38:30 -070018471 WDI_ControlBlockType* pWDICtx,
18472 WDI_EventInfoType* pEventData
18473)
18474{
18475 WDI_LowLevelIndType wdiInd;
18476 tTxComplIndMsg halTxComplIndMsg;
18477 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18478
18479 /*-------------------------------------------------------------------------
18480 Sanity check
18481 -------------------------------------------------------------------------*/
18482 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18483 ( NULL == pEventData->pEventData ))
18484 {
18485 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18486 "%s: Invalid parameters", __FUNCTION__);
18487 WDI_ASSERT( 0 );
18488 return WDI_STATUS_E_FAILURE;
18489 }
18490
18491 /*-------------------------------------------------------------------------
18492 Extract indication and send it to UMAC
18493 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018494 wpalMemoryCopy( &halTxComplIndMsg.txComplParams,
18495 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070018496 sizeof(halTxComplIndMsg.txComplParams) );
18497
18498 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018499 wdiInd.wdiIndicationType = WDI_TX_COMPLETE_IND;
18500 wdiInd.wdiIndicationData.tx_complete_status
18501 = halTxComplIndMsg.txComplParams.status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018502
18503 /*Notify UMAC*/
18504 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070018505
18506 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018507}/*WDI_ProcessTxCompleteInd*/
18508
18509#ifdef WLAN_FEATURE_P2P
18510/**
18511*@brief Process Noa Attr Indication function (called when
18512 an indication of this kind is being received over the
18513 bus from HAL)
18514
18515 @param pWDICtx: pointer to the WLAN DAL context
18516 pEventData: pointer to the event information structure
18517
18518 @see
18519 @return Result of the function call
18520*/
18521WDI_Status
18522WDI_ProcessP2pNoaAttrInd
18523(
18524 WDI_ControlBlockType* pWDICtx,
18525 WDI_EventInfoType* pEventData
18526)
18527{
18528 WDI_LowLevelIndType wdiInd;
18529 tNoaAttrIndMsg halNoaAttrIndMsg;
18530 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18531
18532 /*-------------------------------------------------------------------------
18533 Sanity check
18534 -------------------------------------------------------------------------*/
18535 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18536 ( NULL == pEventData->pEventData ))
18537 {
18538 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18539 "%s: Invalid parameters", __FUNCTION__);
18540 WDI_ASSERT( 0 );
18541 return WDI_STATUS_E_FAILURE;
18542 }
18543
18544 /*-------------------------------------------------------------------------
18545 Extract indication and send it to UMAC
18546 -------------------------------------------------------------------------*/
18547 wpalMemoryCopy( &halNoaAttrIndMsg.noaAttrIndParams,
18548 pEventData->pEventData,
18549 sizeof(halNoaAttrIndMsg.noaAttrIndParams) );
18550
18551 /*Fill in the indication parameters*/
18552 wdiInd.wdiIndicationType = WDI_P2P_NOA_ATTR_IND;
Jeff Johnsone7245742012-09-05 17:12:55 -070018553
Jeff Johnson295189b2012-06-20 16:38:30 -070018554 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.status
18555 = halNoaAttrIndMsg.noaAttrIndParams.status;
Jeff Johnsone7245742012-09-05 17:12:55 -070018556
Jeff Johnson295189b2012-06-20 16:38:30 -070018557 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex
18558 = halNoaAttrIndMsg.noaAttrIndParams.index;
18559 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag
18560 = halNoaAttrIndMsg.noaAttrIndParams.oppPsFlag;
18561 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin
18562 = halNoaAttrIndMsg.noaAttrIndParams.ctWin;
Jeff Johnsone7245742012-09-05 17:12:55 -070018563
Jeff Johnson295189b2012-06-20 16:38:30 -070018564 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt
18565 = halNoaAttrIndMsg.noaAttrIndParams.uNoa1IntervalCnt;
18566 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration
18567 = halNoaAttrIndMsg.noaAttrIndParams.uNoa1Duration;
18568 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval
18569 = halNoaAttrIndMsg.noaAttrIndParams.uNoa1Interval;
18570 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime
18571 = halNoaAttrIndMsg.noaAttrIndParams.uNoa1StartTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018572
Jeff Johnson295189b2012-06-20 16:38:30 -070018573 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt
18574 = halNoaAttrIndMsg.noaAttrIndParams.uNoa2IntervalCnt;
18575 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration
18576 = halNoaAttrIndMsg.noaAttrIndParams.uNoa2Duration;
18577 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval
18578 = halNoaAttrIndMsg.noaAttrIndParams.uNoa2Interval;
18579 wdiInd.wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime
18580 = halNoaAttrIndMsg.noaAttrIndParams.uNoa2StartTime;
18581
18582 /*Notify UMAC*/
18583 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
18584
18585 return WDI_STATUS_SUCCESS;
18586}/*WDI_ProcessNoaAttrInd*/
18587#endif
18588
18589/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018590 @brief Process Tx PER Hit Indication function (called when
Jeff Johnson295189b2012-06-20 16:38:30 -070018591 an indication of this kind is being received over the
18592 bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070018593
18594 @param pWDICtx: pointer to the WLAN DAL context
18595 pEventData: pointer to the event information structure
18596
Jeff Johnson295189b2012-06-20 16:38:30 -070018597 @see
18598 @return Result of the function call
18599*/
18600WDI_Status
18601WDI_ProcessTxPerHitInd
Jeff Johnsone7245742012-09-05 17:12:55 -070018602(
Jeff Johnson295189b2012-06-20 16:38:30 -070018603 WDI_ControlBlockType* pWDICtx,
18604 WDI_EventInfoType* pEventData
18605)
18606{
18607 WDI_LowLevelIndType wdiInd;
18608 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Jeff Johnsone7245742012-09-05 17:12:55 -070018609
Jeff Johnson295189b2012-06-20 16:38:30 -070018610 /*-------------------------------------------------------------------------
18611 Extract indication and send it to UMAC
18612 -------------------------------------------------------------------------*/
18613 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018614 wdiInd.wdiIndicationType = WDI_TX_PER_HIT_IND;
18615
Jeff Johnson295189b2012-06-20 16:38:30 -070018616 /*Notify UMAC*/
18617 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
18618
Jeff Johnsone7245742012-09-05 17:12:55 -070018619 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018620}/*WDI_ProcessTxPerHitInd*/
18621
18622#ifdef ANI_MANF_DIAG
18623/**
18624 @brief WDI_ProcessFTMCommandReq
18625 Process FTM Command, simply route to HAL
Jeff Johnsone7245742012-09-05 17:12:55 -070018626
18627 @param pWDICtx: pointer to the WLAN DAL context
18628 pEventData: pointer to the event information structure
18629
Jeff Johnson295189b2012-06-20 16:38:30 -070018630 @see
18631 @return Result of the function call
18632*/
18633WDI_Status
18634WDI_ProcessFTMCommandReq
Jeff Johnsone7245742012-09-05 17:12:55 -070018635(
Jeff Johnson295189b2012-06-20 16:38:30 -070018636 WDI_ControlBlockType* pWDICtx,
18637 WDI_EventInfoType* pEventData
18638)
18639{
18640 WDI_FTMCommandReqType *ftmCommandReq = NULL;
18641 wpt_uint8 *ftmCommandBuffer = NULL;
18642 wpt_uint16 dataOffset;
18643 wpt_uint16 bufferSize;
18644 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018645 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018646 -------------------------------------------------------------------------*/
18647 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18648 ( NULL == pEventData->pEventData))
18649
18650 {
18651 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18652 "%s: Invalid parameters", __FUNCTION__);
18653 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018654 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018655 }
18656
18657 ftmCommandReq = (WDI_FTMCommandReqType *)pEventData->pEventData;
18658
18659 /* Get MSG Buffer */
18660 WDI_GetMessageBuffer(pWDICtx,
18661 WDI_FTM_CMD_REQ,
18662 ftmCommandReq->bodyLength,
18663 &ftmCommandBuffer,
18664 &dataOffset,
18665 &bufferSize);
18666
18667 wpalMemoryCopy(ftmCommandBuffer + dataOffset,
18668 ftmCommandReq->FTMCommandBody,
18669 ftmCommandReq->bodyLength);
18670
18671 /* Send MSG */
18672 return WDI_SendMsg(pWDICtx,
18673 ftmCommandBuffer,
18674 bufferSize,
18675 pEventData->pCBfnc,
18676 pEventData->pUserData,
18677 WDI_FTM_CMD_RESP);
18678}
18679
18680/**
18681 @brief WDI_ProcessFTMCommandRsp
18682 Process FTM Command Response from HAL, simply route to HDD FTM
Jeff Johnsone7245742012-09-05 17:12:55 -070018683
18684 @param pWDICtx: pointer to the WLAN DAL context
18685 pEventData: pointer to the event information structure
18686
Jeff Johnson295189b2012-06-20 16:38:30 -070018687 @see
18688 @return Result of the function call
18689*/
18690WDI_Status
18691WDI_ProcessFTMCommandRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070018692(
Jeff Johnson295189b2012-06-20 16:38:30 -070018693 WDI_ControlBlockType* pWDICtx,
18694 WDI_EventInfoType* pEventData
18695)
18696{
18697 WDI_FTMCommandRspCb ftmCMDRspCb;
18698 tProcessPttRspParams *ftmCMDRspData = NULL;
18699 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18700
18701 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018702 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018703 -------------------------------------------------------------------------*/
18704 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18705 ( NULL == pEventData->pEventData))
18706 {
18707 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18708 "%s: Invalid parameters", __FUNCTION__);
18709 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018710 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018711 }
18712
18713 ftmCMDRspCb = (WDI_FTMCommandRspCb)pWDICtx->pfncRspCB;
18714
18715 ftmCMDRspData = (tProcessPttRspParams *)pEventData->pEventData;
18716
Jeff Johnsone7245742012-09-05 17:12:55 -070018717 wpalMemoryCopy((void *)pWDICtx->ucFTMCommandRspBuffer,
18718 (void *)&ftmCMDRspData->pttMsgBuffer,
Jeff Johnson295189b2012-06-20 16:38:30 -070018719 ftmCMDRspData->pttMsgBuffer.msgBodyLength);
18720
18721 /*Notify UMAC*/
18722 ftmCMDRspCb((void *)pWDICtx->ucFTMCommandRspBuffer, pWDICtx->pRspCBUserData);
18723
Jeff Johnsone7245742012-09-05 17:12:55 -070018724 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070018725}
18726#endif /* ANI_MANF_DIAG */
18727/**
18728 @brief WDI_ProcessHalDumpCmdReq
18729 Process hal dump Command, simply route to HAL
Jeff Johnsone7245742012-09-05 17:12:55 -070018730
18731 @param pWDICtx: pointer to the WLAN DAL context
18732 pEventData: pointer to the event information structure
18733
Jeff Johnson295189b2012-06-20 16:38:30 -070018734 @see
18735 @return Result of the function call
18736*/
18737WDI_Status
18738WDI_ProcessHALDumpCmdReq
Jeff Johnsone7245742012-09-05 17:12:55 -070018739(
Jeff Johnson295189b2012-06-20 16:38:30 -070018740 WDI_ControlBlockType* pWDICtx,
18741 WDI_EventInfoType* pEventData
18742)
18743{
18744 WDI_HALDumpCmdReqParamsType* pwdiHALDumpCmdParams = NULL;
18745 WDI_HALDumpCmdRspCb wdiHALDumpCmdRspCb = NULL;
18746 wpt_uint16 usDataOffset = 0;
18747 wpt_uint16 usSendSize = 0;
18748 tHalDumpCmdReqMsg halDumpCmdReqMsg;
Jeff Johnsone7245742012-09-05 17:12:55 -070018749 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070018750
18751 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018752 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018753 -------------------------------------------------------------------------*/
18754 if (( NULL == pEventData ) ||
18755 ( NULL == pEventData->pEventData) ||
18756 ( NULL == pEventData->pCBfnc ))
18757 {
18758 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18759 "%s: Invalid parameters", __FUNCTION__);
18760 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018761 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018762 }
18763
18764 pwdiHALDumpCmdParams = (WDI_HALDumpCmdReqParamsType*)pEventData->pEventData;
18765 wdiHALDumpCmdRspCb = (WDI_HALDumpCmdRspCb)pEventData->pCBfnc;
18766
18767 /* Copying the HAL DUMP Command Information HAL Structure*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018768 halDumpCmdReqMsg.dumpCmdReqParams.argument1 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018769 pwdiHALDumpCmdParams->wdiHALDumpCmdInfoType.command;
Jeff Johnsone7245742012-09-05 17:12:55 -070018770 halDumpCmdReqMsg.dumpCmdReqParams.argument2 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018771 pwdiHALDumpCmdParams->wdiHALDumpCmdInfoType.argument1;
Jeff Johnsone7245742012-09-05 17:12:55 -070018772 halDumpCmdReqMsg.dumpCmdReqParams.argument3 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018773 pwdiHALDumpCmdParams->wdiHALDumpCmdInfoType.argument2;
Jeff Johnsone7245742012-09-05 17:12:55 -070018774 halDumpCmdReqMsg.dumpCmdReqParams.argument4 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018775 pwdiHALDumpCmdParams->wdiHALDumpCmdInfoType.argument3;
Jeff Johnsone7245742012-09-05 17:12:55 -070018776 halDumpCmdReqMsg.dumpCmdReqParams.argument5 =
Jeff Johnson295189b2012-06-20 16:38:30 -070018777 pwdiHALDumpCmdParams->wdiHALDumpCmdInfoType.argument4;
Jeff Johnsone7245742012-09-05 17:12:55 -070018778
Jeff Johnson295189b2012-06-20 16:38:30 -070018779 /*-----------------------------------------------------------------------
18780 Get message buffer
18781 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018782 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_HAL_DUMP_CMD_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070018783 sizeof(halDumpCmdReqMsg.dumpCmdReqParams),
18784 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070018785 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -070018786 (usDataOffset + sizeof(halDumpCmdReqMsg.dumpCmdReqParams) )))
18787 {
18788 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18789 "Unable to get send buffer in HAL Dump Command req %x %x %x",
18790 pEventData, pwdiHALDumpCmdParams, wdiHALDumpCmdRspCb);
18791 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018792 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018793 }
18794
Jeff Johnsone7245742012-09-05 17:12:55 -070018795 wpalMemoryCopy( pSendBuffer+usDataOffset,
18796 &halDumpCmdReqMsg.dumpCmdReqParams,
18797 sizeof(halDumpCmdReqMsg.dumpCmdReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070018798
18799 pWDICtx->wdiReqStatusCB = pwdiHALDumpCmdParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070018800 pWDICtx->pReqStatusUserData = pwdiHALDumpCmdParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018801
18802 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018803 Send Start Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070018804 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018805 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
18806 wdiHALDumpCmdRspCb, pEventData->pUserData,
18807 WDI_HAL_DUMP_CMD_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070018808}
18809
18810/**
18811 @brief WDI_ProcessHalDumpCmdRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070018812 Process hal Dump Command Response from HAL, simply route to HDD
18813
18814 @param pWDICtx: pointer to the WLAN DAL context
18815 pEventData: pointer to the event information structure
18816
Jeff Johnson295189b2012-06-20 16:38:30 -070018817 @see
18818 @return Result of the function call
18819*/
18820WDI_Status
18821WDI_ProcessHALDumpCmdRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070018822(
Jeff Johnson295189b2012-06-20 16:38:30 -070018823 WDI_ControlBlockType* pWDICtx,
18824 WDI_EventInfoType* pEventData
18825)
18826{
18827 WDI_HALDumpCmdRspCb wdiHALDumpCmdRspCb;
18828 tpHalDumpCmdRspParams halDumpCmdRspParams;
18829 WDI_HALDumpCmdRspParamsType wdiHALDumpCmdRsp;
18830
18831 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018832 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018833 -------------------------------------------------------------------------*/
18834 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
18835 ( NULL == pEventData->pEventData))
18836 {
18837 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18838 "%s: Invalid parameters", __FUNCTION__);
18839 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018840 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 }
18842
Jeff Johnsone7245742012-09-05 17:12:55 -070018843 wdiHALDumpCmdRspCb = (WDI_HALDumpCmdRspCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070018844
18845 /*Initialize the WDI Response structure */
18846 wdiHALDumpCmdRsp.usBufferLen = 0;
18847 wdiHALDumpCmdRsp.pBuffer = NULL;
18848
18849 halDumpCmdRspParams = (tHalDumpCmdRspParams *)pEventData->pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -070018850
18851 wdiHALDumpCmdRsp.wdiStatus =
18852 WDI_HAL_2_WDI_STATUS(halDumpCmdRspParams->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018853
18854 if (( wdiHALDumpCmdRsp.wdiStatus == WDI_STATUS_SUCCESS) &&
18855 (halDumpCmdRspParams->rspLength != 0))
18856 {
18857 /* Copy the response data */
18858 wdiHALDumpCmdRsp.usBufferLen = halDumpCmdRspParams->rspLength;
18859 wdiHALDumpCmdRsp.pBuffer = wpalMemoryAllocate(halDumpCmdRspParams->rspLength);
Jeff Johnsone7245742012-09-05 17:12:55 -070018860 wpalMemoryCopy( &halDumpCmdRspParams->rspBuffer,
18861 wdiHALDumpCmdRsp.pBuffer,
Jeff Johnson295189b2012-06-20 16:38:30 -070018862 sizeof(wdiHALDumpCmdRsp.usBufferLen));
18863 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018864
Jeff Johnson295189b2012-06-20 16:38:30 -070018865 /*Notify UMAC*/
18866 wdiHALDumpCmdRspCb(&wdiHALDumpCmdRsp, pWDICtx->pRspCBUserData);
18867
18868 if(wdiHALDumpCmdRsp.pBuffer != NULL)
18869 {
18870 /* Free the allocated buffer */
18871 wpalMemoryFree(wdiHALDumpCmdRsp.pBuffer);
18872 }
18873 return WDI_STATUS_SUCCESS;
18874}
18875
18876/*==========================================================================
18877 CONTRL TRANSPORT INTERACTION
Jeff Johnsone7245742012-09-05 17:12:55 -070018878
Jeff Johnson295189b2012-06-20 16:38:30 -070018879 Callback function registered with the control transport - for receiving
Jeff Johnsone7245742012-09-05 17:12:55 -070018880 notifications and packets
Jeff Johnson295189b2012-06-20 16:38:30 -070018881==========================================================================*/
18882/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018883 @brief This callback is invoked by the control transport
Jeff Johnson295189b2012-06-20 16:38:30 -070018884 when it wishes to send up a notification like the ones
18885 mentioned above.
Jeff Johnsone7245742012-09-05 17:12:55 -070018886
Jeff Johnson295189b2012-06-20 16:38:30 -070018887 @param
Jeff Johnsone7245742012-09-05 17:12:55 -070018888
18889 wctsHandle: handle to the control transport service
Jeff Johnson295189b2012-06-20 16:38:30 -070018890 wctsEvent: the event being notified
Jeff Johnsone7245742012-09-05 17:12:55 -070018891 wctsNotifyCBData: the callback data of the user
18892
Jeff Johnson295189b2012-06-20 16:38:30 -070018893 @see WCTS_OpenTransport
Jeff Johnsone7245742012-09-05 17:12:55 -070018894
18895 @return None
Jeff Johnson295189b2012-06-20 16:38:30 -070018896*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018897void
Jeff Johnson295189b2012-06-20 16:38:30 -070018898WDI_NotifyMsgCTSCB
18899(
Jeff Johnsone7245742012-09-05 17:12:55 -070018900 WCTS_HandleType wctsHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -070018901 WCTS_NotifyEventType wctsEvent,
18902 void* wctsNotifyCBData
18903)
18904{
Jeff Johnsone7245742012-09-05 17:12:55 -070018905 WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)wctsNotifyCBData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018906 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
18907
18908 if (NULL == pWDICtx )
18909 {
18910 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18911 "%s: Invalid parameters", __FUNCTION__);
18912 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018913 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018914 }
18915
18916 if (WDI_CONTROL_BLOCK_MAGIC != pWDICtx->magic)
18917 {
18918 /* callback presumably occurred after close */
18919 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18920 "%s: Invalid control block", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018921 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018922 }
18923
18924 if ( WCTS_EVENT_OPEN == wctsEvent )
18925 {
18926 /*Flag must be set atomically as it is checked from incoming request
18927 functions*/
18928 wpalMutexAcquire(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070018929 pWDICtx->bCTOpened = eWLAN_PAL_TRUE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018930
18931 /*Nothing to do - so try to dequeue any pending request that may have
18932 occurred while we were trying to establish this*/
18933 WDI_DequeuePendingReq(pWDICtx);
Jeff Johnsone7245742012-09-05 17:12:55 -070018934 wpalMutexRelease(&pWDICtx->wptMutex);
Jeff Johnson295189b2012-06-20 16:38:30 -070018935 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018936 else if ( WCTS_EVENT_CLOSE == wctsEvent )
Jeff Johnson295189b2012-06-20 16:38:30 -070018937 {
18938 /*Flag must be set atomically as it is checked from incoming request
18939 functions*/
18940 wpalMutexAcquire(&pWDICtx->wptMutex);
Jeff Johnsone7245742012-09-05 17:12:55 -070018941 pWDICtx->bCTOpened = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018942
18943 /*No other request will be processed from now on - fail all*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018944 WDI_ClearPendingRequests(pWDICtx);
Jeff Johnson295189b2012-06-20 16:38:30 -070018945 wpalMutexRelease(&pWDICtx->wptMutex);
18946
18947 /*Notify that the Control Channel is closed */
18948 wpalEventSet(&pWDICtx->wctsActionEvent);
18949 }
18950
18951}/*WDI_NotifyMsgCTSCB*/
18952
18953
18954/**
Jeff Johnsone7245742012-09-05 17:12:55 -070018955 @brief This callback is invoked by the control transport
Jeff Johnson295189b2012-06-20 16:38:30 -070018956 when it wishes to send up a packet received over the
18957 bus.
Jeff Johnsone7245742012-09-05 17:12:55 -070018958
Jeff Johnson295189b2012-06-20 16:38:30 -070018959 @param
Jeff Johnsone7245742012-09-05 17:12:55 -070018960
18961 wctsHandle: handle to the control transport service
Jeff Johnson295189b2012-06-20 16:38:30 -070018962 pMsg: the packet
18963 uLen: the packet length
Jeff Johnsone7245742012-09-05 17:12:55 -070018964 wctsRxMsgCBData: the callback data of the user
18965
Jeff Johnson295189b2012-06-20 16:38:30 -070018966 @see WCTS_OpenTransport
Jeff Johnsone7245742012-09-05 17:12:55 -070018967
18968 @return None
Jeff Johnson295189b2012-06-20 16:38:30 -070018969*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018970void
18971WDI_RXMsgCTSCB
Jeff Johnson295189b2012-06-20 16:38:30 -070018972(
Jeff Johnsone7245742012-09-05 17:12:55 -070018973 WCTS_HandleType wctsHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -070018974 void* pMsg,
18975 wpt_uint32 uLen,
18976 void* wctsRxMsgCBData
18977)
18978{
Jeff Johnsone7245742012-09-05 17:12:55 -070018979 tHalMsgHeader *pHalMsgHeader;
18980 WDI_EventInfoType wdiEventData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018981 WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)wctsRxMsgCBData;
18982 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
18983
18984 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070018985 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070018986 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070018987 if ((NULL == pWDICtx ) || ( NULL == pMsg ) ||
Jeff Johnson295189b2012-06-20 16:38:30 -070018988 ( uLen < sizeof(tHalMsgHeader)))
18989 {
18990 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
18991 "%s: Invalid parameters", __FUNCTION__);
18992 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070018993 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018994 }
18995
18996 if (WDI_CONTROL_BLOCK_MAGIC != pWDICtx->magic)
18997 {
18998 /* callback presumably occurred after close */
18999 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
19000 "%s: Invalid control block", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019001 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019002 }
19003
Jeff Johnsone7245742012-09-05 17:12:55 -070019004 /*The RX Callback is expected to be serialized in the proper control thread
Jeff Johnson295189b2012-06-20 16:38:30 -070019005 context - so no serialization is necessary here
19006 ! - revisit this assumption */
19007
19008 pHalMsgHeader = (tHalMsgHeader *)pMsg;
19009
19010 if ( uLen != pHalMsgHeader->msgLen )
19011 {
19012 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19013 "Invalid packet received from HAL - catastrophic failure");
Jeff Johnsone7245742012-09-05 17:12:55 -070019014 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_INVALID_RSP_FMT);
19015 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019016 }
19017
19018 wdiEventData.wdiResponse = HAL_2_WDI_RSP_TYPE( pHalMsgHeader->msgType );
19019
19020 /*The message itself starts after the header*/
19021 wdiEventData.pEventData = (wpt_uint8*)pMsg + sizeof(tHalMsgHeader);
19022 wdiEventData.uEventDataSize = pHalMsgHeader->msgLen - sizeof(tHalMsgHeader);
19023 wdiEventData.pCBfnc = gWDICb.pfncRspCB;
19024 wdiEventData.pUserData = gWDICb.pRspCBUserData;
19025
19026
19027 if ( wdiEventData.wdiResponse == pWDICtx->wdiExpectedResponse )
19028 {
19029 /*Stop the timer as the response was received */
19030 /*!UT - check for potential race conditions between stop and response */
19031 wpalTimerStop(&pWDICtx->wptResponseTimer);
19032 }
19033 /* Check if we receive a response message which is not expected */
19034 else if ( wdiEventData.wdiResponse < WDI_HAL_IND_MIN )
19035 {
19036 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
19037 "Received response %s (%d) when expecting %s (%d) - catastrophic failure",
19038 WDI_getRespMsgString(wdiEventData.wdiResponse),
Jeff Johnsone7245742012-09-05 17:12:55 -070019039 wdiEventData.wdiResponse,
Jeff Johnson295189b2012-06-20 16:38:30 -070019040 WDI_getRespMsgString(pWDICtx->wdiExpectedResponse),
19041 pWDICtx->wdiExpectedResponse);
19042 /* WDI_DetectedDeviceError( pWDICtx, WDI_ERR_INVALID_RSP_FMT); */
19043 return;
19044 }
19045
19046 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19047 "Rx smth from HAL: %d", wdiEventData.wdiResponse);
19048
19049 /*Post response event to the state machine*/
19050 WDI_PostMainEvent(pWDICtx, WDI_RESPONSE_EVENT, &wdiEventData);
19051
19052}/*WDI_RXMsgCTSCB*/
19053
19054
19055/*========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070019056 Internal Helper Routines
Jeff Johnson295189b2012-06-20 16:38:30 -070019057========================================================================*/
19058
19059/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019060 @brief WDI_CleanCB - internal helper routine used to clean the
Jeff Johnson295189b2012-06-20 16:38:30 -070019061 WDI Main Control Block
Jeff Johnsone7245742012-09-05 17:12:55 -070019062
Jeff Johnson295189b2012-06-20 16:38:30 -070019063 @param pWDICtx - pointer to the control block
19064
19065 @return Result of the function call
19066*/
19067WPT_INLINE WDI_Status
19068WDI_CleanCB
19069(
19070 WDI_ControlBlockType* pWDICtx
19071)
19072{
19073 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
19074
19075 /*Clean the WDI Control Block*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019076 wpalMemoryZero( pWDICtx, sizeof(*pWDICtx));
Jeff Johnson295189b2012-06-20 16:38:30 -070019077
Jeff Johnsone7245742012-09-05 17:12:55 -070019078 pWDICtx->uGlobalState = WDI_MAX_ST;
Jeff Johnson295189b2012-06-20 16:38:30 -070019079 pWDICtx->ucMaxBssids = WDI_MAX_SUPPORTED_BSS;
19080 pWDICtx->ucMaxStations = WDI_MAX_SUPPORTED_STAS;
19081
19082 WDI_ResetAssocSessions( pWDICtx );
19083
19084 return WDI_STATUS_SUCCESS;
19085}/*WDI_CleanCB*/
19086
19087
19088/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019089 @brief Process request helper function
Jeff Johnson295189b2012-06-20 16:38:30 -070019090
Jeff Johnsone7245742012-09-05 17:12:55 -070019091
19092 @param pWDICtx: pointer to the WLAN DAL context
19093 pEventData: pointer to the event information structure
19094
Jeff Johnson295189b2012-06-20 16:38:30 -070019095 @see
19096 @return Result of the function call
19097*/
19098WPT_INLINE WDI_Status
19099WDI_ProcessRequest
19100(
19101 WDI_ControlBlockType* pWDICtx,
19102 WDI_EventInfoType* pEventData
19103)
19104{
19105 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19106
Jeff Johnsone7245742012-09-05 17:12:55 -070019107 /*!! Skip sanity check as this is called from the FSM functionss which
Jeff Johnson295189b2012-06-20 16:38:30 -070019108 already checked these pointers*/
19109
19110 if (( pEventData->wdiRequest < WDI_MAX_UMAC_IND ) &&
19111 ( NULL != pfnReqProcTbl[pEventData->wdiRequest] ))
Jeff Johnsone7245742012-09-05 17:12:55 -070019112 {
Jeff Johnson295189b2012-06-20 16:38:30 -070019113 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19114 "Calling request processing function for req %s (%d) %x",
19115 WDI_getReqMsgString(pEventData->wdiRequest),
19116 pEventData->wdiRequest, pfnReqProcTbl[pEventData->wdiRequest]);
19117 return pfnReqProcTbl[pEventData->wdiRequest](pWDICtx, pEventData);
19118 }
19119 else
19120 {
19121 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019122 "Operation %d is not yet implemented ",
Jeff Johnson295189b2012-06-20 16:38:30 -070019123 pEventData->wdiRequest);
19124 return WDI_STATUS_E_NOT_IMPLEMENT;
19125 }
19126}/*WDI_ProcessRequest*/
19127
19128
19129/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019130 @brief Get message helper function - it allocates memory for a
Jeff Johnson295189b2012-06-20 16:38:30 -070019131 message that is to be sent to HAL accross the bus and
Jeff Johnsone7245742012-09-05 17:12:55 -070019132 prefixes it with a send message header
19133
19134 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070019135 wdiReqType: type of the request being sent
19136 uBufferLen: message buffer len
19137 pMsgBuffer: resulting allocated buffer
19138 pusDataOffset: offset in the buffer where the caller
19139 can start copying its message data
19140 puBufferSize: the resulting buffer size (offset+buff
19141 len)
Jeff Johnsone7245742012-09-05 17:12:55 -070019142
Jeff Johnson295189b2012-06-20 16:38:30 -070019143 @see
19144 @return Result of the function call
19145*/
19146WDI_Status
19147WDI_GetMessageBuffer
Jeff Johnsone7245742012-09-05 17:12:55 -070019148(
19149 WDI_ControlBlockType* pWDICtx,
19150 WDI_RequestEnumType wdiReqType,
Jeff Johnson295189b2012-06-20 16:38:30 -070019151 wpt_uint16 usBufferLen,
Jeff Johnsone7245742012-09-05 17:12:55 -070019152 wpt_uint8** pMsgBuffer,
19153 wpt_uint16* pusDataOffset,
Jeff Johnson295189b2012-06-20 16:38:30 -070019154 wpt_uint16* pusBufferSize
19155)
19156{
19157 tHalMsgHeader halMsgHeader;
19158 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19159
Jeff Johnsone7245742012-09-05 17:12:55 -070019160 /*!! No sanity check here as we trust the called - ! check this assumption
Jeff Johnson295189b2012-06-20 16:38:30 -070019161 again*/
19162
19163 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070019164 Try to allocate message buffer from PAL
Jeff Johnson295189b2012-06-20 16:38:30 -070019165 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019166 *pusBufferSize = sizeof(halMsgHeader) + usBufferLen;
Jeff Johnson295189b2012-06-20 16:38:30 -070019167 *pMsgBuffer = (wpt_uint8*)wpalMemoryAllocate(*pusBufferSize);
19168 if ( NULL == *pMsgBuffer )
19169 {
19170 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19171 "Unable to allocate message buffer for req %s (%d)",
19172 WDI_getReqMsgString(wdiReqType),
Jeff Johnsone7245742012-09-05 17:12:55 -070019173 wdiReqType);
Jeff Johnson295189b2012-06-20 16:38:30 -070019174 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070019175 return WDI_STATUS_MEM_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019176 }
19177
19178 /*-------------------------------------------------------------------------
19179 Fill in the message header
19180 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019181 halMsgHeader.msgType = WDI_2_HAL_REQ_TYPE(wdiReqType);
19182 /* Fill msgVersion */
19183#ifdef WLAN_FEATURE_11AC
19184 if (WDI_getFwWlanFeatCaps(DOT11AC))
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070019185 halMsgHeader.msgVersion = WLAN_HAL_MSG_VERSION1;
Jeff Johnsone7245742012-09-05 17:12:55 -070019186 else
19187#endif
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070019188 halMsgHeader.msgVersion = WLAN_HAL_MSG_VERSION0;
Jeff Johnson295189b2012-06-20 16:38:30 -070019189
Jeff Johnsone7245742012-09-05 17:12:55 -070019190 halMsgHeader.msgLen = sizeof(halMsgHeader) + usBufferLen;
19191 *pusDataOffset = sizeof(halMsgHeader);
19192 wpalMemoryCopy(*pMsgBuffer, &halMsgHeader, sizeof(halMsgHeader));
19193
19194 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070019195}/*WDI_GetMessageBuffer*/
19196
19197
19198/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019199 @brief Send message helper function - sends a message over the
Jeff Johnson295189b2012-06-20 16:38:30 -070019200 bus using the control tranport and saves some info in
Jeff Johnsone7245742012-09-05 17:12:55 -070019201 the CB
19202
19203 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070019204 pSendBuffer: buffer to be sent
Jeff Johnsone7245742012-09-05 17:12:55 -070019205
Jeff Johnson295189b2012-06-20 16:38:30 -070019206 usSendSize size of the buffer to be sent
19207 pRspCb: response callback - save in the WDI
19208 CB
19209 pUserData: user data associated with the
19210 callback
19211 wdiExpectedResponse: the code of the response that is
19212 expected to be rx-ed for this request
Jeff Johnsone7245742012-09-05 17:12:55 -070019213
Jeff Johnson295189b2012-06-20 16:38:30 -070019214 @see
19215 @return Result of the function call
19216*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019217WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070019218WDI_SendMsg
Jeff Johnsone7245742012-09-05 17:12:55 -070019219(
19220 WDI_ControlBlockType* pWDICtx,
19221 wpt_uint8* pSendBuffer,
19222 wpt_uint32 usSendSize,
19223 void* pRspCb,
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 void* pUserData,
19225 WDI_ResponseEnumType wdiExpectedResponse
19226)
19227{
Jeff Johnsond13512a2012-07-17 11:42:19 -070019228 WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070019229 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
19230
19231 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070019232 Save needed info in the CB
Jeff Johnson295189b2012-06-20 16:38:30 -070019233 ------------------------------------------------------------------------*/
19234 pWDICtx->pRspCBUserData = pUserData;
Jeff Johnsone7245742012-09-05 17:12:55 -070019235 pWDICtx->pfncRspCB = pRspCb;
19236 pWDICtx->wdiExpectedResponse = wdiExpectedResponse;
Jeff Johnson295189b2012-06-20 16:38:30 -070019237
19238 /*-----------------------------------------------------------------------
19239 Call the CTS to send this message over - free message afterwards
19240 - notify transport failure
19241 Note: CTS is reponsible for freeing the message buffer.
19242 -----------------------------------------------------------------------*/
19243 if ( 0 != WCTS_SendMessage( pWDICtx->wctsHandle, (void*)pSendBuffer, usSendSize ))
19244 {
Jeff Johnsond13512a2012-07-17 11:42:19 -070019245 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
Jeff Johnson295189b2012-06-20 16:38:30 -070019246 "Failed to send message over the bus - catastrophic failure");
19247
Jeff Johnsond13512a2012-07-17 11:42:19 -070019248 wdiStatus = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019249 }
19250
Jeff Johnsond13512a2012-07-17 11:42:19 -070019251 /*Check if originator provided a request status callback*/
Jeff Johnson295189b2012-06-20 16:38:30 -070019252 if ( NULL != pWDICtx->wdiReqStatusCB )
19253 {
Jeff Johnsond13512a2012-07-17 11:42:19 -070019254 /*Inform originator whether request went through or not*/
19255 WDI_ReqStatusCb callback = pWDICtx->wdiReqStatusCB;
19256 void *callbackContext = pWDICtx->pReqStatusUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019257 pWDICtx->wdiReqStatusCB = NULL;
19258 pWDICtx->pReqStatusUserData = NULL;
Jeff Johnsond13512a2012-07-17 11:42:19 -070019259 callback(wdiStatus, callbackContext);
19260
19261 /*For WDI requests which have registered a request callback,
19262 inform the WDA caller of the same via setting the return value
19263 (wdiStatus) to WDI_STATUS_PENDING. This makes sure that WDA doesnt
19264 end up repeating the functonality in the req callback for the
19265 WDI_STATUS_E_FAILURE case*/
19266 if (wdiStatus == WDI_STATUS_E_FAILURE)
19267 wdiStatus = WDI_STATUS_PENDING;
Jeff Johnson295189b2012-06-20 16:38:30 -070019268 }
19269
Jeff Johnsond13512a2012-07-17 11:42:19 -070019270 if ( wdiStatus == WDI_STATUS_SUCCESS )
19271 {
Jeff Johnson295189b2012-06-20 16:38:30 -070019272 /*Start timer for the expected response */
19273 wpalTimerStart(&pWDICtx->wptResponseTimer, WDI_RESPONSE_TIMEOUT);
Jeff Johnsond13512a2012-07-17 11:42:19 -070019274 }
19275 else
19276 {
19277 /*Inform upper stack layers that a transport fatal error occured*/
19278 WDI_DetectedDeviceError(pWDICtx, WDI_ERR_TRANSPORT_FAILURE);
19279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019280
Jeff Johnsond13512a2012-07-17 11:42:19 -070019281 return wdiStatus;
19282
Jeff Johnson295189b2012-06-20 16:38:30 -070019283}/*WDI_SendMsg*/
19284
19285
19286
19287/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019288 @brief Send indication helper function - sends a message over
Jeff Johnson295189b2012-06-20 16:38:30 -070019289 the bus using the control transport and saves some info
19290 in the CB
Jeff Johnsone7245742012-09-05 17:12:55 -070019291
19292 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070019293 pSendBuffer: buffer to be sent
19294 usSendSize: size of the buffer to be sent
Jeff Johnsone7245742012-09-05 17:12:55 -070019295
Jeff Johnson295189b2012-06-20 16:38:30 -070019296 @see
19297 @return Result of the function call
19298*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019299WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070019300WDI_SendIndication
Jeff Johnsone7245742012-09-05 17:12:55 -070019301(
19302 WDI_ControlBlockType* pWDICtx,
19303 wpt_uint8* pSendBuffer,
Jeff Johnson295189b2012-06-20 16:38:30 -070019304 wpt_uint32 usSendSize
19305)
19306{
19307 wpt_uint32 uStatus ;
19308 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
19309
19310 /*-----------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070019311 Call the CTS to send this message over
Jeff Johnson295189b2012-06-20 16:38:30 -070019312 Note: CTS is reponsible for freeing the message buffer.
19313 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019314 uStatus = WCTS_SendMessage( pWDICtx->wctsHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -070019315 (void*)pSendBuffer, usSendSize );
19316
19317 /*Inform Upper MAC about the outcome of the request*/
19318 if ( NULL != pWDICtx->wdiReqStatusCB )
19319 {
19320 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19321 "Send indication status : %d", uStatus);
19322
19323 pWDICtx->wdiReqStatusCB( (uStatus != 0 ) ? WDI_STATUS_E_FAILURE:
Jeff Johnsone7245742012-09-05 17:12:55 -070019324 WDI_STATUS_SUCCESS,
19325 pWDICtx->pReqStatusUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070019326 }
19327
19328 /*If sending of the message failed - it is considered catastrophic and
19329 indicates an error with the device*/
19330 if ( 0 != uStatus)
19331 {
19332 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
Jeff Johnsone7245742012-09-05 17:12:55 -070019333 "Failed to send indication over the bus - catastrophic failure");
Jeff Johnson295189b2012-06-20 16:38:30 -070019334
19335 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_TRANSPORT_FAILURE);
19336 return WDI_STATUS_E_FAILURE;
19337 }
19338
Jeff Johnsone7245742012-09-05 17:12:55 -070019339 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070019340}/*WDI_SendIndication*/
19341
19342
19343/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019344 @brief WDI_DetectedDeviceError - called internally by DAL when
19345 it has detected a failure in the device
19346
19347 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070019348 usErrorCode: error code detected by WDI or received
19349 from HAL
Jeff Johnsone7245742012-09-05 17:12:55 -070019350
Jeff Johnson295189b2012-06-20 16:38:30 -070019351 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070019352 @return None
Jeff Johnson295189b2012-06-20 16:38:30 -070019353*/
19354void
19355WDI_DetectedDeviceError
19356(
19357 WDI_ControlBlockType* pWDICtx,
19358 wpt_uint16 usErrorCode
19359)
19360{
19361 WDI_LowLevelIndType wdiInd;
19362 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
19363
19364 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19365 "Device Error detected code: %d - transitioning to stopped state",
19366 usErrorCode);
19367
19368 wpalMutexAcquire(&pWDICtx->wptMutex);
19369
19370 WDI_STATableStop(pWDICtx);
19371
19372 WDI_ResetAssocSessions(pWDICtx);
19373
19374 /*Set the expected state transition to stopped - because the device
19375 experienced a failure*/
19376 pWDICtx->ucExpectedStateTransition = WDI_STOPPED_ST;
19377
19378 /*Transition to stopped to fail all incomming requests from this point on*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019379 WDI_STATE_TRANSITION( pWDICtx, WDI_STOPPED_ST);
Jeff Johnson295189b2012-06-20 16:38:30 -070019380
Jeff Johnsone7245742012-09-05 17:12:55 -070019381 WDI_ClearPendingRequests(pWDICtx);
Jeff Johnson295189b2012-06-20 16:38:30 -070019382
19383 /*TO DO: - there should be an attempt to reset the device here*/
19384
19385 wpalMutexRelease(&pWDICtx->wptMutex);
19386
19387 /*------------------------------------------------------------------------
19388 Notify UMAC if a handler is registered
19389 ------------------------------------------------------------------------*/
19390 if (pWDICtx->wdiLowLevelIndCB)
19391 {
Jeff Johnsone7245742012-09-05 17:12:55 -070019392 wdiInd.wdiIndicationType = WDI_FATAL_ERROR_IND;
19393 wdiInd.wdiIndicationData.usErrorCode = usErrorCode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019394
19395 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData);
19396 }
19397}/*WDI_DetectedDeviceError*/
19398
19399/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019400 @brief This callback is invoked by the wpt when a timer that
Jeff Johnson295189b2012-06-20 16:38:30 -070019401 we started on send message has expire - this should
19402 never happen - it means device is stuck and cannot
Jeff Johnsone7245742012-09-05 17:12:55 -070019403 reply - trigger catastrophic failure
19404 @param
19405
Jeff Johnson295189b2012-06-20 16:38:30 -070019406 pUserData: the callback data of the user (ptr to WDI CB)
Jeff Johnsone7245742012-09-05 17:12:55 -070019407
19408 @see
19409 @return None
Jeff Johnson295189b2012-06-20 16:38:30 -070019410*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019411void
Jeff Johnson295189b2012-06-20 16:38:30 -070019412WDI_ResponseTimerCB
19413(
19414 void *pUserData
19415)
19416{
19417 WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)pUserData;
19418 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19419
19420 if (NULL == pWDICtx )
19421 {
19422 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
19423 "%s: Invalid parameters", __FUNCTION__);
19424 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070019425 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019426 }
19427
19428 if ( WDI_MAX_RESP != pWDICtx->wdiExpectedResponse )
19429 {
19430
19431 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19432 "Timeout occurred while waiting for %s (%d) message from device "
Jeff Johnsone7245742012-09-05 17:12:55 -070019433 " - catastrophic failure",
Jeff Johnson295189b2012-06-20 16:38:30 -070019434 WDI_getRespMsgString(pWDICtx->wdiExpectedResponse),
19435 pWDICtx->wdiExpectedResponse);
19436 /* WDI timeout means Riva is not responding or SMD communication to Riva
19437 * is not happening. The only possible way to recover from this error
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070019438 * is to initiate SSR from APPS
19439 * There is also an option to re-enable wifi, which will eventually
19440 * trigger SSR
19441 */
19442#ifndef WDI_RE_ENABLE_WIFI_ON_WDI_TIMEOUT
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -070019443 wpalWcnssResetIntr();
19444 /* if this timer fires, it means Riva did not receive the FIQ */
19445 wpalTimerStart(&pWDICtx->ssrTimer, WDI_SSR_TIMEOUT);
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070019446#else
19447 WDI_DetectedDeviceError( pWDICtx, WDI_ERR_BASIC_OP_FAILURE);
19448 wpalWlanReload();
19449#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070019450 }
19451 else
19452 {
19453 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19454 "Timeout occurred but not waiting for any response %d",
19455 pWDICtx->wdiExpectedResponse);
19456 }
19457
19458 return;
19459
19460}/*WDI_ResponseTimerCB*/
19461
19462
19463/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019464 @brief Process response helper function
Jeff Johnson295189b2012-06-20 16:38:30 -070019465
Jeff Johnsone7245742012-09-05 17:12:55 -070019466
19467 @param pWDICtx: pointer to the WLAN DAL context
19468 pEventData: pointer to the event information structure
19469
Jeff Johnson295189b2012-06-20 16:38:30 -070019470 @see
19471 @return Result of the function call
19472*/
19473WPT_INLINE WDI_Status
19474WDI_ProcessResponse
19475(
19476 WDI_ControlBlockType* pWDICtx,
19477 WDI_EventInfoType* pEventData
19478)
19479{
19480 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19481
Jeff Johnsone7245742012-09-05 17:12:55 -070019482 /* Skip sanity check as this is called from the FSM functions which
Jeff Johnson295189b2012-06-20 16:38:30 -070019483 already checked these pointers
19484 ! - revisit this assumption */
19485 if (( pEventData->wdiResponse < WDI_MAX_RESP ) &&
19486 ( NULL != pfnRspProcTbl[pEventData->wdiResponse] ))
Jeff Johnsone7245742012-09-05 17:12:55 -070019487 {
Jeff Johnson295189b2012-06-20 16:38:30 -070019488 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070019489 "Calling response processing function for resp %s (%d) %x",
Jeff Johnson295189b2012-06-20 16:38:30 -070019490 WDI_getRespMsgString(pEventData->wdiResponse),
19491 pEventData->wdiResponse, pfnRspProcTbl[pEventData->wdiResponse]);
19492 return pfnRspProcTbl[pEventData->wdiResponse](pWDICtx, pEventData);
19493 }
19494 else
19495 {
19496 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019497 "Operation %d is not yet implemented ",
Jeff Johnson295189b2012-06-20 16:38:30 -070019498 pEventData->wdiResponse);
19499 return WDI_STATUS_E_NOT_IMPLEMENT;
19500 }
19501}/*WDI_ProcessResponse*/
19502
19503
19504/*=========================================================================
Jeff Johnsone7245742012-09-05 17:12:55 -070019505 QUEUE SUPPORT UTILITY FUNCTIONS
Jeff Johnson295189b2012-06-20 16:38:30 -070019506=========================================================================*/
19507
19508/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019509 @brief Utility function used by the DAL Core to help queue a
19510 request that cannot be processed right away.
19511 @param
19512
Jeff Johnson295189b2012-06-20 16:38:30 -070019513 pWDICtx: - pointer to the WDI control block
19514 pEventData: - pointer to the evnt info that needs to be
Jeff Johnsone7245742012-09-05 17:12:55 -070019515 queued
19516
19517 @see
19518 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019519*/
19520WDI_Status
19521WDI_QueuePendingReq
19522(
19523 WDI_ControlBlockType* pWDICtx,
19524 WDI_EventInfoType* pEventData
19525)
19526{
Jeff Johnsone7245742012-09-05 17:12:55 -070019527 wpt_list_node* pNode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019528 WDI_EventInfoType* pEventDataQueue = wpalMemoryAllocate(sizeof(*pEventData));
Jeff Johnsone7245742012-09-05 17:12:55 -070019529 void* pEventInfo = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070019530 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19531
19532 if ( NULL == pEventDataQueue )
19533 {
19534 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019535 "Cannot allocate memory for queueing");
Jeff Johnson295189b2012-06-20 16:38:30 -070019536 WDI_ASSERT(0);
19537 return WDI_STATUS_MEM_FAILURE;
19538 }
19539
19540 pEventDataQueue->pCBfnc = pEventData->pCBfnc;
19541 pEventDataQueue->pUserData = pEventData->pUserData;
19542 pEventDataQueue->uEventDataSize = pEventData->uEventDataSize;
19543 pEventDataQueue->wdiRequest = pEventData->wdiRequest;
Jeff Johnsone7245742012-09-05 17:12:55 -070019544 pEventDataQueue->wdiResponse = pEventData->wdiResponse;
Jeff Johnson295189b2012-06-20 16:38:30 -070019545
19546 if( pEventData->uEventDataSize != 0 && pEventData->pEventData != NULL )
19547 {
19548 pEventInfo = wpalMemoryAllocate(pEventData->uEventDataSize);
Jeff Johnsone7245742012-09-05 17:12:55 -070019549
Jeff Johnson295189b2012-06-20 16:38:30 -070019550 if ( NULL == pEventInfo )
19551 {
19552 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019553 "Cannot allocate memory for queueing event data info");
Jeff Johnson295189b2012-06-20 16:38:30 -070019554 WDI_ASSERT(0);
19555 wpalMemoryFree(pEventDataQueue);
19556 return WDI_STATUS_MEM_FAILURE;
19557 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019558
Jeff Johnson295189b2012-06-20 16:38:30 -070019559 wpalMemoryCopy(pEventInfo, pEventData->pEventData, pEventData->uEventDataSize);
19560
19561 }
19562 pEventDataQueue->pEventData = pEventInfo;
19563
19564 /*Send wpt a pointer to the node (this is the 1st element in the event data)*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019565 pNode = (wpt_list_node*)pEventDataQueue;
Jeff Johnson295189b2012-06-20 16:38:30 -070019566
Jeff Johnsone7245742012-09-05 17:12:55 -070019567 wpal_list_insert_back(&(pWDICtx->wptPendingQueue), pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019568
19569 return WDI_STATUS_SUCCESS;
19570}/*WDI_QueuePendingReq*/
19571
19572/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019573 @brief Callback function for serializing queued message
Jeff Johnson295189b2012-06-20 16:38:30 -070019574 processing in the control context
Jeff Johnsone7245742012-09-05 17:12:55 -070019575 @param
19576
19577 pMsg - pointer to the message
19578
19579 @see
19580 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019581*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019582void
Jeff Johnson295189b2012-06-20 16:38:30 -070019583WDI_PALCtrlMsgCB
19584(
19585 wpt_msg *pMsg
19586)
19587{
19588 WDI_EventInfoType* pEventData = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070019589 WDI_ControlBlockType* pWDICtx = NULL;
19590 WDI_Status wdiStatus;
19591 WDI_ReqStatusCb pfnReqStatusCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070019592 void* pUserData;
19593 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19594
19595 if (( NULL == pMsg )||
19596 ( NULL == (pEventData = (WDI_EventInfoType*)pMsg->ptr)) ||
19597 ( NULL == (pWDICtx = (WDI_ControlBlockType*)pMsg->pContext )))
19598 {
19599 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019600 "Invalid message received on serialize ctrl context API");
Jeff Johnson295189b2012-06-20 16:38:30 -070019601 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070019602 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019603 }
19604
19605 /*Transition back to the state that we had before serialization
19606 - serialization transitions us to BUSY to stop any incomming requests
19607 ! TO DO L: possible race condition here if a request comes in between the
19608 state transition and the post function*/
19609
Jeff Johnsone7245742012-09-05 17:12:55 -070019610 WDI_STATE_TRANSITION( pWDICtx, pMsg->val);
Jeff Johnson295189b2012-06-20 16:38:30 -070019611
19612 /*-----------------------------------------------------------------------
19613 Check to see what type of event we are serializing
Jeff Johnsone7245742012-09-05 17:12:55 -070019614 - responses are never expected to come through here
Jeff Johnson295189b2012-06-20 16:38:30 -070019615 -----------------------------------------------------------------------*/
19616 switch ( pEventData->wdiRequest )
19617 {
19618
Jeff Johnsone7245742012-09-05 17:12:55 -070019619 case WDI_STOP_REQ:
Jeff Johnson295189b2012-06-20 16:38:30 -070019620 wdiStatus = WDI_PostMainEvent(&gWDICb, WDI_STOP_EVENT, pEventData);
19621 break;
19622
Jeff Johnson295189b2012-06-20 16:38:30 -070019623 case WDI_NV_DOWNLOAD_REQ:
19624 // When WDI State is WDI_STARTED_ST, send WDI request message with event type WDI_REQUEST_EVENT.
19625 // In this case, because this request is called from response process, we could call WDI_ProcessRequest() directly.
19626 if (pWDICtx->uGlobalState == WDI_STARTED_ST)
19627 {
19628 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19629 "%s: WDI_NV_DOWNLOAD_REQ called in WDI_STARTED_ST - send with WDI_REQUEST_EVENT", __FUNCTION__);
19630 wdiStatus = WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, pEventData);
19631 }
19632 else
19633 {
19634 wdiStatus = WDI_PostMainEvent(&gWDICb, WDI_START_EVENT, pEventData);
19635 }
19636
19637 break;
19638
19639 default:
19640 wdiStatus = WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, pEventData);
19641 break;
19642 }/*switch ( pEventData->wdiRequest )*/
19643
19644 if ( WDI_STATUS_SUCCESS != wdiStatus )
19645 {
19646 WDI_ExtractRequestCBFromEvent(pEventData, &pfnReqStatusCB, &pUserData);
19647
19648 if ( NULL != pfnReqStatusCB )
19649 {
19650 /*Fail the request*/
19651 pfnReqStatusCB( wdiStatus, pUserData);
19652 }
19653 }
19654
19655 /* Free data - that was allocated when queueing*/
19656 if( pEventData != NULL )
19657 {
19658 if( pEventData->pEventData != NULL )
19659 {
19660 wpalMemoryFree(pEventData->pEventData);
19661 }
19662 wpalMemoryFree(pEventData);
19663 }
19664
19665 if( pMsg != NULL )
19666 {
19667 wpalMemoryFree(pMsg);
19668 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019669
Jeff Johnson295189b2012-06-20 16:38:30 -070019670}/*WDI_PALCtrlMsgCB*/
19671
19672/**
19673 @brief Utility function used by the DAL Core to help dequeue
Jeff Johnsone7245742012-09-05 17:12:55 -070019674 and schedule for execution a pending request
19675 @param
19676
Jeff Johnson295189b2012-06-20 16:38:30 -070019677 pWDICtx: - pointer to the WDI control block
19678 pEventData: - pointer to the evnt info that needs to be
Jeff Johnsone7245742012-09-05 17:12:55 -070019679 queued
19680
19681 @see
19682 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019683*/
19684WDI_Status
19685WDI_DequeuePendingReq
19686(
19687 WDI_ControlBlockType* pWDICtx
19688)
19689{
Jeff Johnsone7245742012-09-05 17:12:55 -070019690 wpt_list_node* pNode = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070019691 WDI_EventInfoType* pEventData;
Jeff Johnsone7245742012-09-05 17:12:55 -070019692 wpt_msg* palMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -070019693 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
19694
Jeff Johnsone7245742012-09-05 17:12:55 -070019695 wpal_list_remove_front(&(pWDICtx->wptPendingQueue), &pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019696
19697 if ( NULL == pNode )
19698 {
19699 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -070019700 "List is empty - return");
Jeff Johnson295189b2012-06-20 16:38:30 -070019701 return WDI_STATUS_SUCCESS;
19702 }
19703
19704 /*The node actually points to the 1st element inside the Event Data struct -
19705 just cast it back to the struct*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019706 pEventData = (WDI_EventInfoType*)pNode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019707
19708 /*Serialize processing in the control thread
19709 !TO DO: - check to see if these are all the messages params that need
19710 to be filled in*/
19711 palMsg = wpalMemoryAllocate(sizeof(wpt_msg));
19712
19713 if ( NULL == palMsg )
19714 {
19715 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019716 "WDI_DequeuePendingReq: Cannot allocate memory for palMsg.");
Jeff Johnson295189b2012-06-20 16:38:30 -070019717 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070019718 return WDI_STATUS_MEM_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019719 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019720 palMsg->pContext = pWDICtx;
Jeff Johnson295189b2012-06-20 16:38:30 -070019721 palMsg->callback = WDI_PALCtrlMsgCB;
19722 palMsg->ptr = pEventData;
19723
19724 /*Save the global state as we need it on the other side*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019725 palMsg->val = pWDICtx->uGlobalState;
19726
Jeff Johnson295189b2012-06-20 16:38:30 -070019727 /*Transition back to BUSY as we need to handle a queued request*/
19728 WDI_STATE_TRANSITION( pWDICtx, WDI_BUSY_ST);
Jeff Johnsone7245742012-09-05 17:12:55 -070019729
Jeff Johnson295189b2012-06-20 16:38:30 -070019730 wpalPostCtrlMsg(pWDICtx->pPALContext, palMsg);
19731
19732 return WDI_STATUS_PENDING;
19733}/*WDI_DequeuePendingReq*/
19734
19735
19736/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019737 @brief Utility function used by the DAL Core to help queue
Jeff Johnson295189b2012-06-20 16:38:30 -070019738 an association request that cannot be processed right
Jeff Johnsone7245742012-09-05 17:12:55 -070019739 away.- The assoc requests will be queued by BSSID
19740 @param
19741
Jeff Johnson295189b2012-06-20 16:38:30 -070019742 pWDICtx: - pointer to the WDI control block
19743 pEventData: pointer to the evnt info that needs to be queued
19744 macBSSID: bssid
Jeff Johnsone7245742012-09-05 17:12:55 -070019745
19746 @see
19747 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019748*/
19749WDI_Status
19750WDI_QueueNewAssocRequest
19751(
19752 WDI_ControlBlockType* pWDICtx,
19753 WDI_EventInfoType* pEventData,
19754 wpt_macAddr macBSSID
19755)
19756{
Jeff Johnsone7245742012-09-05 17:12:55 -070019757 wpt_uint8 i;
19758 WDI_BSSSessionType* pSession = NULL;
19759 wpt_list_node* pNode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019760 WDI_EventInfoType* pEventDataQueue;
Jeff Johnsone7245742012-09-05 17:12:55 -070019761 void* pEventInfo;
19762 WDI_NextSessionIdType* pSessionIdElement;
Jeff Johnson295189b2012-06-20 16:38:30 -070019763 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Jeff Johnson295189b2012-06-20 16:38:30 -070019764
Jeff Johnsone7245742012-09-05 17:12:55 -070019765
19766 /*------------------------------------------------------------------------
19767 Search for a session that matches the BSSID
Jeff Johnson295189b2012-06-20 16:38:30 -070019768 ------------------------------------------------------------------------*/
19769 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
19770 {
19771 if ( eWLAN_PAL_FALSE == pWDICtx->aBSSSessions[i].bInUse )
19772 {
19773 /*Found an empty session*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019774 pSession = &pWDICtx->aBSSSessions[i];
19775 break;
Jeff Johnson295189b2012-06-20 16:38:30 -070019776 }
19777 }
19778
19779 if ( i >= WDI_MAX_BSS_SESSIONS )
19780 {
19781 /*Cannot find any empty sessions*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019782 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019783 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019784
Jeff Johnson295189b2012-06-20 16:38:30 -070019785 /*------------------------------------------------------------------------
19786 Fill in the BSSID for this session and set the usage flag
19787 ------------------------------------------------------------------------*/
19788 wpalMemoryCopy(pWDICtx->aBSSSessions[i].macBSSID, macBSSID, WDI_MAC_ADDR_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070019789 pWDICtx->aBSSSessions[i].bInUse = eWLAN_PAL_TRUE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019790
19791 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070019792 Allocate memory for this and place it in the queue
Jeff Johnson295189b2012-06-20 16:38:30 -070019793 ------------------------------------------------------------------------*/
19794 pEventDataQueue = (WDI_EventInfoType*)wpalMemoryAllocate(sizeof(WDI_EventInfoType));
19795 if ( NULL == pEventDataQueue )
19796 {
19797 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19798 "%s: Cannot allocate memory for queue node", __FUNCTION__);
19799 WDI_ASSERT(0);
19800 return WDI_STATUS_MEM_FAILURE;
19801 }
19802
19803 pSessionIdElement = (WDI_NextSessionIdType*)wpalMemoryAllocate(sizeof(WDI_NextSessionIdType));
19804 if ( NULL == pSessionIdElement )
19805 {
19806 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19807 "%s: Cannot allocate memory for session ID", __FUNCTION__);
19808 WDI_ASSERT(0);
19809 wpalMemoryFree(pEventDataQueue);
19810 return WDI_STATUS_MEM_FAILURE;
19811 }
19812
19813 pEventInfo = wpalMemoryAllocate(pEventData->uEventDataSize);
19814 if ( NULL == pEventInfo )
19815 {
19816 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19817 "%s: Cannot allocate memory for event data info", __FUNCTION__);
19818 WDI_ASSERT(0);
19819 wpalMemoryFree(pSessionIdElement);
19820 wpalMemoryFree(pEventDataQueue);
19821 return WDI_STATUS_MEM_FAILURE;
19822 }
19823
19824 pEventDataQueue->pCBfnc = pEventData->pCBfnc;
19825 pEventDataQueue->pUserData = pEventData->pUserData;
19826 pEventDataQueue->uEventDataSize = pEventData->uEventDataSize;
19827 pEventDataQueue->wdiRequest = pEventData->wdiRequest;
Jeff Johnsone7245742012-09-05 17:12:55 -070019828 pEventDataQueue->wdiResponse = pEventData->wdiResponse;
Jeff Johnson295189b2012-06-20 16:38:30 -070019829
19830 wpalMemoryCopy(pEventInfo, pEventData->pEventData, pEventData->uEventDataSize);
19831 pEventDataQueue->pEventData = pEventInfo;
19832
19833 /*Send wpt a pointer to the node (this is the 1st element in the event data)*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019834 pNode = (wpt_list_node*)pEventDataQueue;
Jeff Johnson295189b2012-06-20 16:38:30 -070019835
19836 /*This association is currently being queued*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019837 pSession->bAssocReqQueued = eWLAN_PAL_TRUE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019838
Jeff Johnsone7245742012-09-05 17:12:55 -070019839 wpal_list_insert_back(&(pSession->wptPendingQueue), pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019840
19841 /*We need to maintain a separate list that keeps track of the order in which
19842 the new assoc requests are being queued such that we can start processing
19843 them in the order that they had arrived*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019844 pSessionIdElement->ucIndex = i;
19845 pNode = (wpt_list_node*)pSessionIdElement;
Jeff Johnson295189b2012-06-20 16:38:30 -070019846
19847 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19848 "Queueing up new assoc session : %d ", pSessionIdElement->ucIndex);
Jeff Johnsone7245742012-09-05 17:12:55 -070019849 wpal_list_insert_back(&pWDICtx->wptPendingAssocSessionIdQueue, pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019850
19851 /*Return pending as this is what the status of the request is since it has
19852 been queued*/
19853 return WDI_STATUS_PENDING;
19854}/*WDI_QueueNewAssocRequest*/
19855
19856/**
Jeff Johnsone7245742012-09-05 17:12:55 -070019857 @brief Utility function used by the DAL Core to help queue
Jeff Johnson295189b2012-06-20 16:38:30 -070019858 an association request that cannot be processed right
Jeff Johnsone7245742012-09-05 17:12:55 -070019859 away.- The assoc requests will be queued by BSSID
19860 @param
19861
Jeff Johnson295189b2012-06-20 16:38:30 -070019862 pWDICtx: - pointer to the WDI control block
19863 pSession: - session in which to queue
19864 pEventData: pointer to the event info that needs to be
19865 queued
Jeff Johnsone7245742012-09-05 17:12:55 -070019866
19867 @see
19868 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019869*/
19870WDI_Status
19871WDI_QueueAssocRequest
19872(
19873 WDI_ControlBlockType* pWDICtx,
19874 WDI_BSSSessionType* pSession,
19875 WDI_EventInfoType* pEventData
19876)
19877{
Jeff Johnsone7245742012-09-05 17:12:55 -070019878 wpt_list_node* pNode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019879 WDI_EventInfoType* pEventDataQueue;
Jeff Johnsone7245742012-09-05 17:12:55 -070019880 void* pEventInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070019881 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Jeff Johnsone7245742012-09-05 17:12:55 -070019882
19883 /*------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -070019884 Sanity check
19885 ------------------------------------------------------------------------*/
19886 if (( NULL == pSession ) || ( NULL == pWDICtx ))
19887 {
19888 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
19889 "%s: Invalid parameters", __FUNCTION__);
19890
Jeff Johnsone7245742012-09-05 17:12:55 -070019891 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019892 }
19893
19894 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070019895 Allocate memory for this and place it in the queue
Jeff Johnson295189b2012-06-20 16:38:30 -070019896 ------------------------------------------------------------------------*/
19897 pEventDataQueue = (WDI_EventInfoType*)wpalMemoryAllocate(sizeof(WDI_EventInfoType));
19898 if ( NULL == pEventDataQueue )
19899 {
19900 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070019901 "%s: Cannot allocate memory for queueing", __FUNCTION__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019902 WDI_ASSERT(0);
19903 return WDI_STATUS_MEM_FAILURE;
19904 }
19905
19906 pEventInfo = wpalMemoryAllocate(pEventData->uEventDataSize);
19907 if ( NULL == pEventInfo )
19908 {
19909 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
19910 "%s: Cannot allocate memory for queueing event data info",
19911 __FUNCTION__);
19912 WDI_ASSERT(0);
19913 wpalMemoryFree(pEventDataQueue);
19914 return WDI_STATUS_MEM_FAILURE;
19915 }
19916
19917 pEventDataQueue->pCBfnc = pEventData->pCBfnc;
19918 pEventDataQueue->pUserData = pEventData->pUserData;
19919 pEventDataQueue->uEventDataSize = pEventData->uEventDataSize;
19920 pEventDataQueue->wdiRequest = pEventData->wdiRequest;
Jeff Johnsone7245742012-09-05 17:12:55 -070019921 pEventDataQueue->wdiResponse = pEventData->wdiResponse;
Jeff Johnson295189b2012-06-20 16:38:30 -070019922 pEventDataQueue->pEventData = pEventInfo;
19923
19924 wpalMemoryCopy(pEventInfo, pEventData->pEventData, pEventData->uEventDataSize);
19925
19926 /*Send wpt a pointer to the node (this is the 1st element in the event data)*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019927 pNode = (wpt_list_node*)pEventDataQueue;
Jeff Johnson295189b2012-06-20 16:38:30 -070019928
19929 /*This association is currently being queued*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019930 pSession->bAssocReqQueued = eWLAN_PAL_TRUE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019931
Jeff Johnsone7245742012-09-05 17:12:55 -070019932 wpal_list_insert_back(&(pSession->wptPendingQueue), pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019933
19934 /*The result of this operation is pending because the request has been
19935 queued and it will be processed at a later moment in time */
19936 return WDI_STATUS_PENDING;
19937}/*WDI_QueueAssocRequest*/
19938
19939/**
19940 @brief Utility function used by the DAL Core to help dequeue
19941 an association request that was pending
19942 The request will be queued up in front of the main
19943 pending queue for imediate processing
Jeff Johnsone7245742012-09-05 17:12:55 -070019944 @param
19945
Jeff Johnson295189b2012-06-20 16:38:30 -070019946 pWDICtx: - pointer to the WDI control block
Jeff Johnsone7245742012-09-05 17:12:55 -070019947
19948
19949 @see
19950 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070019951*/
19952WDI_Status
19953WDI_DequeueAssocRequest
19954(
19955 WDI_ControlBlockType* pWDICtx
19956)
19957{
Jeff Johnsone7245742012-09-05 17:12:55 -070019958 wpt_list_node* pNode = NULL;
19959 WDI_NextSessionIdType* pSessionIdElement;
Jeff Johnson295189b2012-06-20 16:38:30 -070019960 WDI_BSSSessionType* pSession;
19961 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Jeff Johnsone7245742012-09-05 17:12:55 -070019962
19963 /*------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -070019964 Sanity check
19965 ------------------------------------------------------------------------*/
19966 if ( NULL == pWDICtx )
19967 {
19968 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
19969 "%s: Invalid parameters", __FUNCTION__);
19970
Jeff Johnsone7245742012-09-05 17:12:55 -070019971 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019972 }
19973
19974 /*------------------------------------------------------------------------
19975 An association has been completed => a new association can occur
19976 Check to see if there are any pending associations ->
19977 If so , transfer all the pending requests into the busy queue for
19978 processing
19979 These requests have arrived prior to the requests in the busy queue
19980 (bc they needed to be processed in order to be placed in this queue)
19981 => they will be placed at the front of the busy queue
19982 ------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019983 wpal_list_remove_front(&(pWDICtx->wptPendingAssocSessionIdQueue), &pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070019984
19985 if ( NULL == pNode )
19986 {
19987 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnsone7245742012-09-05 17:12:55 -070019988 "List is empty - return");
Jeff Johnson295189b2012-06-20 16:38:30 -070019989 return WDI_STATUS_SUCCESS;
19990 }
19991
19992 /*The node actually points to the 1st element inside the Session Id struct -
19993 just cast it back to the struct*/
Jeff Johnsone7245742012-09-05 17:12:55 -070019994 pSessionIdElement = (WDI_NextSessionIdType*)pNode;
Jeff Johnson295189b2012-06-20 16:38:30 -070019995
19996 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
19997 "Dequeueing new assoc session : %d ", pSessionIdElement->ucIndex);
19998
19999 if ( pSessionIdElement->ucIndex < WDI_MAX_BSS_SESSIONS )
20000 {
20001 pSession = &pWDICtx->aBSSSessions[pSessionIdElement->ucIndex];
Jeff Johnsone7245742012-09-05 17:12:55 -070020002
Jeff Johnson295189b2012-06-20 16:38:30 -070020003 /*Transfer all the pending requests in this assoc queue to
Jeff Johnsone7245742012-09-05 17:12:55 -070020004 the front of the main waiting queue for subsequent execution*/
20005 wpal_list_remove_back(&(pSession->wptPendingQueue), &pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070020006 while ( NULL != pNode )
20007 {
20008 /*Place it in front of the main pending list*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020009 wpal_list_insert_front( &(pWDICtx->wptPendingQueue), &pNode);
20010 wpal_list_remove_back(&(pSession->wptPendingQueue), &pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070020011 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020012 pSession->bAssocReqQueued = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070020013 }
20014 else
20015 {
20016 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
Jeff Johnsone7245742012-09-05 17:12:55 -070020017 "Invalid session id queued up for assoc");
Jeff Johnson295189b2012-06-20 16:38:30 -070020018 WPAL_ASSERT(0);
20019 wpalMemoryFree(pSessionIdElement);
Jeff Johnsone7245742012-09-05 17:12:55 -070020020 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070020021 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020022
Jeff Johnson295189b2012-06-20 16:38:30 -070020023 /*Clean this up as it is no longer needed in order to prevent memory leak*/
20024 wpalMemoryFree(pSessionIdElement);
20025 return WDI_STATUS_SUCCESS;
20026}/*WDI_DequeueAssocRequest*/
20027
20028/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020029 @brief Utility function used by the DAL Core to clear any
Jeff Johnson295189b2012-06-20 16:38:30 -070020030 pending requests - all req cb will be called with
20031 failure and the queue will be emptied.
Jeff Johnsone7245742012-09-05 17:12:55 -070020032 @param
20033
Jeff Johnson295189b2012-06-20 16:38:30 -070020034 pWDICtx: - pointer to the WDI control block
Jeff Johnsone7245742012-09-05 17:12:55 -070020035
20036 @see
20037 @return Result of the operation
Jeff Johnson295189b2012-06-20 16:38:30 -070020038*/
20039WDI_Status
20040WDI_ClearPendingRequests
Jeff Johnsone7245742012-09-05 17:12:55 -070020041(
Jeff Johnson295189b2012-06-20 16:38:30 -070020042 WDI_ControlBlockType* pWDICtx
20043)
20044{
Jeff Johnsone7245742012-09-05 17:12:55 -070020045 wpt_list_node* pNode = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070020046 WDI_EventInfoType* pEventDataQueue = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070020047 WDI_ReqStatusCb pfnReqStatusCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070020048 void* pUserData;
20049 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
20050
Jeff Johnsone7245742012-09-05 17:12:55 -070020051 wpal_list_remove_front(&(pWDICtx->wptPendingQueue), &pNode);
Jeff Johnson295189b2012-06-20 16:38:30 -070020052
20053 /*------------------------------------------------------------------------
20054 Go through all the requests and fail them - this will only be called
20055 when device is being stopped or an error was detected - either case the
Jeff Johnsone7245742012-09-05 17:12:55 -070020056 pending requests can no longer be sent down to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070020057 ------------------------------------------------------------------------*/
20058 while( pNode )
20059 {
20060 /*The node actually points to the 1st element inside the Event Data struct -
20061 just cast it back to the struct*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020062 pEventDataQueue = (WDI_EventInfoType*)pNode;
20063
Jeff Johnson295189b2012-06-20 16:38:30 -070020064 WDI_ExtractRequestCBFromEvent(pEventDataQueue, &pfnReqStatusCB, &pUserData);
20065 if ( NULL != pfnReqStatusCB )
20066 {
20067 /*Fail the request*/
20068 pfnReqStatusCB( WDI_STATUS_E_FAILURE, pUserData);
20069 }
20070 /* Free data - that was allocated when queueing */
20071 if ( pEventDataQueue->pEventData != NULL )
20072 {
20073 wpalMemoryFree(pEventDataQueue->pEventData);
20074 }
20075 wpalMemoryFree(pEventDataQueue);
20076
20077 if (wpal_list_remove_front(&(pWDICtx->wptPendingQueue), &pNode) != eWLAN_PAL_STATUS_SUCCESS)
20078 {
20079 break;
20080 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020081 }
20082
Jeff Johnson295189b2012-06-20 16:38:30 -070020083 return WDI_STATUS_SUCCESS;
20084}/*WDI_ClearPendingRequests*/
20085
20086/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020087 @brief Helper routine used to init the BSS Sessions in the WDI control block
20088
20089
20090 @param pWDICtx: pointer to the WLAN DAL context
20091
Jeff Johnson295189b2012-06-20 16:38:30 -070020092 @see
20093*/
20094void
20095WDI_ResetAssocSessions
Jeff Johnsone7245742012-09-05 17:12:55 -070020096(
Jeff Johnson295189b2012-06-20 16:38:30 -070020097 WDI_ControlBlockType* pWDICtx
20098)
20099{
Jeff Johnsone7245742012-09-05 17:12:55 -070020100 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020101 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20102
20103 /*-------------------------------------------------------------------------
20104 No Sanity check
20105 -------------------------------------------------------------------------*/
20106 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
20107 {
Jeff Johnsone7245742012-09-05 17:12:55 -070020108 wpalMemoryZero( &pWDICtx->aBSSSessions[i], sizeof(WDI_BSSSessionType) );
Jeff Johnson295189b2012-06-20 16:38:30 -070020109 pWDICtx->aBSSSessions[i].wdiAssocState = WDI_ASSOC_INIT_ST;
20110 pWDICtx->aBSSSessions[i].bcastStaIdx = WDI_STA_INVALID_IDX;
20111 pWDICtx->aBSSSessions[i].ucBSSIdx = WDI_BSS_INVALID_IDX;
20112 }
20113}/*WDI_ResetAssocSessions*/
20114
20115/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020116 @brief Helper routine used to find a session based on the BSSID
20117
20118
20119 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070020120 macBSSID: BSSID of the session
Jeff Johnsone7245742012-09-05 17:12:55 -070020121 pSession: pointer to the session (if found)
20122
Jeff Johnson295189b2012-06-20 16:38:30 -070020123 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020124 @return Index of the session in the array
Jeff Johnson295189b2012-06-20 16:38:30 -070020125*/
20126wpt_uint8
20127WDI_FindAssocSession
Jeff Johnsone7245742012-09-05 17:12:55 -070020128(
Jeff Johnson295189b2012-06-20 16:38:30 -070020129 WDI_ControlBlockType* pWDICtx,
20130 wpt_macAddr macBSSID,
20131 WDI_BSSSessionType** ppSession
20132)
20133{
Jeff Johnsone7245742012-09-05 17:12:55 -070020134 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020135 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20136
20137 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070020138 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070020139 -------------------------------------------------------------------------*/
20140 if ( NULL == ppSession )
20141 {
20142 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20143 "%s: Invalid parameters", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020144 return WDI_MAX_BSS_SESSIONS;
Jeff Johnson295189b2012-06-20 16:38:30 -070020145 }
20146
Jeff Johnsone7245742012-09-05 17:12:55 -070020147 *ppSession = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070020148
Jeff Johnsone7245742012-09-05 17:12:55 -070020149 /*------------------------------------------------------------------------
20150 Search for a session that matches the BSSID
Jeff Johnson295189b2012-06-20 16:38:30 -070020151 ------------------------------------------------------------------------*/
20152 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
20153 {
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -070020154 if ( (pWDICtx->aBSSSessions[i].bInUse == eWLAN_PAL_TRUE) &&
20155 (eWLAN_PAL_TRUE ==
20156 wpalMemoryCompare(pWDICtx->aBSSSessions[i].macBSSID, macBSSID,
20157 WDI_MAC_ADDR_LEN)) )
Jeff Johnson295189b2012-06-20 16:38:30 -070020158 {
20159 /*Found the session*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020160 *ppSession = &pWDICtx->aBSSSessions[i];
Jeff Johnson295189b2012-06-20 16:38:30 -070020161 return i;
20162 }
20163 }
20164
Jeff Johnsone7245742012-09-05 17:12:55 -070020165 return i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020166}/*WDI_FindAssocSession*/
20167
20168/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020169 @brief Helper routine used to find a session based on the BSSID
20170
20171
20172 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070020173 ucBSSIdx: BSS Index of the session
20174 ppSession: out pointer to the session (if found)
Jeff Johnsone7245742012-09-05 17:12:55 -070020175
Jeff Johnson295189b2012-06-20 16:38:30 -070020176 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020177 @return Index of the session in the array
Jeff Johnson295189b2012-06-20 16:38:30 -070020178*/
20179wpt_uint8
20180WDI_FindAssocSessionByBSSIdx
Jeff Johnsone7245742012-09-05 17:12:55 -070020181(
Jeff Johnson295189b2012-06-20 16:38:30 -070020182 WDI_ControlBlockType* pWDICtx,
20183 wpt_uint16 ucBSSIdx,
20184 WDI_BSSSessionType** ppSession
20185)
20186{
Jeff Johnsone7245742012-09-05 17:12:55 -070020187 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020188 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20189
20190 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070020191 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070020192 -------------------------------------------------------------------------*/
20193 if ( NULL == ppSession )
20194 {
20195 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20196 "%s: Invalid parameters", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020197 return WDI_MAX_BSS_SESSIONS;
Jeff Johnson295189b2012-06-20 16:38:30 -070020198 }
20199
Jeff Johnsone7245742012-09-05 17:12:55 -070020200 *ppSession = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070020201
Jeff Johnsone7245742012-09-05 17:12:55 -070020202 /*------------------------------------------------------------------------
20203 Search for a session that matches the BSSID
Jeff Johnson295189b2012-06-20 16:38:30 -070020204 ------------------------------------------------------------------------*/
20205 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
20206 {
20207 if ( ucBSSIdx == pWDICtx->aBSSSessions[i].ucBSSIdx )
20208 {
20209 /*Found the session*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020210 *ppSession = &pWDICtx->aBSSSessions[i];
Jeff Johnson295189b2012-06-20 16:38:30 -070020211 return i;
20212 }
20213 }
20214
Jeff Johnsone7245742012-09-05 17:12:55 -070020215 return i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020216}/*WDI_FindAssocSessionByBSSIdx*/
20217
20218/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020219 @brief Helper routine used to find a session based on the BSSID
20220
20221
20222 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070020223 ucBSSIdx: BSS Index of the session
20224 ppSession: out pointer to the session (if found)
Jeff Johnsone7245742012-09-05 17:12:55 -070020225
Jeff Johnson295189b2012-06-20 16:38:30 -070020226 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020227 @return Index of the session in the array
Jeff Johnson295189b2012-06-20 16:38:30 -070020228*/
20229wpt_uint8
20230WDI_FindAssocSessionByIdx
Jeff Johnsone7245742012-09-05 17:12:55 -070020231(
Jeff Johnson295189b2012-06-20 16:38:30 -070020232 WDI_ControlBlockType* pWDICtx,
20233 wpt_uint16 usIdx,
20234 WDI_BSSSessionType** ppSession
20235)
20236{
20237 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20238
20239 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070020240 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070020241 -------------------------------------------------------------------------*/
20242 if ( NULL == ppSession || usIdx >= WDI_MAX_BSS_SESSIONS )
20243 {
20244 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20245 "%s: Invalid parameters", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020246 return WDI_MAX_BSS_SESSIONS;
Jeff Johnson295189b2012-06-20 16:38:30 -070020247 }
20248
20249 /*Found the session*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020250 *ppSession = &pWDICtx->aBSSSessions[usIdx];
Jeff Johnson295189b2012-06-20 16:38:30 -070020251
20252 return usIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070020253
Jeff Johnson295189b2012-06-20 16:38:30 -070020254}/*WDI_FindAssocSessionByBSSIdx*/
20255
20256/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020257 @brief Helper routine used to find an empty session in the WDI
Jeff Johnson295189b2012-06-20 16:38:30 -070020258 CB
Jeff Johnsone7245742012-09-05 17:12:55 -070020259
20260
20261 @param pWDICtx: pointer to the WLAN DAL context
20262 pSession: pointer to the session (if found)
20263
Jeff Johnson295189b2012-06-20 16:38:30 -070020264 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020265 @return Index of the session in the array
Jeff Johnson295189b2012-06-20 16:38:30 -070020266*/
20267wpt_uint8
20268WDI_FindEmptySession
Jeff Johnsone7245742012-09-05 17:12:55 -070020269(
Jeff Johnson295189b2012-06-20 16:38:30 -070020270 WDI_ControlBlockType* pWDICtx,
20271 WDI_BSSSessionType** ppSession
20272)
20273{
Jeff Johnsone7245742012-09-05 17:12:55 -070020274 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020275 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20276 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070020277 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070020278 -------------------------------------------------------------------------*/
20279 if ( NULL == ppSession )
20280 {
20281 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20282 "%s: Invalid parameters", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020283 return WDI_MAX_BSS_SESSIONS;
Jeff Johnson295189b2012-06-20 16:38:30 -070020284 }
20285
Jeff Johnsone7245742012-09-05 17:12:55 -070020286 *ppSession = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070020287
Jeff Johnsone7245742012-09-05 17:12:55 -070020288 /*------------------------------------------------------------------------
20289 Search for a session that it is not in use
Jeff Johnson295189b2012-06-20 16:38:30 -070020290 ------------------------------------------------------------------------*/
20291 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
20292 {
20293 if ( ! pWDICtx->aBSSSessions[i].bInUse )
20294 {
20295 /*Found a session*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020296 *ppSession = &pWDICtx->aBSSSessions[i];
Jeff Johnson295189b2012-06-20 16:38:30 -070020297 return i;
20298 }
20299 }
20300
Jeff Johnsone7245742012-09-05 17:12:55 -070020301 return i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020302}/*WDI_FindEmptySession*/
20303
20304
20305/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020306 @brief Helper routine used to get the total count of active
Jeff Johnson295189b2012-06-20 16:38:30 -070020307 sessions
Jeff Johnsone7245742012-09-05 17:12:55 -070020308
20309
20310 @param pWDICtx: pointer to the WLAN DAL context
20311
Jeff Johnson295189b2012-06-20 16:38:30 -070020312 @see
20313 @return Number of sessions in use
20314*/
20315wpt_uint8
20316WDI_GetActiveSessionsCount
Jeff Johnsone7245742012-09-05 17:12:55 -070020317(
Jeff Johnson295189b2012-06-20 16:38:30 -070020318 WDI_ControlBlockType* pWDICtx
20319)
20320{
Jeff Johnsone7245742012-09-05 17:12:55 -070020321 wpt_uint8 i, ucCount = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070020322 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020323
20324 /*------------------------------------------------------------------------
Jeff Johnson295189b2012-06-20 16:38:30 -070020325 Count all sessions in use
20326 ------------------------------------------------------------------------*/
20327 for ( i = 0; i < WDI_MAX_BSS_SESSIONS; i++ )
20328 {
20329 if ( pWDICtx->aBSSSessions[i].bInUse )
20330 {
20331 ucCount++;
20332 }
20333 }
20334
Jeff Johnsone7245742012-09-05 17:12:55 -070020335 return ucCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070020336}/*WDI_GetActiveSessionsCount*/
20337
20338/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020339 @brief Helper routine used to delete session in the WDI
Jeff Johnson295189b2012-06-20 16:38:30 -070020340 CB
Jeff Johnsone7245742012-09-05 17:12:55 -070020341
20342
20343 @param pWDICtx: pointer to the WLAN DAL context
20344 pSession: pointer to the session (if found)
20345
Jeff Johnson295189b2012-06-20 16:38:30 -070020346 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020347 @return Index of the session in the array
Jeff Johnson295189b2012-06-20 16:38:30 -070020348*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020349void
Jeff Johnson295189b2012-06-20 16:38:30 -070020350WDI_DeleteSession
Jeff Johnsone7245742012-09-05 17:12:55 -070020351(
Jeff Johnson295189b2012-06-20 16:38:30 -070020352 WDI_ControlBlockType* pWDICtx,
20353 WDI_BSSSessionType* ppSession
20354)
20355{
20356 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070020357 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070020358 -------------------------------------------------------------------------*/
20359 if ( NULL == ppSession )
20360 {
20361 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20362 "%s: Invalid parameters", __FUNCTION__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020363 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020364 }
20365
Jeff Johnsone7245742012-09-05 17:12:55 -070020366 /*------------------------------------------------------------------------
20367 Reset the entries int session
Jeff Johnson295189b2012-06-20 16:38:30 -070020368 ------------------------------------------------------------------------*/
20369 wpal_list_destroy(&ppSession->wptPendingQueue);
20370 wpalMemoryZero(ppSession, sizeof(*ppSession));
Jeff Johnsone7245742012-09-05 17:12:55 -070020371 ppSession->wdiAssocState = WDI_ASSOC_INIT_ST;
20372 ppSession->bInUse = eWLAN_PAL_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070020373 ppSession->wdiBssType = WDI_INFRASTRUCTURE_MODE;
20374 wpal_list_init(&ppSession->wptPendingQueue);
20375
20376}/*WDI_DeleteSession*/
20377
20378/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020379 @brief Utility function to add the broadcast STA to the the STA table.
Jeff Johnson295189b2012-06-20 16:38:30 -070020380 The bcast STA ID is assigned by HAL and must be valid.
Jeff Johnsone7245742012-09-05 17:12:55 -070020381 @param
20382
Jeff Johnson295189b2012-06-20 16:38:30 -070020383 WDI_AddStaParams: - pointer to the WDI Add STA params
20384 usBcastStaIdx: - Broadcast STA index passed by HAL
Jeff Johnsone7245742012-09-05 17:12:55 -070020385
20386 @see
20387 @return void
Jeff Johnson295189b2012-06-20 16:38:30 -070020388*/
20389void
20390WDI_AddBcastSTAtoSTATable
20391(
20392 WDI_ControlBlockType* pWDICtx,
20393 WDI_AddStaParams * staParams,
20394 wpt_uint16 usBcastStaIdx
20395)
20396{
20397 WDI_AddStaParams wdiAddSTAParam = {0};
20398 wpt_macAddr bcastMacAddr = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
20399 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
20400
20401 /*---------------------------------------------------------------------
20402 Sanity check
20403 ---------------------------------------------------------------------*/
20404 if ( NULL == staParams )
20405 {
20406 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20407 "%s: Invalid parameters", __FUNCTION__);
20408
Jeff Johnsone7245742012-09-05 17:12:55 -070020409 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020410 }
20411
20412 wdiAddSTAParam.bcastDpuIndex = staParams->bcastDpuIndex;
20413 wdiAddSTAParam.bcastDpuSignature = staParams->bcastDpuSignature;
20414 wdiAddSTAParam.bcastMgmtDpuIndex = staParams->bcastMgmtDpuIndex;
20415 wdiAddSTAParam.bcastMgmtDpuSignature = staParams->bcastMgmtDpuSignature;
20416 wdiAddSTAParam.dpuIndex = staParams->dpuIndex;
20417 wdiAddSTAParam.dpuSig = staParams->dpuSig;
20418 wpalMemoryCopy( wdiAddSTAParam.macBSSID, staParams->macBSSID,
20419 WDI_MAC_ADDR_LEN );
20420 wpalMemoryCopy( wdiAddSTAParam.staMacAddr, bcastMacAddr, WDI_MAC_ADDR_LEN );
20421 wdiAddSTAParam.ucBSSIdx = staParams->ucBSSIdx;
20422 wdiAddSTAParam.ucHTCapable = staParams->ucHTCapable;
20423 wdiAddSTAParam.ucRmfEnabled = staParams->ucRmfEnabled;
20424 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_BCAST;
20425 wdiAddSTAParam.ucWmmEnabled = staParams->ucWmmEnabled;
20426 wdiAddSTAParam.ucSTAIdx = usBcastStaIdx;
Jeff Johnsone7245742012-09-05 17:12:55 -070020427
Jeff Johnson295189b2012-06-20 16:38:30 -070020428 (void)WDI_STATableAddSta(pWDICtx,&wdiAddSTAParam);
20429}
20430
20431/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020432 @brief NV blob will be divided into fragments of size 4kb and
20433 Sent to HAL
20434
20435 @param pWDICtx: pointer to the WLAN DAL context
20436 pEventData: pointer to the event information structure
20437
Jeff Johnson295189b2012-06-20 16:38:30 -070020438 @see
20439 @return Result of the function call
20440 */
20441
20442WDI_Status WDI_SendNvBlobReq
Jeff Johnsone7245742012-09-05 17:12:55 -070020443(
Jeff Johnson295189b2012-06-20 16:38:30 -070020444 WDI_ControlBlockType* pWDICtx,
20445 WDI_EventInfoType* pEventData
20446)
20447{
20448
20449 tHalNvImgDownloadReqMsg halNvImgDownloadParam;
20450 wpt_uint8* pSendBuffer = NULL;
20451 wpt_uint16 usDataOffset = 0;
20452 wpt_uint16 usSendSize = 0;
20453 wpt_uint16 usCurrentFragmentSize =0;
20454 wpt_uint8* pSrcBuffer = NULL;
20455 WDI_NvDownloadReqParamsType* pwdiNvDownloadReqParams =NULL ;
20456 WDI_NvDownloadRspCb wdiNvDownloadRspCb;
20457
20458 wdiNvDownloadRspCb = (WDI_NvDownloadRspCb)pEventData->pCBfnc;
20459 WDI_ASSERT(NULL != wdiNvDownloadRspCb);
20460 pwdiNvDownloadReqParams = (WDI_NvDownloadReqParamsType*)pEventData->pEventData;
20461
Jeff Johnsone7245742012-09-05 17:12:55 -070020462 /* Sanity Check is done by the caller */
Jeff Johnson295189b2012-06-20 16:38:30 -070020463 pSrcBuffer =(wpt_uint8 *) pwdiNvDownloadReqParams->wdiBlobInfo.pBlobAddress;
20464
20465 /* Update the current Fragment Number */
20466 pWDICtx->wdiNvBlobInfo.usCurrentFragment += 1;
20467
20468 /*Update the HAL REQ structure */
20469 /*HAL maintaining the fragment count as 0,1,2...n where at WDI it is represented as 1,2,3.. n*/
20470 halNvImgDownloadParam.nvImageReqParams.fragNumber =
20471 pWDICtx->wdiNvBlobInfo.usCurrentFragment-1;
20472
20473 /* Divide the NV Image to size of 'FRAGMENT_SIZE' fragments and send it to HAL.
Jeff Johnsone7245742012-09-05 17:12:55 -070020474 If the size of the Image is less than 'FRAGMENT_SIZE' then in one iteration total
Jeff Johnson295189b2012-06-20 16:38:30 -070020475 image will be sent to HAL*/
20476
Jeff Johnsone7245742012-09-05 17:12:55 -070020477 if(pWDICtx->wdiNvBlobInfo.usTotalFragment
Jeff Johnson295189b2012-06-20 16:38:30 -070020478 == pWDICtx->wdiNvBlobInfo.usCurrentFragment)
Jeff Johnsone7245742012-09-05 17:12:55 -070020479 {
Jeff Johnson295189b2012-06-20 16:38:30 -070020480 /* Taking care of boundry condition */
Jeff Johnsone7245742012-09-05 17:12:55 -070020481 if( !(usCurrentFragmentSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070020482 pwdiNvDownloadReqParams->wdiBlobInfo.uBlobSize%FRAGMENT_SIZE ))
20483 usCurrentFragmentSize = FRAGMENT_SIZE;
20484
20485 /*Update the HAL REQ structure */
20486 halNvImgDownloadParam.nvImageReqParams.isLastFragment = 1;
20487 halNvImgDownloadParam.nvImageReqParams.nvImgBufferSize= usCurrentFragmentSize;
20488
20489 }
20490 else
Jeff Johnsone7245742012-09-05 17:12:55 -070020491 {
Jeff Johnson295189b2012-06-20 16:38:30 -070020492 usCurrentFragmentSize = FRAGMENT_SIZE;
20493
20494 /*Update the HAL REQ structure */
20495 halNvImgDownloadParam.nvImageReqParams.isLastFragment =0;
20496 halNvImgDownloadParam.nvImageReqParams.nvImgBufferSize = usCurrentFragmentSize;
20497 }
20498
20499 /*-----------------------------------------------------------------------
20500 Get message buffer
20501 -----------------------------------------------------------------------*/
20502 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,WDI_NV_DOWNLOAD_REQ,
20503 sizeof(halNvImgDownloadParam.nvImageReqParams)+ usCurrentFragmentSize,
20504 &pSendBuffer, &usDataOffset, &usSendSize))||
Jeff Johnsone7245742012-09-05 17:12:55 -070020505 ( usSendSize <
Jeff Johnson295189b2012-06-20 16:38:30 -070020506 (usDataOffset + sizeof(halNvImgDownloadParam.nvImageReqParams) + usCurrentFragmentSize )))
20507 {
20508 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
20509 "Unable to get send buffer in NV Download req %x %x ",
20510 pEventData, pwdiNvDownloadReqParams);
20511 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070020512 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070020513 }
20514
20515 /* Copying the Hal NV download REQ structure */
Jeff Johnsone7245742012-09-05 17:12:55 -070020516 wpalMemoryCopy(pSendBuffer + usDataOffset ,
Jeff Johnson295189b2012-06-20 16:38:30 -070020517 &halNvImgDownloadParam.nvImageReqParams ,sizeof(tHalNvImgDownloadReqParams));
20518
20519 /* Appending the NV image fragment */
20520 wpalMemoryCopy(pSendBuffer + usDataOffset + sizeof(tHalNvImgDownloadReqParams),
20521 (void *)(pSrcBuffer + halNvImgDownloadParam.nvImageReqParams.fragNumber * FRAGMENT_SIZE),
20522 usCurrentFragmentSize);
20523
20524 pWDICtx->wdiReqStatusCB = pwdiNvDownloadReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070020525 pWDICtx->pReqStatusUserData = pwdiNvDownloadReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020526
Jeff Johnsone7245742012-09-05 17:12:55 -070020527 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
20528 wdiNvDownloadRspCb, pEventData->pUserData,
Jeff Johnson295189b2012-06-20 16:38:30 -070020529 WDI_NV_DOWNLOAD_RESP);
20530
20531}
Jeff Johnsone7245742012-09-05 17:12:55 -070020532/*============================================================================
20533 Helper inline functions for
Jeff Johnson295189b2012-06-20 16:38:30 -070020534 ============================================================================*/
20535/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020536 @brief Helper routine used to find a session based on the BSSID
20537 @param pContext: pointer to the WLAN DAL context
20538 @param pDPContext: pointer to the Datapath context
20539
Jeff Johnson295189b2012-06-20 16:38:30 -070020540 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020541 @return
Jeff Johnson295189b2012-06-20 16:38:30 -070020542*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020543WPT_INLINE void
Jeff Johnson295189b2012-06-20 16:38:30 -070020544WDI_DS_AssignDatapathContext (void *pContext, void *pDPContext)
20545{
20546 WDI_ControlBlockType *pCB = (WDI_ControlBlockType *)pContext;
20547
20548 pCB->pDPContext = pDPContext;
20549 return;
20550}
20551
20552/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020553 @brief Helper routine used to find a session based on the BSSID
20554
20555
20556 @param pContext: pointer to the WLAN DAL context
20557
Jeff Johnson295189b2012-06-20 16:38:30 -070020558 @see
20559 @return pointer to Datapath context
20560*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020561WPT_INLINE void *
Jeff Johnson295189b2012-06-20 16:38:30 -070020562WDI_DS_GetDatapathContext (void *pContext)
20563{
20564 WDI_ControlBlockType *pCB = (WDI_ControlBlockType *)pContext;
20565 return pCB->pDPContext;
20566}
20567/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020568 @brief Helper routine used to find a session based on the BSSID
20569
20570
20571 @param pContext: pointer to the WLAN DAL context
20572 @param pDTDriverContext: pointer to the Transport Driver context
20573
Jeff Johnson295189b2012-06-20 16:38:30 -070020574 @see
20575 @return void
20576*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020577WPT_INLINE void
Jeff Johnson295189b2012-06-20 16:38:30 -070020578WDT_AssignTransportDriverContext (void *pContext, void *pDTDriverContext)
20579{
20580 WDI_ControlBlockType *pCB = (WDI_ControlBlockType *)pContext;
20581
20582 pCB->pDTDriverContext = pDTDriverContext;
Jeff Johnsone7245742012-09-05 17:12:55 -070020583 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020584}
20585
20586/**
Jeff Johnsone7245742012-09-05 17:12:55 -070020587 @brief Helper routine used to find a session based on the BSSID
20588
20589
20590 @param pWDICtx: pointer to the WLAN DAL context
20591
Jeff Johnson295189b2012-06-20 16:38:30 -070020592 @see
Jeff Johnsone7245742012-09-05 17:12:55 -070020593 @return pointer to datapath context
Jeff Johnson295189b2012-06-20 16:38:30 -070020594*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020595WPT_INLINE void *
Jeff Johnson295189b2012-06-20 16:38:30 -070020596WDT_GetTransportDriverContext (void *pContext)
20597{
20598 WDI_ControlBlockType *pCB = (WDI_ControlBlockType *)pContext;
Jeff Johnsone7245742012-09-05 17:12:55 -070020599 return(pCB->pDTDriverContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020600}
20601
Jeff Johnsone7245742012-09-05 17:12:55 -070020602/*============================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070020603 Helper inline converters
20604 ============================================================================*/
20605/*Convert WDI driver type into HAL driver type*/
20606WPT_STATIC WPT_INLINE WDI_Status
20607WDI_HAL_2_WDI_STATUS
20608(
20609 eHalStatus halStatus
20610)
20611{
Jeff Johnsone7245742012-09-05 17:12:55 -070020612 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070020613 the chances of getting inlined*/
20614 switch( halStatus )
20615 {
20616 case eHAL_STATUS_SUCCESS:
20617 case eHAL_STATUS_ADD_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO:
20618 case eHAL_STATUS_DEL_STA_SELF_IGNORED_REF_COUNT_NOT_ZERO:
20619 return WDI_STATUS_SUCCESS;
20620 case eHAL_STATUS_FAILURE:
20621 return WDI_STATUS_E_FAILURE;
20622 case eHAL_STATUS_FAILED_ALLOC:
Jeff Johnsone7245742012-09-05 17:12:55 -070020623 return WDI_STATUS_MEM_FAILURE;
20624 /*The rest of the HAL error codes must be kept hidden from the UMAC as
Jeff Johnson295189b2012-06-20 16:38:30 -070020625 they refer to specific internal modules of our device*/
Jeff Johnsone7245742012-09-05 17:12:55 -070020626 default:
20627 return WDI_STATUS_DEV_INTERNAL_FAILURE;
20628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020629
Jeff Johnsone7245742012-09-05 17:12:55 -070020630 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070020631}/*WDI_HAL_2_WDI_STATUS*/
20632
20633/*Convert WDI request type into HAL request type*/
20634WPT_STATIC WPT_INLINE tHalHostMsgType
20635WDI_2_HAL_REQ_TYPE
20636(
20637 WDI_RequestEnumType wdiReqType
20638)
20639{
Jeff Johnsone7245742012-09-05 17:12:55 -070020640 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070020641 the chances of getting inlined*/
20642 switch( wdiReqType )
Jeff Johnsone7245742012-09-05 17:12:55 -070020643 {
Jeff Johnson295189b2012-06-20 16:38:30 -070020644 case WDI_START_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020645 return WLAN_HAL_START_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020646 case WDI_STOP_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020647 return WLAN_HAL_STOP_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020648 case WDI_INIT_SCAN_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020649 return WLAN_HAL_INIT_SCAN_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020650 case WDI_START_SCAN_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020651 return WLAN_HAL_START_SCAN_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020652 case WDI_END_SCAN_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020653 return WLAN_HAL_END_SCAN_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020654 case WDI_FINISH_SCAN_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020655 return WLAN_HAL_FINISH_SCAN_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020656 case WDI_JOIN_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020657 return WLAN_HAL_JOIN_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020658 case WDI_CONFIG_BSS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020659 return WLAN_HAL_CONFIG_BSS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020660 case WDI_DEL_BSS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020661 return WLAN_HAL_DELETE_BSS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020662 case WDI_POST_ASSOC_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020663 return WLAN_HAL_POST_ASSOC_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020664 case WDI_DEL_STA_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020665 return WLAN_HAL_DELETE_STA_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020666 case WDI_SET_BSS_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020667 return WLAN_HAL_SET_BSSKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020668 case WDI_RMV_BSS_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020669 return WLAN_HAL_RMV_BSSKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020670 case WDI_SET_STA_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020671 return WLAN_HAL_SET_STAKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020672 case WDI_RMV_STA_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020673 return WLAN_HAL_RMV_STAKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020674 case WDI_SET_STA_BCAST_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020675 return WLAN_HAL_SET_BCASTKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020676 case WDI_RMV_STA_BCAST_KEY_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020677 //Some conflict in the old code - check this: return WLAN_HAL_RMV_BCASTKEY_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020678 return WLAN_HAL_RMV_STAKEY_REQ;
20679 case WDI_ADD_TS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020680 return WLAN_HAL_ADD_TS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020681 case WDI_DEL_TS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020682 return WLAN_HAL_DEL_TS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020683 case WDI_UPD_EDCA_PRMS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020684 return WLAN_HAL_UPD_EDCA_PARAMS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020685 case WDI_ADD_BA_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020686 return WLAN_HAL_ADD_BA_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020687 case WDI_DEL_BA_REQ:
20688 return WLAN_HAL_DEL_BA_REQ;
20689#ifdef FEATURE_WLAN_CCX
20690 case WDI_TSM_STATS_REQ:
20691 return WLAN_HAL_TSM_STATS_REQ;
20692#endif
20693 case WDI_CH_SWITCH_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020694 return WLAN_HAL_CH_SWITCH_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020695 case WDI_CONFIG_STA_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020696 return WLAN_HAL_CONFIG_STA_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020697 case WDI_SET_LINK_ST_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020698 return WLAN_HAL_SET_LINK_ST_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020699 case WDI_GET_STATS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020700 return WLAN_HAL_GET_STATS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020701 case WDI_UPDATE_CFG_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020702 return WLAN_HAL_UPDATE_CFG_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020703 case WDI_ADD_BA_SESSION_REQ:
20704 return WLAN_HAL_ADD_BA_SESSION_REQ;
20705 case WDI_TRIGGER_BA_REQ:
20706 return WLAN_HAL_TRIGGER_BA_REQ;
20707 case WDI_UPD_BCON_PRMS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020708 return WLAN_HAL_UPDATE_BEACON_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020709 case WDI_SND_BCON_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020710 return WLAN_HAL_SEND_BEACON_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020711 case WDI_UPD_PROBE_RSP_TEMPLATE_REQ:
20712 return WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ;
20713 case WDI_SET_MAX_TX_POWER_REQ:
20714 return WLAN_HAL_SET_MAX_TX_POWER_REQ;
20715#ifdef WLAN_FEATURE_P2P
20716 case WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ:
20717 return WLAN_HAL_SET_P2P_GONOA_REQ;
20718#endif
20719 case WDI_ENTER_IMPS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020720 return WLAN_HAL_ENTER_IMPS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020721 case WDI_EXIT_IMPS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020722 return WLAN_HAL_EXIT_IMPS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020723 case WDI_ENTER_BMPS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020724 return WLAN_HAL_ENTER_BMPS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020725 case WDI_EXIT_BMPS_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020726 return WLAN_HAL_EXIT_BMPS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020727 case WDI_ENTER_UAPSD_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020728 return WLAN_HAL_ENTER_UAPSD_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020729 case WDI_EXIT_UAPSD_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020730 return WLAN_HAL_EXIT_UAPSD_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020731 case WDI_SET_UAPSD_PARAM_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020732 return WLAN_HAL_SET_UAPSD_AC_PARAMS_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020733 case WDI_UPDATE_UAPSD_PARAM_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020734 return WLAN_HAL_UPDATE_UAPSD_PARAM_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020735 case WDI_CONFIGURE_RXP_FILTER_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020736 return WLAN_HAL_CONFIGURE_RXP_FILTER_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020737 case WDI_SET_BEACON_FILTER_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020738 return WLAN_HAL_ADD_BCN_FILTER_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020739 case WDI_REM_BEACON_FILTER_REQ:
20740 return WLAN_HAL_REM_BCN_FILTER_REQ;
20741 case WDI_SET_RSSI_THRESHOLDS_REQ:
20742 return WLAN_HAL_SET_RSSI_THRESH_REQ;
20743 case WDI_HOST_OFFLOAD_REQ:
20744 return WLAN_HAL_HOST_OFFLOAD_REQ;
20745 case WDI_WOWL_ADD_BC_PTRN_REQ:
20746 return WLAN_HAL_ADD_WOWL_BCAST_PTRN;
20747 case WDI_WOWL_DEL_BC_PTRN_REQ:
20748 return WLAN_HAL_DEL_WOWL_BCAST_PTRN;
20749 case WDI_WOWL_ENTER_REQ:
20750 return WLAN_HAL_ENTER_WOWL_REQ;
20751 case WDI_WOWL_EXIT_REQ:
20752 return WLAN_HAL_EXIT_WOWL_REQ;
20753 case WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ:
20754 return WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ;
20755 case WDI_NV_DOWNLOAD_REQ:
20756 return WLAN_HAL_DOWNLOAD_NV_REQ;
20757 case WDI_FLUSH_AC_REQ:
20758 return WLAN_HAL_TL_HAL_FLUSH_AC_REQ;
20759 case WDI_BTAMP_EVENT_REQ:
20760 return WLAN_HAL_SIGNAL_BTAMP_EVENT_REQ;
20761#ifdef WLAN_FEATURE_VOWIFI_11R
20762 case WDI_AGGR_ADD_TS_REQ:
20763 return WLAN_HAL_AGGR_ADD_TS_REQ;
20764#endif /* WLAN_FEATURE_VOWIFI_11R */
20765#ifdef ANI_MANF_DIAG
20766 case WDI_FTM_CMD_REQ:
20767 return WLAN_HAL_PROCESS_PTT_REQ;
20768#endif /* ANI_MANF_DIAG */
20769 case WDI_ADD_STA_SELF_REQ:
20770 return WLAN_HAL_ADD_STA_SELF_REQ;
20771 case WDI_DEL_STA_SELF_REQ:
20772 return WLAN_HAL_DEL_STA_SELF_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070020773#ifdef FEATURE_OEM_DATA_SUPPORT
20774 case WDI_START_OEM_DATA_REQ:
20775 return WLAN_HAL_START_OEM_DATA_REQ;
20776#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070020777 case WDI_HOST_RESUME_REQ:
20778 return WLAN_HAL_HOST_RESUME_REQ;
20779 case WDI_HOST_SUSPEND_IND:
20780 return WLAN_HAL_HOST_SUSPEND_IND;
20781 case WDI_KEEP_ALIVE_REQ:
20782 return WLAN_HAL_KEEP_ALIVE_REQ;
20783
20784#ifdef FEATURE_WLAN_SCAN_PNO
20785 case WDI_SET_PREF_NETWORK_REQ:
20786 return WLAN_HAL_SET_PREF_NETWORK_REQ;
20787 case WDI_SET_RSSI_FILTER_REQ:
20788 return WLAN_HAL_SET_RSSI_FILTER_REQ;
20789 case WDI_UPDATE_SCAN_PARAMS_REQ:
20790 return WLAN_HAL_UPDATE_SCAN_PARAM_REQ;
20791#endif // FEATURE_WLAN_SCAN_PNO
20792 case WDI_SET_TX_PER_TRACKING_REQ:
20793 return WLAN_HAL_SET_TX_PER_TRACKING_REQ;
20794#ifdef WLAN_FEATURE_PACKET_FILTERING
20795 case WDI_8023_MULTICAST_LIST_REQ:
20796 return WLAN_HAL_8023_MULTICAST_LIST_REQ;
20797 case WDI_RECEIVE_FILTER_SET_FILTER_REQ:
Jeff Johnsone7245742012-09-05 17:12:55 -070020798 return WLAN_HAL_SET_PACKET_FILTER_REQ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020799 case WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
20800 return WLAN_HAL_PACKET_FILTER_MATCH_COUNT_REQ;
20801 case WDI_RECEIVE_FILTER_CLEAR_FILTER_REQ:
20802 return WLAN_HAL_CLEAR_PACKET_FILTER_REQ;
20803#endif // WLAN_FEATURE_PACKET_FILTERING
20804 case WDI_HAL_DUMP_CMD_REQ:
20805 return WLAN_HAL_DUMP_COMMAND_REQ;
20806#ifdef WLAN_FEATURE_GTK_OFFLOAD
20807 case WDI_GTK_OFFLOAD_REQ:
20808 return WLAN_HAL_GTK_OFFLOAD_REQ;
20809 case WDI_GTK_OFFLOAD_GETINFO_REQ:
20810 return WLAN_HAL_GTK_OFFLOAD_GETINFO_REQ;
20811#endif /* WLAN_FEATURE_GTK_OFFLOAD */
20812
20813 case WDI_INIT_SCAN_CON_REQ:
20814 return WLAN_HAL_INIT_SCAN_CON_REQ;
20815 case WDI_SET_POWER_PARAMS_REQ:
20816 return WLAN_HAL_SET_POWER_PARAMS_REQ;
20817 case WDI_SET_TM_LEVEL_REQ:
20818 return WLAN_HAL_SET_THERMAL_MITIGATION_REQ;
20819 case WDI_FEATURE_CAPS_EXCHANGE_REQ:
20820 return WLAN_HAL_FEATURE_CAPS_EXCHANGE_REQ;
Mohit Khanna4a70d262012-09-11 16:30:12 -070020821#ifdef WLAN_FEATURE_11AC
20822 case WDI_UPDATE_VHT_OP_MODE_REQ:
20823 return WLAN_HAL_UPDATE_VHT_OP_MODE_REQ;
20824#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070020825 default:
Jeff Johnsone7245742012-09-05 17:12:55 -070020826 return WLAN_HAL_MSG_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070020827 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020828
Jeff Johnson295189b2012-06-20 16:38:30 -070020829}/*WDI_2_HAL_REQ_TYPE*/
20830
20831/*Convert WDI response type into HAL response type*/
20832WPT_STATIC WPT_INLINE WDI_ResponseEnumType
20833HAL_2_WDI_RSP_TYPE
20834(
20835 tHalHostMsgType halMsg
20836)
20837{
Jeff Johnsone7245742012-09-05 17:12:55 -070020838 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070020839 the chances of getting inlined*/
20840 switch( halMsg )
20841 {
20842 case WLAN_HAL_START_RSP:
20843 return WDI_START_RESP;
20844 case WLAN_HAL_STOP_RSP:
20845 return WDI_STOP_RESP;
20846 case WLAN_HAL_INIT_SCAN_RSP:
20847 return WDI_INIT_SCAN_RESP;
20848 case WLAN_HAL_START_SCAN_RSP:
20849 return WDI_START_SCAN_RESP;
20850 case WLAN_HAL_END_SCAN_RSP:
20851 return WDI_END_SCAN_RESP;
20852 case WLAN_HAL_FINISH_SCAN_RSP:
20853 return WDI_FINISH_SCAN_RESP;
20854 case WLAN_HAL_CONFIG_STA_RSP:
20855 return WDI_CONFIG_STA_RESP;
20856 case WLAN_HAL_DELETE_STA_RSP:
20857 return WDI_DEL_STA_RESP;
20858 case WLAN_HAL_CONFIG_BSS_RSP:
20859 return WDI_CONFIG_BSS_RESP;
20860 case WLAN_HAL_DELETE_BSS_RSP:
20861 return WDI_DEL_BSS_RESP;
20862 case WLAN_HAL_JOIN_RSP:
20863 return WDI_JOIN_RESP;
20864 case WLAN_HAL_POST_ASSOC_RSP:
20865 return WDI_POST_ASSOC_RESP;
20866 case WLAN_HAL_SET_BSSKEY_RSP:
20867 return WDI_SET_BSS_KEY_RESP;
20868 case WLAN_HAL_SET_STAKEY_RSP:
20869 return WDI_SET_STA_KEY_RESP;
20870 case WLAN_HAL_RMV_BSSKEY_RSP:
20871 return WDI_RMV_BSS_KEY_RESP;
20872 case WLAN_HAL_RMV_STAKEY_RSP:
20873 return WDI_RMV_STA_KEY_RESP;
20874 case WLAN_HAL_SET_BCASTKEY_RSP:
20875 return WDI_SET_STA_BCAST_KEY_RESP;
20876 //Some conflict in the old code - check this: case WLAN_HAL_RMV_BCASTKEY_RSP:
20877 // return WDI_RMV_STA_BCAST_KEY_RESP;
20878 case WLAN_HAL_ADD_TS_RSP:
20879 return WDI_ADD_TS_RESP;
20880 case WLAN_HAL_DEL_TS_RSP:
20881 return WDI_DEL_TS_RESP;
20882 case WLAN_HAL_UPD_EDCA_PARAMS_RSP:
20883 return WDI_UPD_EDCA_PRMS_RESP;
20884 case WLAN_HAL_ADD_BA_RSP:
20885 return WDI_ADD_BA_RESP;
20886 case WLAN_HAL_DEL_BA_RSP:
20887 return WDI_DEL_BA_RESP;
20888#ifdef FEATURE_WLAN_CCX
20889 case WLAN_HAL_TSM_STATS_RSP:
20890 return WDI_TSM_STATS_RESP;
20891#endif
20892 case WLAN_HAL_CH_SWITCH_RSP:
20893 return WDI_CH_SWITCH_RESP;
20894 case WLAN_HAL_SET_LINK_ST_RSP:
20895 return WDI_SET_LINK_ST_RESP;
20896 case WLAN_HAL_GET_STATS_RSP:
20897 return WDI_GET_STATS_RESP;
20898 case WLAN_HAL_UPDATE_CFG_RSP:
20899 return WDI_UPDATE_CFG_RESP;
20900 case WLAN_HAL_ADD_BA_SESSION_RSP:
20901 return WDI_ADD_BA_SESSION_RESP;
20902 case WLAN_HAL_TRIGGER_BA_RSP:
20903 return WDI_TRIGGER_BA_RESP;
20904 case WLAN_HAL_UPDATE_BEACON_RSP:
20905 return WDI_UPD_BCON_PRMS_RESP;
20906 case WLAN_HAL_SEND_BEACON_RSP:
20907 return WDI_SND_BCON_RESP;
20908 case WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP:
20909 return WDI_UPD_PROBE_RSP_TEMPLATE_RESP;
20910 /*Indications*/
20911 case WLAN_HAL_RSSI_NOTIFICATION_IND:
20912 return WDI_HAL_RSSI_NOTIFICATION_IND;
20913 case WLAN_HAL_MISSED_BEACON_IND:
20914 return WDI_HAL_MISSED_BEACON_IND;
20915 case WLAN_HAL_UNKNOWN_ADDR2_FRAME_RX_IND:
20916 return WDI_HAL_UNKNOWN_ADDR2_FRAME_RX_IND;
20917 case WLAN_HAL_MIC_FAILURE_IND:
20918 return WDI_HAL_MIC_FAILURE_IND;
20919 case WLAN_HAL_FATAL_ERROR_IND:
20920 return WDI_HAL_FATAL_ERROR_IND;
20921 case WLAN_HAL_DELETE_STA_CONTEXT_IND:
20922 return WDI_HAL_DEL_STA_IND;
20923 case WLAN_HAL_COEX_IND:
20924 return WDI_HAL_COEX_IND;
20925 case WLAN_HAL_OTA_TX_COMPL_IND:
20926 return WDI_HAL_TX_COMPLETE_IND;
20927#ifdef WLAN_FEATURE_P2P
20928 case WLAN_HAL_P2P_NOA_ATTR_IND:
20929 return WDI_HAL_P2P_NOA_ATTR_IND;
20930#endif
20931 case WLAN_HAL_TX_PER_HIT_IND:
20932 return WDI_HAL_TX_PER_HIT_IND;
20933 case WLAN_HAL_SET_MAX_TX_POWER_RSP:
20934 return WDI_SET_MAX_TX_POWER_RESP;
20935#ifdef WLAN_FEATURE_P2P
20936 case WLAN_HAL_SET_P2P_GONOA_RSP:
20937 return WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP;
20938#endif
20939 case WLAN_HAL_ENTER_IMPS_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020940 return WDI_ENTER_IMPS_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020941 case WLAN_HAL_EXIT_IMPS_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020942 return WDI_EXIT_IMPS_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020943 case WLAN_HAL_ENTER_BMPS_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020944 return WDI_ENTER_BMPS_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020945 case WLAN_HAL_EXIT_BMPS_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020946 return WDI_EXIT_BMPS_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020947 case WLAN_HAL_ENTER_UAPSD_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020948 return WDI_ENTER_UAPSD_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020949 case WLAN_HAL_EXIT_UAPSD_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020950 return WDI_EXIT_UAPSD_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020951 case WLAN_HAL_SET_UAPSD_AC_PARAMS_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020952 return WDI_SET_UAPSD_PARAM_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020953 case WLAN_HAL_UPDATE_UAPSD_PARAM_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020954 return WDI_UPDATE_UAPSD_PARAM_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020955 case WLAN_HAL_CONFIGURE_RXP_FILTER_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070020956 return WDI_CONFIGURE_RXP_FILTER_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070020957 case WLAN_HAL_ADD_BCN_FILTER_RSP:
20958 return WDI_SET_BEACON_FILTER_RESP;
20959 case WLAN_HAL_REM_BCN_FILTER_RSP:
20960 return WDI_REM_BEACON_FILTER_RESP;
20961 case WLAN_HAL_SET_RSSI_THRESH_RSP:
20962 return WDI_SET_RSSI_THRESHOLDS_RESP;
20963 case WLAN_HAL_HOST_OFFLOAD_RSP:
20964 return WDI_HOST_OFFLOAD_RESP;
20965 case WLAN_HAL_ADD_WOWL_BCAST_PTRN_RSP:
20966 return WDI_WOWL_ADD_BC_PTRN_RESP;
20967 case WLAN_HAL_DEL_WOWL_BCAST_PTRN_RSP:
20968 return WDI_WOWL_DEL_BC_PTRN_RESP;
20969 case WLAN_HAL_ENTER_WOWL_RSP:
20970 return WDI_WOWL_ENTER_RESP;
20971 case WLAN_HAL_EXIT_WOWL_RSP:
20972 return WDI_WOWL_EXIT_RESP;
20973 case WLAN_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP:
20974 return WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_RESP;
20975 case WLAN_HAL_DOWNLOAD_NV_RSP:
20976 return WDI_NV_DOWNLOAD_RESP;
20977 case WLAN_HAL_TL_HAL_FLUSH_AC_RSP:
20978 return WDI_FLUSH_AC_RESP;
20979 case WLAN_HAL_SIGNAL_BTAMP_EVENT_RSP:
20980 return WDI_BTAMP_EVENT_RESP;
20981#ifdef ANI_MANF_DIAG
20982 case WLAN_HAL_PROCESS_PTT_RSP:
20983 return WDI_FTM_CMD_RESP;
20984#endif /* ANI_MANF_DIAG */
20985 case WLAN_HAL_ADD_STA_SELF_RSP:
20986 return WDI_ADD_STA_SELF_RESP;
20987case WLAN_HAL_DEL_STA_SELF_RSP:
20988 return WDI_DEL_STA_SELF_RESP;
Jeff Johnsone7245742012-09-05 17:12:55 -070020989#ifdef FEATURE_OEM_DATA_SUPPORT
20990 case WLAN_HAL_START_OEM_DATA_RSP:
20991 return WDI_START_OEM_DATA_RESP;
20992#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070020993 case WLAN_HAL_HOST_RESUME_RSP:
20994 return WDI_HOST_RESUME_RESP;
20995 case WLAN_HAL_KEEP_ALIVE_RSP:
20996 return WDI_KEEP_ALIVE_RESP;
20997#ifdef FEATURE_WLAN_SCAN_PNO
20998 case WLAN_HAL_SET_PREF_NETWORK_RSP:
20999 return WDI_SET_PREF_NETWORK_RESP;
21000 case WLAN_HAL_SET_RSSI_FILTER_RSP:
Jeff Johnsone7245742012-09-05 17:12:55 -070021001 return WDI_SET_RSSI_FILTER_RESP;
Jeff Johnson295189b2012-06-20 16:38:30 -070021002 case WLAN_HAL_UPDATE_SCAN_PARAM_RSP:
21003 return WDI_UPDATE_SCAN_PARAMS_RESP;
21004 case WLAN_HAL_PREF_NETW_FOUND_IND:
21005 return WDI_HAL_PREF_NETWORK_FOUND_IND;
21006#endif // FEATURE_WLAN_SCAN_PNO
21007 case WLAN_HAL_SET_TX_PER_TRACKING_RSP:
21008 return WDI_SET_TX_PER_TRACKING_RESP;
21009#ifdef WLAN_FEATURE_PACKET_FILTERING
21010 case WLAN_HAL_8023_MULTICAST_LIST_RSP:
21011 return WDI_8023_MULTICAST_LIST_RESP;
21012 case WLAN_HAL_SET_PACKET_FILTER_RSP:
21013 return WDI_RECEIVE_FILTER_SET_FILTER_RESP;
21014 case WLAN_HAL_PACKET_FILTER_MATCH_COUNT_RSP:
21015 return WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_RESP;
21016 case WLAN_HAL_CLEAR_PACKET_FILTER_RSP:
21017 return WDI_RECEIVE_FILTER_CLEAR_FILTER_RESP;
21018#endif // WLAN_FEATURE_PACKET_FILTERING
21019
21020 case WLAN_HAL_DUMP_COMMAND_RSP:
21021 return WDI_HAL_DUMP_CMD_RESP;
21022 case WLAN_HAL_SET_POWER_PARAMS_RSP:
21023 return WDI_SET_POWER_PARAMS_RESP;
21024#ifdef WLAN_FEATURE_VOWIFI_11R
21025 case WLAN_HAL_AGGR_ADD_TS_RSP:
21026 return WDI_AGGR_ADD_TS_RESP;
21027#endif
21028
21029#ifdef WLAN_FEATURE_GTK_OFFLOAD
21030 case WLAN_HAL_GTK_OFFLOAD_RSP:
21031 return WDI_GTK_OFFLOAD_RESP;
21032 case WLAN_HAL_GTK_OFFLOAD_GETINFO_RSP:
21033 return WDI_GTK_OFFLOAD_GETINFO_RESP;
21034#endif /* WLAN_FEATURE_GTK_OFFLOAD */
21035#ifdef WLAN_WAKEUP_EVENTS
21036 case WLAN_HAL_WAKE_REASON_IND:
21037 return WDI_HAL_WAKE_REASON_IND;
21038#endif // WLAN_WAKEUP_EVENTS
21039
21040 case WLAN_HAL_SET_THERMAL_MITIGATION_RSP:
21041 return WDI_SET_TM_LEVEL_RESP;
21042 case WLAN_HAL_FEATURE_CAPS_EXCHANGE_RSP:
21043 return WDI_FEATURE_CAPS_EXCHANGE_RESP;
Mohit Khanna4a70d262012-09-11 16:30:12 -070021044#ifdef WLAN_FEATURE_11AC
21045 case WLAN_HAL_UPDATE_VHT_OP_MODE_RSP:
21046 return WDI_UPDATE_VHT_OP_MODE_RESP;
21047#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070021048 default:
Jeff Johnsone7245742012-09-05 17:12:55 -070021049 return eDRIVER_TYPE_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070021050 }
21051
21052}/*HAL_2_WDI_RSP_TYPE*/
21053
21054
21055/*Convert WDI driver type into HAL driver type*/
21056WPT_STATIC WPT_INLINE tDriverType
21057WDI_2_HAL_DRV_TYPE
21058(
21059 WDI_DriverType wdiDriverType
21060)
21061{
Jeff Johnsone7245742012-09-05 17:12:55 -070021062 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021063 the chances of getting inlined*/
21064 switch( wdiDriverType )
21065 {
21066 case WDI_DRIVER_TYPE_PRODUCTION:
21067 return eDRIVER_TYPE_PRODUCTION;
21068 case WDI_DRIVER_TYPE_MFG:
21069 return eDRIVER_TYPE_MFG;
21070 case WDI_DRIVER_TYPE_DVT:
21071 return eDRIVER_TYPE_DVT;
21072 }
21073
Jeff Johnsone7245742012-09-05 17:12:55 -070021074 return eDRIVER_TYPE_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070021075}/*WDI_2_HAL_DRV_TYPE*/
21076
21077
21078/*Convert WDI stop reason into HAL stop reason*/
21079WPT_STATIC WPT_INLINE tHalStopType
21080WDI_2_HAL_STOP_REASON
21081(
21082 WDI_StopType wdiDriverType
21083)
21084{
Jeff Johnsone7245742012-09-05 17:12:55 -070021085 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021086 the chances of getting inlined*/
21087 switch( wdiDriverType )
21088 {
21089 case WDI_STOP_TYPE_SYS_RESET:
21090 return HAL_STOP_TYPE_SYS_RESET;
21091 case WDI_DRIVER_TYPE_MFG:
21092 return WDI_STOP_TYPE_SYS_DEEP_SLEEP;
21093 case WDI_STOP_TYPE_RF_KILL:
21094 return HAL_STOP_TYPE_RF_KILL;
21095 }
21096
Jeff Johnsone7245742012-09-05 17:12:55 -070021097 return HAL_STOP_TYPE_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070021098}/*WDI_2_HAL_STOP_REASON*/
21099
21100
21101/*Convert WDI scan mode type into HAL scan mode type*/
21102WPT_STATIC WPT_INLINE eHalSysMode
21103WDI_2_HAL_SCAN_MODE
21104(
21105 WDI_ScanMode wdiScanMode
21106)
21107{
Jeff Johnsone7245742012-09-05 17:12:55 -070021108 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021109 the chances of getting inlined*/
21110 switch( wdiScanMode )
21111 {
21112 case WDI_SCAN_MODE_NORMAL:
21113 return eHAL_SYS_MODE_NORMAL;
21114 case WDI_SCAN_MODE_LEARN:
21115 return eHAL_SYS_MODE_LEARN;
21116 case WDI_SCAN_MODE_SCAN:
21117 return eHAL_SYS_MODE_SCAN;
21118 case WDI_SCAN_MODE_PROMISC:
21119 return eHAL_SYS_MODE_PROMISC;
21120 case WDI_SCAN_MODE_SUSPEND_LINK:
21121 return eHAL_SYS_MODE_SUSPEND_LINK;
Madan Mohan Koyyalamudi9b876782012-10-11 16:22:51 -070021122 case WDI_SCAN_MODE_ROAM_SCAN:
21123 return eHAL_SYS_MODE_ROAM_SCAN;
21124 case WDI_SCAN_MODE_ROAM_SUSPEND_LINK:
21125 return eHAL_SYS_MODE_ROAM_SUSPEND_LINK;
Jeff Johnson295189b2012-06-20 16:38:30 -070021126 }
21127
Jeff Johnsone7245742012-09-05 17:12:55 -070021128 return eHAL_SYS_MODE_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070021129}/*WDI_2_HAL_SCAN_MODE*/
21130
21131/*Convert WDI sec ch offset into HAL sec ch offset type*/
Jeff Johnsone7245742012-09-05 17:12:55 -070021132WPT_STATIC WPT_INLINE ePhyChanBondState
Jeff Johnson295189b2012-06-20 16:38:30 -070021133WDI_2_HAL_SEC_CH_OFFSET
21134(
21135 WDI_HTSecondaryChannelOffset wdiSecChOffset
21136)
21137{
Jeff Johnsone7245742012-09-05 17:12:55 -070021138 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021139 the chances of getting inlined*/
21140 switch( wdiSecChOffset )
21141 {
21142 case WDI_SECONDARY_CHANNEL_OFFSET_NONE:
Jeff Johnsone7245742012-09-05 17:12:55 -070021143 return PHY_SINGLE_CHANNEL_CENTERED;
Jeff Johnson295189b2012-06-20 16:38:30 -070021144 case WDI_SECONDARY_CHANNEL_OFFSET_UP:
Jeff Johnsone7245742012-09-05 17:12:55 -070021145 return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
Jeff Johnson295189b2012-06-20 16:38:30 -070021146 case WDI_SECONDARY_CHANNEL_OFFSET_DOWN:
Jeff Johnsone7245742012-09-05 17:12:55 -070021147 return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
21148#ifdef WLAN_FEATURE_11AC
21149 case WDI_CHANNEL_20MHZ_LOW_40MHZ_CENTERED:
21150 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED;
21151 case WDI_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED:
21152 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED;
21153 case WDI_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED:
21154 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED;
21155 case WDI_CHANNEL_20MHZ_LOW_40MHZ_LOW:
21156 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW;
21157 case WDI_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
21158 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW;
21159 case WDI_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
21160 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH;
21161 case WDI_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
21162 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH;
21163#endif
21164 default:
21165 break;
Jeff Johnson295189b2012-06-20 16:38:30 -070021166 }
21167
Jeff Johnsone7245742012-09-05 17:12:55 -070021168 return PHY_CHANNEL_BONDING_STATE_MAX;
Jeff Johnson295189b2012-06-20 16:38:30 -070021169}/*WDI_2_HAL_SEC_CH_OFFSET*/
21170
21171/*Convert WDI BSS type into HAL BSS type*/
21172WPT_STATIC WPT_INLINE tSirBssType
21173WDI_2_HAL_BSS_TYPE
21174(
21175 WDI_BssType wdiBSSType
21176)
21177{
Jeff Johnsone7245742012-09-05 17:12:55 -070021178 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021179 the chances of getting inlined*/
21180 switch( wdiBSSType )
21181 {
21182 case WDI_INFRASTRUCTURE_MODE:
21183 return eSIR_INFRASTRUCTURE_MODE;
21184 case WDI_INFRA_AP_MODE:
21185 return eSIR_INFRA_AP_MODE;
21186 case WDI_IBSS_MODE:
21187 return eSIR_IBSS_MODE;
21188 case WDI_BTAMP_STA_MODE:
21189 return eSIR_BTAMP_STA_MODE;
21190 case WDI_BTAMP_AP_MODE:
Jeff Johnsone7245742012-09-05 17:12:55 -070021191 return eSIR_BTAMP_AP_MODE;
Jeff Johnson295189b2012-06-20 16:38:30 -070021192 case WDI_BSS_AUTO_MODE:
21193 return eSIR_AUTO_MODE;
21194 }
21195
Jeff Johnsone7245742012-09-05 17:12:55 -070021196 return eSIR_DONOT_USE_BSS_TYPE;
Jeff Johnson295189b2012-06-20 16:38:30 -070021197}/*WDI_2_HAL_BSS_TYPE*/
21198
21199/*Convert WDI NW type into HAL NW type*/
21200WPT_STATIC WPT_INLINE tSirNwType
21201WDI_2_HAL_NW_TYPE
21202(
21203 WDI_NwType wdiNWType
21204)
21205{
Jeff Johnsone7245742012-09-05 17:12:55 -070021206 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021207 the chances of getting inlined*/
21208 switch( wdiNWType )
21209 {
21210 case WDI_11A_NW_TYPE:
21211 return eSIR_11A_NW_TYPE;
21212 case WDI_11B_NW_TYPE:
21213 return eSIR_11B_NW_TYPE;
21214 case WDI_11G_NW_TYPE:
21215 return eSIR_11G_NW_TYPE;
21216 case WDI_11N_NW_TYPE:
21217 return eSIR_11N_NW_TYPE;
21218 }
21219
Jeff Johnsone7245742012-09-05 17:12:55 -070021220 return eSIR_DONOT_USE_NW_TYPE;
Jeff Johnson295189b2012-06-20 16:38:30 -070021221}/*WDI_2_HAL_NW_TYPE*/
21222
21223/*Convert WDI chanel bonding type into HAL cb type*/
21224WPT_STATIC WPT_INLINE ePhyChanBondState
21225WDI_2_HAL_CB_STATE
21226(
21227 WDI_PhyChanBondState wdiCbState
21228)
21229{
Jeff Johnsone7245742012-09-05 17:12:55 -070021230 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021231 the chances of getting inlined*/
21232 switch ( wdiCbState )
21233 {
21234 case WDI_PHY_SINGLE_CHANNEL_CENTERED:
21235 return PHY_SINGLE_CHANNEL_CENTERED;
21236 case WDI_PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
21237 return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
21238 case WDI_PHY_DOUBLE_CHANNEL_CENTERED:
21239 return PHY_DOUBLE_CHANNEL_CENTERED;
21240 case WDI_PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
21241 return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
Jeff Johnsone7245742012-09-05 17:12:55 -070021242#ifdef WLAN_FEATURE_11AC
21243 case WDI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED:
21244 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED;
21245 case WDI_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED:
21246 return PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED;
21247 case WDI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED:
21248 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED;
21249 case WDI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
21250 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW;
21251 case WDI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
21252 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW;
21253 case WDI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
21254 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH;
21255 case WDI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
21256 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH;
21257#endif
21258 case WDI_MAX_CB_STATE:
21259 default:
21260 break;
Jeff Johnson295189b2012-06-20 16:38:30 -070021261 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021262
Jeff Johnson295189b2012-06-20 16:38:30 -070021263 return PHY_CHANNEL_BONDING_STATE_MAX;
21264}/*WDI_2_HAL_CB_STATE*/
21265
21266/*Convert WDI chanel bonding type into HAL cb type*/
21267WPT_STATIC WPT_INLINE tSirMacHTOperatingMode
21268WDI_2_HAL_HT_OPER_MODE
21269(
21270 WDI_HTOperatingMode wdiHTOperMode
21271)
21272{
Jeff Johnsone7245742012-09-05 17:12:55 -070021273 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021274 the chances of getting inlined*/
21275 switch ( wdiHTOperMode )
21276 {
21277 case WDI_HT_OP_MODE_PURE:
21278 return eSIR_HT_OP_MODE_PURE;
21279 case WDI_HT_OP_MODE_OVERLAP_LEGACY:
21280 return eSIR_HT_OP_MODE_OVERLAP_LEGACY;
21281 case WDI_HT_OP_MODE_NO_LEGACY_20MHZ_HT:
21282 return eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT;
21283 case WDI_HT_OP_MODE_MIXED:
21284 return eSIR_HT_OP_MODE_MIXED;
21285 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021286
Jeff Johnson295189b2012-06-20 16:38:30 -070021287 return eSIR_HT_OP_MODE_MAX;
21288}/*WDI_2_HAL_HT_OPER_MODE*/
21289
21290/*Convert WDI mimo PS type into HAL mimo PS type*/
21291WPT_STATIC WPT_INLINE tSirMacHTMIMOPowerSaveState
21292WDI_2_HAL_MIMO_PS
21293(
21294 WDI_HTMIMOPowerSaveState wdiHTOperMode
21295)
21296{
Jeff Johnsone7245742012-09-05 17:12:55 -070021297 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021298 the chances of getting inlined*/
21299 switch ( wdiHTOperMode )
21300 {
21301 case WDI_HT_MIMO_PS_STATIC:
21302 return eSIR_HT_MIMO_PS_STATIC;
21303 case WDI_HT_MIMO_PS_DYNAMIC:
21304 return eSIR_HT_MIMO_PS_DYNAMIC;
21305 case WDI_HT_MIMO_PS_NA:
21306 return eSIR_HT_MIMO_PS_NA;
21307 case WDI_HT_MIMO_PS_NO_LIMIT:
21308 return eSIR_HT_MIMO_PS_NO_LIMIT;
21309 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021310
Jeff Johnson295189b2012-06-20 16:38:30 -070021311 return eSIR_HT_MIMO_PS_MAX;
21312}/*WDI_2_HAL_MIMO_PS*/
21313
21314/*Convert WDI ENC type into HAL ENC type*/
21315WPT_STATIC WPT_INLINE tAniEdType
21316WDI_2_HAL_ENC_TYPE
21317(
21318 WDI_EncryptType wdiEncType
21319)
21320{
Jeff Johnsone7245742012-09-05 17:12:55 -070021321 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021322 the chances of getting inlined*/
21323 switch ( wdiEncType )
21324 {
21325 case WDI_ENCR_NONE:
21326 return eSIR_ED_NONE;
21327
21328 case WDI_ENCR_WEP40:
21329 return eSIR_ED_WEP40;
21330
21331 case WDI_ENCR_WEP104:
21332 return eSIR_ED_WEP104;
21333
21334 case WDI_ENCR_TKIP:
21335 return eSIR_ED_TKIP;
21336
21337 case WDI_ENCR_CCMP:
21338 return eSIR_ED_CCMP;
21339
21340 case WDI_ENCR_AES_128_CMAC:
21341 return eSIR_ED_AES_128_CMAC;
21342#if defined(FEATURE_WLAN_WAPI)
21343 case WDI_ENCR_WPI:
21344 return eSIR_ED_WPI;
21345#endif
21346 default:
21347 return eSIR_ED_NOT_IMPLEMENTED;
21348 }
21349
21350}/*WDI_2_HAL_ENC_TYPE*/
21351
21352/*Convert WDI WEP type into HAL WEP type*/
21353WPT_STATIC WPT_INLINE tAniWepType
21354WDI_2_HAL_WEP_TYPE
21355(
21356 WDI_WepType wdiWEPType
21357)
21358{
Jeff Johnsone7245742012-09-05 17:12:55 -070021359 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021360 the chances of getting inlined*/
21361 switch ( wdiWEPType )
21362 {
21363 case WDI_WEP_STATIC:
21364 return eSIR_WEP_STATIC;
21365
21366 case WDI_WEP_DYNAMIC:
21367 return eSIR_WEP_DYNAMIC;
21368 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021369
Jeff Johnson295189b2012-06-20 16:38:30 -070021370 return eSIR_WEP_MAX;
21371}/*WDI_2_HAL_WEP_TYPE*/
21372
21373WPT_STATIC WPT_INLINE tSirLinkState
21374WDI_2_HAL_LINK_STATE
21375(
21376 WDI_LinkStateType wdiLinkState
21377)
21378{
Jeff Johnsone7245742012-09-05 17:12:55 -070021379 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021380 the chances of getting inlined*/
21381 switch ( wdiLinkState )
21382 {
21383 case WDI_LINK_IDLE_STATE:
21384 return eSIR_LINK_IDLE_STATE;
21385
21386 case WDI_LINK_PREASSOC_STATE:
21387 return eSIR_LINK_PREASSOC_STATE;
21388
21389 case WDI_LINK_POSTASSOC_STATE:
21390 return eSIR_LINK_POSTASSOC_STATE;
21391
21392 case WDI_LINK_AP_STATE:
21393 return eSIR_LINK_AP_STATE;
21394
21395 case WDI_LINK_IBSS_STATE:
21396 return eSIR_LINK_IBSS_STATE;
21397
21398 case WDI_LINK_BTAMP_PREASSOC_STATE:
21399 return eSIR_LINK_BTAMP_PREASSOC_STATE;
21400
21401 case WDI_LINK_BTAMP_POSTASSOC_STATE:
21402 return eSIR_LINK_BTAMP_POSTASSOC_STATE;
21403
21404 case WDI_LINK_BTAMP_AP_STATE:
21405 return eSIR_LINK_BTAMP_AP_STATE;
21406
21407 case WDI_LINK_BTAMP_STA_STATE:
21408 return eSIR_LINK_BTAMP_STA_STATE;
21409
21410 case WDI_LINK_LEARN_STATE:
21411 return eSIR_LINK_LEARN_STATE;
21412
21413 case WDI_LINK_SCAN_STATE:
21414 return eSIR_LINK_SCAN_STATE;
21415
21416 case WDI_LINK_FINISH_SCAN_STATE:
21417 return eSIR_LINK_FINISH_SCAN_STATE;
21418
21419 case WDI_LINK_INIT_CAL_STATE:
21420 return eSIR_LINK_INIT_CAL_STATE;
21421
21422 case WDI_LINK_FINISH_CAL_STATE:
21423 return eSIR_LINK_FINISH_CAL_STATE;
21424
21425#ifdef WLAN_FEATURE_P2P
21426 case WDI_LINK_LISTEN_STATE:
21427 return eSIR_LINK_LISTEN_STATE;
21428#endif
21429
21430 default:
21431 return eSIR_LINK_MAX;
Jeff Johnsone7245742012-09-05 17:12:55 -070021432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021433}
21434
Jeff Johnsone7245742012-09-05 17:12:55 -070021435/*Translate a STA Context from WDI into HAL*/
21436WPT_STATIC WPT_INLINE
Jeff Johnson295189b2012-06-20 16:38:30 -070021437void
21438WDI_CopyWDIStaCtxToHALStaCtx
Jeff Johnsone7245742012-09-05 17:12:55 -070021439(
Jeff Johnson295189b2012-06-20 16:38:30 -070021440 tConfigStaParams* phalConfigSta,
21441 WDI_ConfigStaReqInfoType* pwdiConfigSta
21442)
21443{
21444 wpt_uint8 i;
Jeff Johnsone7245742012-09-05 17:12:55 -070021445#ifdef WLAN_FEATURE_11AC
21446 /* Get the Version 1 Handler */
21447 tConfigStaParams_V1* phalConfigSta_V1 = NULL;
21448 if (WDI_getFwWlanFeatCaps(DOT11AC))
21449 {
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070021450 phalConfigSta_V1 = (tConfigStaParams_V1*)phalConfigSta;
Jeff Johnsone7245742012-09-05 17:12:55 -070021451 }
21452#endif
21453 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021454 the chances of getting inlined*/
21455
Jeff Johnsone7245742012-09-05 17:12:55 -070021456 wpalMemoryCopy(phalConfigSta->bssId,
21457 pwdiConfigSta->macBSSID, WDI_MAC_ADDR_LEN);
21458
21459 wpalMemoryCopy(phalConfigSta->staMac,
21460 pwdiConfigSta->macSTA, WDI_MAC_ADDR_LEN);
Jeff Johnson295189b2012-06-20 16:38:30 -070021461
21462 phalConfigSta->assocId = pwdiConfigSta->usAssocId;
21463 phalConfigSta->staType = pwdiConfigSta->wdiSTAType;
21464 phalConfigSta->shortPreambleSupported = pwdiConfigSta->ucShortPreambleSupported;
21465 phalConfigSta->listenInterval = pwdiConfigSta->usListenInterval;
21466 phalConfigSta->wmmEnabled = pwdiConfigSta->ucWMMEnabled;
21467 phalConfigSta->htCapable = pwdiConfigSta->ucHTCapable;
21468 phalConfigSta->txChannelWidthSet = pwdiConfigSta->ucTXChannelWidthSet;
21469 phalConfigSta->rifsMode = pwdiConfigSta->ucRIFSMode;
21470 phalConfigSta->lsigTxopProtection = pwdiConfigSta->ucLSIGTxopProtection;
21471 phalConfigSta->maxAmpduSize = pwdiConfigSta->ucMaxAmpduSize;
21472 phalConfigSta->maxAmpduDensity = pwdiConfigSta->ucMaxAmpduDensity;
21473 phalConfigSta->maxAmsduSize = pwdiConfigSta->ucMaxAmsduSize;
21474 phalConfigSta->fShortGI40Mhz = pwdiConfigSta->ucShortGI40Mhz;
21475 phalConfigSta->fShortGI20Mhz = pwdiConfigSta->ucShortGI20Mhz;
21476 phalConfigSta->rmfEnabled = pwdiConfigSta->ucRMFEnabled;
21477 phalConfigSta->action = pwdiConfigSta->wdiAction;
21478 phalConfigSta->uAPSD = pwdiConfigSta->ucAPSD;
21479 phalConfigSta->maxSPLen = pwdiConfigSta->ucMaxSPLen;
21480 phalConfigSta->greenFieldCapable = pwdiConfigSta->ucGreenFieldCapable;
21481 phalConfigSta->delayedBASupport = pwdiConfigSta->ucDelayedBASupport;
21482 phalConfigSta->us32MaxAmpduDuration = pwdiConfigSta->us32MaxAmpduDuratio;
21483 phalConfigSta->fDsssCckMode40Mhz = pwdiConfigSta->ucDsssCckMode40Mhz;
21484 phalConfigSta->encryptType = pwdiConfigSta->ucEncryptType;
Jeff Johnsone7245742012-09-05 17:12:55 -070021485
Jeff Johnson295189b2012-06-20 16:38:30 -070021486 phalConfigSta->mimoPS = WDI_2_HAL_MIMO_PS(pwdiConfigSta->wdiMIMOPS);
21487
Jeff Johnsone7245742012-09-05 17:12:55 -070021488 phalConfigSta->supportedRates.opRateMode =
Jeff Johnson295189b2012-06-20 16:38:30 -070021489 pwdiConfigSta->wdiSupportedRates.opRateMode;
21490 for(i = 0; i < SIR_NUM_11B_RATES; i ++)
21491 {
Jeff Johnsone7245742012-09-05 17:12:55 -070021492 phalConfigSta->supportedRates.llbRates[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -070021493 pwdiConfigSta->wdiSupportedRates.llbRates[i];
21494 }
21495 for(i = 0; i < SIR_NUM_11A_RATES; i ++)
21496 {
Jeff Johnsone7245742012-09-05 17:12:55 -070021497 phalConfigSta->supportedRates.llaRates[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -070021498 pwdiConfigSta->wdiSupportedRates.llaRates[i];
21499 }
21500 for(i = 0; i < SIR_NUM_POLARIS_RATES; i ++)
21501 {
21502 phalConfigSta->supportedRates.aniLegacyRates[i] =
21503 pwdiConfigSta->wdiSupportedRates.aLegacyRates[i];
21504 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021505 phalConfigSta->supportedRates.aniEnhancedRateBitmap =
Jeff Johnson295189b2012-06-20 16:38:30 -070021506 pwdiConfigSta->wdiSupportedRates.uEnhancedRateBitmap;
21507 for(i = 0; i < SIR_MAC_MAX_SUPPORTED_MCS_SET; i ++)
21508 {
Jeff Johnsone7245742012-09-05 17:12:55 -070021509 phalConfigSta->supportedRates.supportedMCSSet[i] =
Jeff Johnson295189b2012-06-20 16:38:30 -070021510 pwdiConfigSta->wdiSupportedRates.aSupportedMCSSet[i];
21511 }
21512 phalConfigSta->supportedRates.rxHighestDataRate =
21513 pwdiConfigSta->wdiSupportedRates.aRxHighestDataRate;
21514
Jeff Johnsone7245742012-09-05 17:12:55 -070021515#ifdef WLAN_FEATURE_11AC
21516 if(phalConfigSta_V1 != NULL)
21517 {
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070021518 phalConfigSta_V1->supportedRates.vhtRxMCSMap = pwdiConfigSta->wdiSupportedRates.vhtRxMCSMap;
21519 phalConfigSta_V1->supportedRates.vhtRxHighestDataRate = pwdiConfigSta->wdiSupportedRates.vhtRxHighestDataRate;
21520 phalConfigSta_V1->supportedRates.vhtTxMCSMap = pwdiConfigSta->wdiSupportedRates.vhtTxMCSMap;
21521 phalConfigSta_V1->supportedRates.vhtTxHighestDataRate = pwdiConfigSta->wdiSupportedRates.vhtTxHighestDataRate;
Jeff Johnsone7245742012-09-05 17:12:55 -070021522 }
21523#endif
21524
Jeff Johnson295189b2012-06-20 16:38:30 -070021525#ifdef WLAN_FEATURE_P2P
21526 phalConfigSta->p2pCapableSta = pwdiConfigSta->ucP2pCapableSta ;
21527#endif
21528
Jeff Johnsone7245742012-09-05 17:12:55 -070021529#ifdef WLAN_FEATURE_11AC
21530 if(phalConfigSta_V1 != NULL)
21531 {
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070021532 phalConfigSta_V1->vhtCapable = pwdiConfigSta->ucVhtCapableSta;
21533 phalConfigSta_V1->vhtTxChannelWidthSet = pwdiConfigSta->ucVhtTxChannelWidthSet;
Jeff Johnsone7245742012-09-05 17:12:55 -070021534 }
21535#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070021536}/*WDI_CopyWDIStaCtxToHALStaCtx*/;
Jeff Johnsone7245742012-09-05 17:12:55 -070021537
21538/*Translate a Rate set info from WDI into HAL*/
21539WPT_STATIC WPT_INLINE void
Jeff Johnson295189b2012-06-20 16:38:30 -070021540WDI_CopyWDIRateSetToHALRateSet
Jeff Johnsone7245742012-09-05 17:12:55 -070021541(
Jeff Johnson295189b2012-06-20 16:38:30 -070021542 tSirMacRateSet* pHalRateSet,
21543 WDI_RateSet* pwdiRateSet
21544)
21545{
Jeff Johnsone7245742012-09-05 17:12:55 -070021546 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070021547 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
21548
21549 pHalRateSet->numRates = ( pwdiRateSet->ucNumRates <= SIR_MAC_RATESET_EID_MAX )?
21550 pwdiRateSet->ucNumRates:SIR_MAC_RATESET_EID_MAX;
21551
21552 for ( i = 0; i < pHalRateSet->numRates; i++ )
21553 {
21554 pHalRateSet->rate[i] = pwdiRateSet->aRates[i];
21555 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021556
Jeff Johnson295189b2012-06-20 16:38:30 -070021557}/*WDI_CopyWDIRateSetToHALRateSet*/
21558
21559
21560/*Translate an EDCA Parameter Record from WDI into HAL*/
21561WPT_STATIC WPT_INLINE void
21562WDI_CopyWDIEDCAParamsToHALEDCAParams
Jeff Johnsone7245742012-09-05 17:12:55 -070021563(
Jeff Johnson295189b2012-06-20 16:38:30 -070021564 tSirMacEdcaParamRecord* phalEdcaParam,
21565 WDI_EdcaParamRecord* pWDIEdcaParam
21566)
21567{
Jeff Johnsone7245742012-09-05 17:12:55 -070021568 /*Lightweight function - no sanity checks and no unecessary code to increase
Jeff Johnson295189b2012-06-20 16:38:30 -070021569 the chances of getting inlined*/
21570
21571 phalEdcaParam->aci.rsvd = pWDIEdcaParam->wdiACI.rsvd;
21572 phalEdcaParam->aci.aci = pWDIEdcaParam->wdiACI.aci;
21573 phalEdcaParam->aci.acm = pWDIEdcaParam->wdiACI.acm;
21574 phalEdcaParam->aci.aifsn = pWDIEdcaParam->wdiACI.aifsn;
21575
21576 phalEdcaParam->cw.max = pWDIEdcaParam->wdiCW.max;
21577 phalEdcaParam->cw.min = pWDIEdcaParam->wdiCW.min;
21578 phalEdcaParam->txoplimit = pWDIEdcaParam->usTXOPLimit;
21579}/*WDI_CopyWDIEDCAParamsToHALEDCAParams*/
21580
21581
21582/*Copy a management frame header from WDI fmt into HAL fmt*/
21583WPT_STATIC WPT_INLINE void
21584WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr
21585(
21586 tSirMacMgmtHdr* pmacMgmtHdr,
21587 WDI_MacMgmtHdr* pwdiMacMgmtHdr
21588)
21589{
21590 pmacMgmtHdr->fc.protVer = pwdiMacMgmtHdr->fc.protVer;
21591 pmacMgmtHdr->fc.type = pwdiMacMgmtHdr->fc.type;
21592 pmacMgmtHdr->fc.subType = pwdiMacMgmtHdr->fc.subType;
21593 pmacMgmtHdr->fc.toDS = pwdiMacMgmtHdr->fc.toDS;
21594 pmacMgmtHdr->fc.fromDS = pwdiMacMgmtHdr->fc.fromDS;
21595 pmacMgmtHdr->fc.moreFrag = pwdiMacMgmtHdr->fc.moreFrag;
21596 pmacMgmtHdr->fc.retry = pwdiMacMgmtHdr->fc.retry;
21597 pmacMgmtHdr->fc.powerMgmt = pwdiMacMgmtHdr->fc.powerMgmt;
21598 pmacMgmtHdr->fc.moreData = pwdiMacMgmtHdr->fc.moreData;
21599 pmacMgmtHdr->fc.wep = pwdiMacMgmtHdr->fc.wep;
21600 pmacMgmtHdr->fc.order = pwdiMacMgmtHdr->fc.order;
21601
21602 pmacMgmtHdr->durationLo = pwdiMacMgmtHdr->durationLo;
21603 pmacMgmtHdr->durationHi = pwdiMacMgmtHdr->durationHi;
21604
Jeff Johnsone7245742012-09-05 17:12:55 -070021605 wpalMemoryCopy(pmacMgmtHdr->da,
Jeff Johnson295189b2012-06-20 16:38:30 -070021606 pwdiMacMgmtHdr->da, 6);
Jeff Johnsone7245742012-09-05 17:12:55 -070021607 wpalMemoryCopy(pmacMgmtHdr->sa,
Jeff Johnson295189b2012-06-20 16:38:30 -070021608 pwdiMacMgmtHdr->sa, 6);
Jeff Johnsone7245742012-09-05 17:12:55 -070021609 wpalMemoryCopy(pmacMgmtHdr->bssId,
Jeff Johnson295189b2012-06-20 16:38:30 -070021610 pwdiMacMgmtHdr->bssId, 6);
21611
21612 pmacMgmtHdr->seqControl.fragNum = pwdiMacMgmtHdr->seqControl.fragNum;
21613 pmacMgmtHdr->seqControl.seqNumLo = pwdiMacMgmtHdr->seqControl.seqNumLo;
21614 pmacMgmtHdr->seqControl.seqNumHi = pwdiMacMgmtHdr->seqControl.seqNumHi;
21615
21616}/*WDI_CopyWDIMgmFrameHdrToHALMgmFrameHdr*/
21617
21618
21619/*Copy config bss parameters from WDI fmt into HAL fmt*/
21620WPT_STATIC WPT_INLINE void
21621WDI_CopyWDIConfigBSSToHALConfigBSS
21622(
21623 tConfigBssParams* phalConfigBSS,
21624 WDI_ConfigBSSReqInfoType* pwdiConfigBSS
21625)
21626{
21627
21628 wpt_uint8 keyIndex = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070021629#ifdef WLAN_FEATURE_11AC
21630 /* Get the Version 1 Handler */
21631 tConfigBssParams_V1* phalConfigBSS_V1 = NULL;
21632 if (WDI_getFwWlanFeatCaps(DOT11AC))
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070021633 phalConfigBSS_V1 = (tConfigBssParams_V1*)phalConfigBSS;
Jeff Johnsone7245742012-09-05 17:12:55 -070021634#endif
21635
Jeff Johnson295189b2012-06-20 16:38:30 -070021636 wpalMemoryCopy( phalConfigBSS->bssId,
21637 pwdiConfigBSS->macBSSID,
21638 WDI_MAC_ADDR_LEN);
21639
21640#ifdef HAL_SELF_STA_PER_BSS
21641 wpalMemoryCopy( phalConfigBSS->selfMacAddr,
21642 pwdiConfigBSS->macSelfAddr,
21643 WDI_MAC_ADDR_LEN);
21644#endif
21645
21646 phalConfigBSS->bssType = WDI_2_HAL_BSS_TYPE(pwdiConfigBSS->wdiBSSType);
21647
21648 phalConfigBSS->operMode = pwdiConfigBSS->ucOperMode;
21649 phalConfigBSS->nwType = WDI_2_HAL_NW_TYPE(pwdiConfigBSS->wdiNWType);
21650
Jeff Johnsone7245742012-09-05 17:12:55 -070021651 phalConfigBSS->shortSlotTimeSupported =
Jeff Johnson295189b2012-06-20 16:38:30 -070021652 pwdiConfigBSS->ucShortSlotTimeSupported;
21653 phalConfigBSS->llaCoexist = pwdiConfigBSS->ucllaCoexist;
21654 phalConfigBSS->llbCoexist = pwdiConfigBSS->ucllbCoexist;
21655 phalConfigBSS->llgCoexist = pwdiConfigBSS->ucllgCoexist;
21656 phalConfigBSS->ht20Coexist = pwdiConfigBSS->ucHT20Coexist;
21657 phalConfigBSS->llnNonGFCoexist = pwdiConfigBSS->ucllnNonGFCoexist;
Jeff Johnsone7245742012-09-05 17:12:55 -070021658 phalConfigBSS->fLsigTXOPProtectionFullSupport =
Jeff Johnson295189b2012-06-20 16:38:30 -070021659 pwdiConfigBSS->ucTXOPProtectionFullSupport;
21660 phalConfigBSS->fRIFSMode = pwdiConfigBSS->ucRIFSMode;
21661 phalConfigBSS->beaconInterval = pwdiConfigBSS->usBeaconInterval;
21662 phalConfigBSS->dtimPeriod = pwdiConfigBSS->ucDTIMPeriod;
21663 phalConfigBSS->txChannelWidthSet = pwdiConfigBSS->ucTXChannelWidthSet;
21664 phalConfigBSS->currentOperChannel = pwdiConfigBSS->ucCurrentOperChannel;
21665 phalConfigBSS->currentExtChannel = pwdiConfigBSS->ucCurrentExtChannel;
21666 phalConfigBSS->action = pwdiConfigBSS->wdiAction;
21667 phalConfigBSS->htCapable = pwdiConfigBSS->ucHTCapable;
21668 phalConfigBSS->obssProtEnabled = pwdiConfigBSS->ucObssProtEnabled;
21669 phalConfigBSS->rmfEnabled = pwdiConfigBSS->ucRMFEnabled;
21670
Jeff Johnsone7245742012-09-05 17:12:55 -070021671 phalConfigBSS->htOperMode =
21672 WDI_2_HAL_HT_OPER_MODE(pwdiConfigBSS->wdiHTOperMod);
Jeff Johnson295189b2012-06-20 16:38:30 -070021673
21674 phalConfigBSS->dualCTSProtection = pwdiConfigBSS->ucDualCTSProtection;
21675 phalConfigBSS->ucMaxProbeRespRetryLimit = pwdiConfigBSS->ucMaxProbeRespRetryLimit;
21676 phalConfigBSS->bHiddenSSIDEn = pwdiConfigBSS->bHiddenSSIDEn;
21677 phalConfigBSS->bProxyProbeRespEn = pwdiConfigBSS->bProxyProbeRespEn;
21678
21679#ifdef WLAN_FEATURE_VOWIFI
21680 phalConfigBSS->maxTxPower = pwdiConfigBSS->cMaxTxPower;
21681#endif
21682
21683 /*! Used 32 as magic number because that is how the ssid is declared inside the
21684 hal header - hal needs a macro for it */
Jeff Johnsone7245742012-09-05 17:12:55 -070021685 phalConfigBSS->ssId.length =
Jeff Johnson295189b2012-06-20 16:38:30 -070021686 (pwdiConfigBSS->wdiSSID.ucLength <= 32)?
21687 pwdiConfigBSS->wdiSSID.ucLength : 32;
21688 wpalMemoryCopy(phalConfigBSS->ssId.ssId,
Jeff Johnsone7245742012-09-05 17:12:55 -070021689 pwdiConfigBSS->wdiSSID.sSSID,
21690 phalConfigBSS->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070021691
21692 WDI_CopyWDIStaCtxToHALStaCtx( &phalConfigBSS->staContext,
21693 &pwdiConfigBSS->wdiSTAContext);
Jeff Johnsone7245742012-09-05 17:12:55 -070021694
Jeff Johnson295189b2012-06-20 16:38:30 -070021695 WDI_CopyWDIRateSetToHALRateSet( &phalConfigBSS->rateSet,
21696 &pwdiConfigBSS->wdiRateSet);
21697
21698 phalConfigBSS->edcaParamsValid = pwdiConfigBSS->ucEDCAParamsValid;
21699
21700 if(phalConfigBSS->edcaParamsValid)
21701 {
21702 WDI_CopyWDIEDCAParamsToHALEDCAParams( &phalConfigBSS->acbe,
21703 &pwdiConfigBSS->wdiBEEDCAParams);
21704 WDI_CopyWDIEDCAParamsToHALEDCAParams( &phalConfigBSS->acbk,
21705 &pwdiConfigBSS->wdiBKEDCAParams);
21706 WDI_CopyWDIEDCAParamsToHALEDCAParams( &phalConfigBSS->acvi,
21707 &pwdiConfigBSS->wdiVIEDCAParams);
21708 WDI_CopyWDIEDCAParamsToHALEDCAParams( &phalConfigBSS->acvo,
21709 &pwdiConfigBSS->wdiVOEDCAParams);
21710 }
21711
Jeff Johnsone7245742012-09-05 17:12:55 -070021712 phalConfigBSS->halPersona = pwdiConfigBSS->ucPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -070021713
21714 phalConfigBSS->bSpectrumMgtEnable = pwdiConfigBSS->bSpectrumMgtEn;
21715
21716#ifdef WLAN_FEATURE_VOWIFI_11R
21717
Jeff Johnsone7245742012-09-05 17:12:55 -070021718 phalConfigBSS->extSetStaKeyParamValid =
Jeff Johnson295189b2012-06-20 16:38:30 -070021719 pwdiConfigBSS->bExtSetStaKeyParamValid;
Jeff Johnsone7245742012-09-05 17:12:55 -070021720
Jeff Johnson295189b2012-06-20 16:38:30 -070021721 if( phalConfigBSS->extSetStaKeyParamValid )
21722 {
21723 /*-----------------------------------------------------------------------
21724 Copy the STA Key parameters into the HAL message
21725 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070021726 phalConfigBSS->extSetStaKeyParam.encType =
Jeff Johnson295189b2012-06-20 16:38:30 -070021727 WDI_2_HAL_ENC_TYPE (pwdiConfigBSS->wdiExtSetKeyParam.wdiEncType);
21728
Jeff Johnsone7245742012-09-05 17:12:55 -070021729 phalConfigBSS->extSetStaKeyParam.wepType =
Jeff Johnson295189b2012-06-20 16:38:30 -070021730 WDI_2_HAL_WEP_TYPE (pwdiConfigBSS->wdiExtSetKeyParam.wdiWEPType );
21731
21732 phalConfigBSS->extSetStaKeyParam.staIdx = pwdiConfigBSS->wdiExtSetKeyParam.ucSTAIdx;
21733
21734 phalConfigBSS->extSetStaKeyParam.defWEPIdx = pwdiConfigBSS->wdiExtSetKeyParam.ucDefWEPIdx;
21735
21736 phalConfigBSS->extSetStaKeyParam.singleTidRc = pwdiConfigBSS->wdiExtSetKeyParam.ucSingleTidRc;
21737
21738#ifdef WLAN_SOFTAP_FEATURE
21739 for(keyIndex = 0; keyIndex < pwdiConfigBSS->wdiExtSetKeyParam.ucNumKeys ;
21740 keyIndex++)
21741 {
Jeff Johnsone7245742012-09-05 17:12:55 -070021742 phalConfigBSS->extSetStaKeyParam.key[keyIndex].keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -070021743 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].keyId;
21744 phalConfigBSS->extSetStaKeyParam.key[keyIndex].unicast =
21745 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].unicast;
21746 phalConfigBSS->extSetStaKeyParam.key[keyIndex].keyDirection =
21747 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection;
21748 wpalMemoryCopy(phalConfigBSS->extSetStaKeyParam.key[keyIndex].keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -070021749 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -070021750 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070021751 phalConfigBSS->extSetStaKeyParam.key[keyIndex].paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -070021752 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -070021753 phalConfigBSS->extSetStaKeyParam.key[keyIndex].keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -070021754 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength;
21755 wpalMemoryCopy(phalConfigBSS->extSetStaKeyParam.key[keyIndex].key,
Jeff Johnsone7245742012-09-05 17:12:55 -070021756 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[keyIndex].key,
Jeff Johnson295189b2012-06-20 16:38:30 -070021757 WDI_MAX_KEY_LENGTH);
21758 }
21759#else
Jeff Johnsone7245742012-09-05 17:12:55 -070021760 phalConfigBSS->extSetStaKeyParam.key.keyId =
Jeff Johnson295189b2012-06-20 16:38:30 -070021761 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].keyId;
21762 phalConfigBSS->extSetStaKeyParam.key.unicast =
21763 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].unicast;
21764 phalConfigBSS->extSetStaKeyParam.key.keyDirection =
21765 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].keyDirection;
21766 wpalMemoryCopy(phalConfigBSS->extSetStaKeyParam.key.keyRsc,
Jeff Johnsone7245742012-09-05 17:12:55 -070021767 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].keyRsc,
Jeff Johnson295189b2012-06-20 16:38:30 -070021768 WDI_MAX_KEY_RSC_LEN);
Jeff Johnsone7245742012-09-05 17:12:55 -070021769 phalConfigBSS->extSetStaKeyParam.key.paeRole =
Jeff Johnson295189b2012-06-20 16:38:30 -070021770 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].paeRole;
Jeff Johnsone7245742012-09-05 17:12:55 -070021771 phalConfigBSS->extSetStaKeyParam.key.keyLength =
Jeff Johnson295189b2012-06-20 16:38:30 -070021772 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].keyLength;
21773 wpalMemoryCopy(phalConfigBSS->extSetStaKeyParam.key.key,
Jeff Johnsone7245742012-09-05 17:12:55 -070021774 pwdiConfigBSS->wdiExtSetKeyParam.wdiKey[0].key,
Jeff Johnson295189b2012-06-20 16:38:30 -070021775 WDI_MAX_KEY_LENGTH);
21776#endif
21777 }
21778 else/* phalConfigBSS->extSetStaKeyParamValid is not set */
21779 {
Jeff Johnsone7245742012-09-05 17:12:55 -070021780 wpalMemoryZero( &phalConfigBSS->extSetStaKeyParam,
Jeff Johnson295189b2012-06-20 16:38:30 -070021781 sizeof(phalConfigBSS->extSetStaKeyParam) );
21782 }
21783
21784#endif /*WLAN_FEATURE_VOWIFI_11R*/
21785
Jeff Johnsone7245742012-09-05 17:12:55 -070021786#ifdef WLAN_FEATURE_11AC
21787 if(phalConfigBSS_V1 != NULL)
21788 {
21789 phalConfigBSS_V1->vhtCapable = pwdiConfigBSS->ucVhtCapableSta;
21790 phalConfigBSS_V1->vhtTxChannelWidthSet = pwdiConfigBSS->ucVhtTxChannelWidthSet;
21791 }
21792#endif
21793
Jeff Johnson295189b2012-06-20 16:38:30 -070021794}/*WDI_CopyWDIConfigBSSToHALConfigBSS*/
21795
21796
Jeff Johnsone7245742012-09-05 17:12:55 -070021797/*Extract the request CB function and user data from a request structure
Jeff Johnson295189b2012-06-20 16:38:30 -070021798 pointed to by user data */
21799WPT_STATIC WPT_INLINE void
21800WDI_ExtractRequestCBFromEvent
21801(
21802 WDI_EventInfoType* pEvent,
Jeff Johnsone7245742012-09-05 17:12:55 -070021803 WDI_ReqStatusCb* ppfnReqCB,
Jeff Johnson295189b2012-06-20 16:38:30 -070021804 void** ppUserData
21805)
21806{
21807 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
21808 switch ( pEvent->wdiRequest )
21809 {
21810 case WDI_START_REQ:
21811 *ppfnReqCB = ((WDI_StartReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21812 *ppUserData = ((WDI_StartReqParamsType*)pEvent->pEventData)->pUserData;
21813 break;
21814 case WDI_STOP_REQ:
21815 *ppfnReqCB = ((WDI_StopReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21816 *ppUserData = ((WDI_StopReqParamsType*)pEvent->pEventData)->pUserData;
21817 break;
21818 case WDI_INIT_SCAN_REQ:
21819 *ppfnReqCB = ((WDI_InitScanReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21820 *ppUserData = ((WDI_InitScanReqParamsType*)pEvent->pEventData)->pUserData;
21821 break;
21822 case WDI_START_SCAN_REQ:
21823 *ppfnReqCB = ((WDI_StartScanReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21824 *ppUserData = ((WDI_StartScanReqParamsType*)pEvent->pEventData)->pUserData;
21825 break;
21826 case WDI_END_SCAN_REQ:
21827 *ppfnReqCB = ((WDI_EndScanReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21828 *ppUserData = ((WDI_EndScanReqParamsType*)pEvent->pEventData)->pUserData;
21829 break;
21830 case WDI_FINISH_SCAN_REQ:
21831 *ppfnReqCB = ((WDI_FinishScanReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21832 *ppUserData = ((WDI_FinishScanReqParamsType*)pEvent->pEventData)->pUserData;
21833 break;
21834 case WDI_JOIN_REQ:
21835 *ppfnReqCB = ((WDI_JoinReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21836 *ppUserData = ((WDI_JoinReqParamsType*)pEvent->pEventData)->pUserData;
21837 break;
21838 case WDI_CONFIG_BSS_REQ:
21839 *ppfnReqCB = ((WDI_ConfigBSSReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21840 *ppUserData = ((WDI_ConfigBSSReqParamsType*)pEvent->pEventData)->pUserData;
21841 break;
21842 case WDI_DEL_BSS_REQ:
21843 *ppfnReqCB = ((WDI_DelBSSReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21844 *ppUserData = ((WDI_DelBSSReqParamsType*)pEvent->pEventData)->pUserData;
21845 break;
21846 case WDI_POST_ASSOC_REQ:
21847 *ppfnReqCB = ((WDI_PostAssocReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21848 *ppUserData = ((WDI_PostAssocReqParamsType*)pEvent->pEventData)->pUserData;
21849 break;
21850 case WDI_DEL_STA_REQ:
21851 *ppfnReqCB = ((WDI_DelSTAReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21852 *ppUserData = ((WDI_DelSTAReqParamsType*)pEvent->pEventData)->pUserData;
21853 break;
21854 case WDI_DEL_STA_SELF_REQ:
21855 *ppfnReqCB = ((WDI_DelSTASelfReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21856 *ppUserData = ((WDI_DelSTASelfReqParamsType*)pEvent->pEventData)->pUserData;
21857 break;
21858
21859 case WDI_SET_BSS_KEY_REQ:
21860 *ppfnReqCB = ((WDI_SetBSSKeyReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21861 *ppUserData = ((WDI_SetBSSKeyReqParamsType*)pEvent->pEventData)->pUserData;
21862 break;
21863 case WDI_RMV_BSS_KEY_REQ:
21864 *ppfnReqCB = ((WDI_RemoveBSSKeyReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21865 *ppUserData = ((WDI_RemoveBSSKeyReqParamsType*)pEvent->pEventData)->pUserData;
21866 break;
21867 case WDI_SET_STA_KEY_REQ:
21868 *ppfnReqCB = ((WDI_SetSTAKeyReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21869 *ppUserData = ((WDI_SetSTAKeyReqParamsType*)pEvent->pEventData)->pUserData;
21870 break;
21871 case WDI_RMV_STA_KEY_REQ:
21872 *ppfnReqCB = ((WDI_RemoveSTAKeyReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21873 *ppUserData = ((WDI_RemoveSTAKeyReqParamsType*)pEvent->pEventData)->pUserData;
21874 break;
21875 case WDI_ADD_TS_REQ:
21876 *ppfnReqCB = ((WDI_AddTSReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21877 *ppUserData = ((WDI_AddTSReqParamsType*)pEvent->pEventData)->pUserData;
21878 break;
21879 case WDI_DEL_TS_REQ:
21880 *ppfnReqCB = ((WDI_DelTSReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21881 *ppUserData = ((WDI_DelTSReqParamsType*)pEvent->pEventData)->pUserData;
21882 break;
21883 case WDI_UPD_EDCA_PRMS_REQ:
21884 *ppfnReqCB = ((WDI_UpdateEDCAParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21885 *ppUserData = ((WDI_UpdateEDCAParamsType*)pEvent->pEventData)->pUserData;
21886 break;
21887 case WDI_ADD_BA_SESSION_REQ:
21888 *ppfnReqCB = ((WDI_AddBASessionReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21889 *ppUserData = ((WDI_AddBASessionReqParamsType*)pEvent->pEventData)->pUserData;
21890 break;
21891 case WDI_DEL_BA_REQ:
21892 *ppfnReqCB = ((WDI_DelBAReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21893 *ppUserData = ((WDI_DelBAReqParamsType*)pEvent->pEventData)->pUserData;
21894 break;
21895#ifdef FEATURE_WLAN_CCX
21896 case WDI_TSM_STATS_REQ:
21897 *ppfnReqCB = ((WDI_TSMStatsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21898 *ppUserData = ((WDI_TSMStatsReqParamsType*)pEvent->pEventData)->pUserData;
21899 break;
21900#endif
21901 case WDI_CH_SWITCH_REQ:
21902 *ppfnReqCB = ((WDI_SwitchChReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21903 *ppUserData = ((WDI_SwitchChReqParamsType*)pEvent->pEventData)->pUserData;
21904 break;
21905 case WDI_CONFIG_STA_REQ:
21906 *ppfnReqCB = ((WDI_ConfigSTAReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21907 *ppUserData = ((WDI_ConfigSTAReqParamsType*)pEvent->pEventData)->pUserData;
21908 break;
21909 case WDI_SET_LINK_ST_REQ:
21910 *ppfnReqCB = ((WDI_SetLinkReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21911 *ppUserData = ((WDI_SetLinkReqParamsType*)pEvent->pEventData)->pUserData;
21912 break;
21913 case WDI_GET_STATS_REQ:
21914 *ppfnReqCB = ((WDI_GetStatsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21915 *ppUserData = ((WDI_GetStatsReqParamsType*)pEvent->pEventData)->pUserData;
21916 break;
21917 case WDI_UPDATE_CFG_REQ:
21918 *ppfnReqCB = ((WDI_UpdateCfgReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21919 *ppUserData = ((WDI_UpdateCfgReqParamsType*)pEvent->pEventData)->pUserData;
21920 break;
21921 case WDI_ADD_BA_REQ:
21922 *ppfnReqCB = ((WDI_AddBAReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21923 *ppUserData = ((WDI_AddBAReqParamsType*)pEvent->pEventData)->pUserData;
21924 break;
21925 case WDI_TRIGGER_BA_REQ:
21926 *ppfnReqCB = ((WDI_TriggerBAReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21927 *ppUserData = ((WDI_TriggerBAReqParamsType*)pEvent->pEventData)->pUserData;
21928 break;
21929 case WDI_UPD_BCON_PRMS_REQ:
21930 *ppfnReqCB = ((WDI_UpdateBeaconParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21931 *ppUserData = ((WDI_UpdateBeaconParamsType*)pEvent->pEventData)->pUserData;
21932 break;
21933 case WDI_SND_BCON_REQ:
21934 *ppfnReqCB = ((WDI_SendBeaconParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21935 *ppUserData = ((WDI_SendBeaconParamsType*)pEvent->pEventData)->pUserData;
21936 break;
21937 case WDI_ENTER_BMPS_REQ:
21938 *ppfnReqCB = ((WDI_EnterBmpsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21939 *ppUserData = ((WDI_EnterBmpsReqParamsType*)pEvent->pEventData)->pUserData;
21940 break;
21941 case WDI_EXIT_BMPS_REQ:
21942 *ppfnReqCB = ((WDI_ExitBmpsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21943 *ppUserData = ((WDI_ExitBmpsReqParamsType*)pEvent->pEventData)->pUserData;
21944 break;
21945 case WDI_ENTER_UAPSD_REQ:
21946 *ppfnReqCB = ((WDI_EnterUapsdReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21947 *ppUserData = ((WDI_EnterUapsdReqParamsType*)pEvent->pEventData)->pUserData;
21948 break;
21949 case WDI_UPDATE_UAPSD_PARAM_REQ:
21950 *ppfnReqCB = ((WDI_UpdateUapsdReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21951 *ppUserData = ((WDI_UpdateUapsdReqParamsType*)pEvent->pEventData)->pUserData;
21952 break;
21953 case WDI_CONFIGURE_RXP_FILTER_REQ:
21954 *ppfnReqCB = ((WDI_ConfigureRxpFilterReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21955 *ppUserData = ((WDI_ConfigureRxpFilterReqParamsType*)pEvent->pEventData)->pUserData;
21956 break;
21957 case WDI_SET_BEACON_FILTER_REQ:
21958 *ppfnReqCB = ((WDI_BeaconFilterReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21959 *ppUserData = ((WDI_BeaconFilterReqParamsType*)pEvent->pEventData)->pUserData;
21960 break;
21961 case WDI_REM_BEACON_FILTER_REQ:
21962 *ppfnReqCB = ((WDI_RemBeaconFilterReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21963 *ppUserData = ((WDI_RemBeaconFilterReqParamsType*)pEvent->pEventData)->pUserData;
Jeff Johnsone7245742012-09-05 17:12:55 -070021964 break;
Jeff Johnson295189b2012-06-20 16:38:30 -070021965 case WDI_SET_RSSI_THRESHOLDS_REQ:
21966 *ppfnReqCB = ((WDI_SetRSSIThresholdsReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21967 *ppUserData = ((WDI_SetRSSIThresholdsReqParamsType*)pEvent->pEventData)->pUserData;
21968 break;
21969 case WDI_HOST_OFFLOAD_REQ:
21970 *ppfnReqCB = ((WDI_HostOffloadReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21971 *ppUserData = ((WDI_HostOffloadReqParamsType*)pEvent->pEventData)->pUserData;
21972 break;
21973 case WDI_WOWL_ADD_BC_PTRN_REQ:
21974 *ppfnReqCB = ((WDI_WowlAddBcPtrnReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21975 *ppUserData = ((WDI_WowlAddBcPtrnReqParamsType*)pEvent->pEventData)->pUserData;
21976 break;
21977 case WDI_WOWL_DEL_BC_PTRN_REQ:
21978 *ppfnReqCB = ((WDI_WowlDelBcPtrnReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21979 *ppUserData = ((WDI_WowlDelBcPtrnReqParamsType*)pEvent->pEventData)->pUserData;
21980 break;
21981 case WDI_WOWL_ENTER_REQ:
21982 *ppfnReqCB = ((WDI_WowlEnterReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21983 *ppUserData = ((WDI_WowlEnterReqParamsType*)pEvent->pEventData)->pUserData;
21984 break;
21985 case WDI_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ:
21986 *ppfnReqCB = ((WDI_ConfigureAppsCpuWakeupStateReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21987 *ppUserData = ((WDI_ConfigureAppsCpuWakeupStateReqParamsType*)pEvent->pEventData)->pUserData;
21988 break;
21989 case WDI_FLUSH_AC_REQ:
21990 *ppfnReqCB = ((WDI_FlushAcReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21991 *ppUserData = ((WDI_FlushAcReqParamsType*)pEvent->pEventData)->pUserData;
21992 break;
21993 case WDI_BTAMP_EVENT_REQ:
21994 *ppfnReqCB = ((WDI_BtAmpEventParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21995 *ppUserData = ((WDI_BtAmpEventParamsType*)pEvent->pEventData)->pUserData;
21996 break;
21997 case WDI_KEEP_ALIVE_REQ:
21998 *ppfnReqCB = ((WDI_KeepAliveReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
21999 *ppUserData = ((WDI_KeepAliveReqParamsType*)pEvent->pEventData)->pUserData;
22000 break;
22001 case WDI_SET_TX_PER_TRACKING_REQ:
22002 *ppfnReqCB = ((WDI_SetTxPerTrackingReqParamsType*)pEvent->pEventData)->wdiReqStatusCB;
22003 *ppUserData = ((WDI_SetTxPerTrackingReqParamsType*)pEvent->pEventData)->pUserData;
22004 default:
22005 *ppfnReqCB = NULL;
22006 *ppUserData = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070022007 break;
Jeff Johnson295189b2012-06-20 16:38:30 -070022008 }
22009}/*WDI_ExtractRequestCBFromEvent*/
22010
22011
22012/**
Jeff Johnsone7245742012-09-05 17:12:55 -070022013 @brief WDI_IsHwFrameTxTranslationCapable checks to see if HW
Jeff Johnson295189b2012-06-20 16:38:30 -070022014 frame xtl is enabled for a particular STA.
22015
22016 WDI_PostAssocReq must have been called.
22017
Jeff Johnsone7245742012-09-05 17:12:55 -070022018 @param uSTAIdx: STA index
22019
Jeff Johnson295189b2012-06-20 16:38:30 -070022020 @see WDI_PostAssocReq
22021 @return Result of the function call
22022*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022023wpt_boolean
Jeff Johnson295189b2012-06-20 16:38:30 -070022024WDI_IsHwFrameTxTranslationCapable
22025(
22026 wpt_uint8 uSTAIdx
22027)
22028{
Jeff Johnsone7245742012-09-05 17:12:55 -070022029 /*!! FIX ME - this must eventually be per station - for now just feedback
Jeff Johnson295189b2012-06-20 16:38:30 -070022030 uma value*/
22031 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022032 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070022033 ------------------------------------------------------------------------*/
22034 if ( eWLAN_PAL_FALSE == gWDIInitialized )
22035 {
22036 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
22037 "WDI API call before module is initialized - Fail request");
22038
Jeff Johnsone7245742012-09-05 17:12:55 -070022039 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070022040 }
22041
Jeff Johnsone7245742012-09-05 17:12:55 -070022042
Jeff Johnson295189b2012-06-20 16:38:30 -070022043 return gWDICb.bFrameTransEnabled;
22044}/*WDI_IsHwFrameTxTranslationCapable*/
22045
22046#ifdef FEATURE_WLAN_SCAN_PNO
22047/**
22048 @brief WDI_SetPreferredNetworkList
22049
Jeff Johnsone7245742012-09-05 17:12:55 -070022050 @param pwdiPNOScanReqParams: the Set PNO as specified
Jeff Johnson295189b2012-06-20 16:38:30 -070022051 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -070022052
Jeff Johnson295189b2012-06-20 16:38:30 -070022053 wdiPNOScanCb: callback for passing back the response
22054 of the Set PNO operation received from the
22055 device
Jeff Johnsone7245742012-09-05 17:12:55 -070022056
Jeff Johnson295189b2012-06-20 16:38:30 -070022057 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -070022058 callback
22059
Jeff Johnson295189b2012-06-20 16:38:30 -070022060 @return Result of the function call
22061*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022062WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070022063WDI_SetPreferredNetworkReq
22064(
22065 WDI_PNOScanReqParamsType* pwdiPNOScanReqParams,
22066 WDI_PNOScanCb wdiPNOScanCb,
22067 void* pUserData
22068)
22069{
22070 WDI_EventInfoType wdiEventData = {{0}};
22071 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22072
22073 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022074 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070022075 ------------------------------------------------------------------------*/
22076 if ( eWLAN_PAL_FALSE == gWDIInitialized )
22077 {
22078 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
22079 "WDI API call before module is initialized - Fail request");
22080
Jeff Johnsone7245742012-09-05 17:12:55 -070022081 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070022082 }
22083
22084 /*------------------------------------------------------------------------
22085 Fill in Event data and post to the Main FSM
22086 ------------------------------------------------------------------------*/
22087 wdiEventData.wdiRequest = WDI_SET_PREF_NETWORK_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070022088 wdiEventData.pEventData = pwdiPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070022089 wdiEventData.uEventDataSize = sizeof(*pwdiPNOScanReqParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070022090 wdiEventData.pCBfnc = wdiPNOScanCb;
Jeff Johnson295189b2012-06-20 16:38:30 -070022091 wdiEventData.pUserData = pUserData;
22092
22093 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
22094}
22095
22096
22097/**
22098 @brief WDI_SetRssiFilterReq
22099
Jeff Johnsone7245742012-09-05 17:12:55 -070022100 @param pwdiRssiFilterReqParams: the Set RSSI Filter as
Jeff Johnson295189b2012-06-20 16:38:30 -070022101 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -070022102
Jeff Johnson295189b2012-06-20 16:38:30 -070022103 wdiRssiFilterCb: callback for passing back the response
22104 of the Set RSSI Filter operation received from the
22105 device
Jeff Johnsone7245742012-09-05 17:12:55 -070022106
Jeff Johnson295189b2012-06-20 16:38:30 -070022107 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -070022108 callback
22109
Jeff Johnson295189b2012-06-20 16:38:30 -070022110 @return Result of the function call
22111*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022112WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070022113WDI_SetRssiFilterReq
22114(
22115 WDI_SetRssiFilterReqParamsType* pwdiRssiFilterReqParams,
22116 WDI_RssiFilterCb wdiRssiFilterCb,
22117 void* pUserData
22118)
22119{
22120 WDI_EventInfoType wdiEventData = {{0}};
22121 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22122
22123 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022124 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070022125 ------------------------------------------------------------------------*/
22126 if ( eWLAN_PAL_FALSE == gWDIInitialized )
22127 {
22128 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
22129 "WDI API call before module is initialized - Fail request");
22130
Jeff Johnsone7245742012-09-05 17:12:55 -070022131 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070022132 }
22133
22134 /*------------------------------------------------------------------------
22135 Fill in Event data and post to the Main FSM
22136 ------------------------------------------------------------------------*/
22137 wdiEventData.wdiRequest = WDI_SET_RSSI_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070022138 wdiEventData.pEventData = pwdiRssiFilterReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070022139 wdiEventData.uEventDataSize = sizeof(*pwdiRssiFilterReqParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070022140 wdiEventData.pCBfnc = wdiRssiFilterCb;
Jeff Johnson295189b2012-06-20 16:38:30 -070022141 wdiEventData.pUserData = pUserData;
22142
22143 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
22144}/*WDI_SetRssiFilterReq*/
22145
22146/**
22147 @brief WDI_UpdateScanParamsReq
22148
Jeff Johnsone7245742012-09-05 17:12:55 -070022149 @param pwdiUpdateScanParamsInfoType: the Update Scan Params as specified
Jeff Johnson295189b2012-06-20 16:38:30 -070022150 by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -070022151
Jeff Johnson295189b2012-06-20 16:38:30 -070022152 wdiUpdateScanParamsCb: callback for passing back the response
22153 of the Set PNO operation received from the
22154 device
Jeff Johnsone7245742012-09-05 17:12:55 -070022155
Jeff Johnson295189b2012-06-20 16:38:30 -070022156 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -070022157 callback
22158
Jeff Johnson295189b2012-06-20 16:38:30 -070022159 @return Result of the function call
22160*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022161WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070022162WDI_UpdateScanParamsReq
22163(
22164 WDI_UpdateScanParamsInfoType* pwdiUpdateScanParamsInfoType,
22165 WDI_UpdateScanParamsCb wdiUpdateScanParamsCb,
22166 void* pUserData
22167)
22168{
22169 WDI_EventInfoType wdiEventData = {{0}};
22170 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22171
22172 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022173 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070022174 ------------------------------------------------------------------------*/
22175 if ( eWLAN_PAL_FALSE == gWDIInitialized )
22176 {
22177 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
22178 "WDI API call before module is initialized - Fail request");
22179
Jeff Johnsone7245742012-09-05 17:12:55 -070022180 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070022181 }
22182
22183 /*------------------------------------------------------------------------
22184 Fill in Event data and post to the Main FSM
22185 ------------------------------------------------------------------------*/
22186 wdiEventData.wdiRequest = WDI_UPDATE_SCAN_PARAMS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070022187 wdiEventData.pEventData = pwdiUpdateScanParamsInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070022188 wdiEventData.uEventDataSize = sizeof(*pwdiUpdateScanParamsInfoType);
Jeff Johnsone7245742012-09-05 17:12:55 -070022189 wdiEventData.pCBfnc = wdiUpdateScanParamsCb;
Jeff Johnson295189b2012-06-20 16:38:30 -070022190 wdiEventData.pUserData = pUserData;
22191
22192 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
22193}
22194
22195/**
Jeff Johnsone7245742012-09-05 17:12:55 -070022196 @brief Helper function to pack Set Preferred Network List
Jeff Johnson295189b2012-06-20 16:38:30 -070022197 Request parameters
Jeff Johnsone7245742012-09-05 17:12:55 -070022198
22199 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070022200 pwdiPNOScanReqParams: pointer to the info received
22201 from upper layers
22202 ppSendBuffer, pSize - out pointers of the packed buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070022203 and its size
22204
Jeff Johnson295189b2012-06-20 16:38:30 -070022205 @return Result of the function call
22206*/
22207
22208WDI_Status
22209WDI_PackPreferredNetworkList
22210(
22211 WDI_ControlBlockType* pWDICtx,
22212 WDI_PNOScanReqParamsType* pwdiPNOScanReqParams,
22213 wpt_uint8** ppSendBuffer,
22214 wpt_uint16* pSize
22215)
22216{
Jeff Johnsone7245742012-09-05 17:12:55 -070022217 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022218 wpt_uint16 usDataOffset = 0;
22219 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022220 tpPrefNetwListParams pPrefNetwListParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022221 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070022222 /*-----------------------------------------------------------------------
22223 Get message buffer
22224 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022225 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_PREF_NETWORK_REQ,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022226 sizeof(tPrefNetwListParams),
Jeff Johnson295189b2012-06-20 16:38:30 -070022227 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022228 ( usSendSize < (usDataOffset + sizeof(tPrefNetwListParams) )))
Jeff Johnson295189b2012-06-20 16:38:30 -070022229 {
22230 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22231 "Unable to get send buffer in Set PNO req %x ",
22232 pwdiPNOScanReqParams);
22233 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022234 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022235 }
22236
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022237 pPrefNetwListParams = (tpPrefNetwListParams)(pSendBuffer + usDataOffset);
22238
Jeff Johnson295189b2012-06-20 16:38:30 -070022239 /*-------------------------------------------------------------------------
22240 Fill prefNetwListParams from pwdiPNOScanReqParams->wdiPNOScanInfo
22241 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022242 pPrefNetwListParams->enable =
Jeff Johnson295189b2012-06-20 16:38:30 -070022243 pwdiPNOScanReqParams->wdiPNOScanInfo.bEnable;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022244 pPrefNetwListParams->modePNO =
Jeff Johnson295189b2012-06-20 16:38:30 -070022245 pwdiPNOScanReqParams->wdiPNOScanInfo.wdiModePNO;
22246
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022247 pPrefNetwListParams->ucNetworksCount =
Jeff Johnsone7245742012-09-05 17:12:55 -070022248 (pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount <
Jeff Johnson295189b2012-06-20 16:38:30 -070022249 WLAN_HAL_PNO_MAX_SUPP_NETWORKS)?
Jeff Johnsone7245742012-09-05 17:12:55 -070022250 pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount :
Jeff Johnson295189b2012-06-20 16:38:30 -070022251 WLAN_HAL_PNO_MAX_SUPP_NETWORKS;
22252
22253 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022254 "WDI SET PNO: Enable %d, Mode %d, Netw Count %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070022255 pwdiPNOScanReqParams->wdiPNOScanInfo.bEnable,
22256 pwdiPNOScanReqParams->wdiPNOScanInfo.wdiModePNO,
22257 pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount);
22258
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022259 for ( i = 0; i < pPrefNetwListParams->ucNetworksCount; i++ )
Jeff Johnson295189b2012-06-20 16:38:30 -070022260 {
22261 /*SSID of the BSS*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022262 pPrefNetwListParams->aNetworks[i].ssId.length
Jeff Johnson295189b2012-06-20 16:38:30 -070022263 = pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ssId.ucLength;
22264
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022265 wpalMemoryCopy( pPrefNetwListParams->aNetworks[i].ssId.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -070022266 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ssId.sSSID,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022267 pPrefNetwListParams->aNetworks[i].ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070022268
22269 /*Authentication type for the network*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022270 pPrefNetwListParams->aNetworks[i].authentication =
Jeff Johnsone7245742012-09-05 17:12:55 -070022271 (tAuthType)pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].wdiAuth;
Jeff Johnson295189b2012-06-20 16:38:30 -070022272
22273 /*Encryption type for the network*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022274 pPrefNetwListParams->aNetworks[i].encryption =
Jeff Johnsone7245742012-09-05 17:12:55 -070022275 (tEdType)pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].wdiEncryption;
Jeff Johnson295189b2012-06-20 16:38:30 -070022276
Jeff Johnsone7245742012-09-05 17:12:55 -070022277 /*Indicate the channel on which the Network can be found
Jeff Johnson295189b2012-06-20 16:38:30 -070022278 0 - if all channels */
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022279 pPrefNetwListParams->aNetworks[i].ucChannelCount =
Madan Mohan Koyyalamudia208d102012-10-15 15:18:18 -070022280 (pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ucChannelCount <
22281 WLAN_HAL_PNO_MAX_NETW_CHANNELS)?
22282 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ucChannelCount :
22283 WLAN_HAL_PNO_MAX_NETW_CHANNELS;
Jeff Johnson295189b2012-06-20 16:38:30 -070022284
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022285 wpalMemoryCopy(pPrefNetwListParams->aNetworks[i].aChannels,
Jeff Johnson295189b2012-06-20 16:38:30 -070022286 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].aChannels,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022287 pPrefNetwListParams->aNetworks[i].ucChannelCount);
Jeff Johnson295189b2012-06-20 16:38:30 -070022288
22289 /*Indicates the RSSI threshold for the network to be considered*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022290 pPrefNetwListParams->aNetworks[i].rssiThreshold =
Jeff Johnson295189b2012-06-20 16:38:30 -070022291 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].rssiThreshold;
22292
22293 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070022294 "WDI SET PNO: SSID %d %s",
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022295 pPrefNetwListParams->aNetworks[i].ssId.length,
22296 pPrefNetwListParams->aNetworks[i].ssId.ssId);
Jeff Johnson295189b2012-06-20 16:38:30 -070022297 }
22298
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022299 pPrefNetwListParams->scanTimers.ucScanTimersCount =
Jeff Johnsone7245742012-09-05 17:12:55 -070022300 (pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.ucScanTimersCount <
Jeff Johnson295189b2012-06-20 16:38:30 -070022301 WLAN_HAL_PNO_MAX_SCAN_TIMERS)?
22302 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.ucScanTimersCount :
22303 WLAN_HAL_PNO_MAX_SCAN_TIMERS;
22304
22305 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
Jeff Johnsone7245742012-09-05 17:12:55 -070022306 "WDI SET PNO: Scan timers count %d 24G P %d 5G Probe %d",
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022307 pPrefNetwListParams->scanTimers.ucScanTimersCount,
Jeff Johnson295189b2012-06-20 16:38:30 -070022308 pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize,
22309 pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize);
22310
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022311 for ( i = 0; i < pPrefNetwListParams->scanTimers.ucScanTimersCount; i++ )
Jeff Johnson295189b2012-06-20 16:38:30 -070022312 {
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022313 pPrefNetwListParams->scanTimers.aTimerValues[i].uTimerValue =
Jeff Johnson295189b2012-06-20 16:38:30 -070022314 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.aTimerValues[i].uTimerValue;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022315 pPrefNetwListParams->scanTimers.aTimerValues[i].uTimerRepeat =
Jeff Johnson295189b2012-06-20 16:38:30 -070022316 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.aTimerValues[i].uTimerRepeat;
22317 }
22318
22319 /*Copy the probe template*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022320 pPrefNetwListParams->us24GProbeSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070022321 (pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize<
22322 WLAN_HAL_PNO_MAX_PROBE_SIZE)?
22323 pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize:
Jeff Johnsone7245742012-09-05 17:12:55 -070022324 WLAN_HAL_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022325
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022326 wpalMemoryCopy(pPrefNetwListParams->a24GProbeTemplate,
Jeff Johnsone7245742012-09-05 17:12:55 -070022327 pwdiPNOScanReqParams->wdiPNOScanInfo.a24GProbeTemplate,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022328 pPrefNetwListParams->us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070022329
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022330 pPrefNetwListParams->us5GProbeSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070022331 (pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize <
22332 WLAN_HAL_PNO_MAX_PROBE_SIZE)?
22333 pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize:
Jeff Johnsone7245742012-09-05 17:12:55 -070022334 WLAN_HAL_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022335
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022336 wpalMemoryCopy(pPrefNetwListParams->a5GProbeTemplate,
Jeff Johnsone7245742012-09-05 17:12:55 -070022337 pwdiPNOScanReqParams->wdiPNOScanInfo.a5GProbeTemplate,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022338 pPrefNetwListParams->us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070022339
22340 /*Set the output values*/
22341 *ppSendBuffer = pSendBuffer;
Jeff Johnsone7245742012-09-05 17:12:55 -070022342 *pSize = usSendSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070022343
22344 return WDI_STATUS_SUCCESS;
22345}/*WDI_PackPreferredNetworkList*/
22346
22347/**
Jeff Johnsone7245742012-09-05 17:12:55 -070022348 @brief Helper function to pack Set Preferred Network List
Jeff Johnson295189b2012-06-20 16:38:30 -070022349 Request parameters
Jeff Johnsone7245742012-09-05 17:12:55 -070022350
22351 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnson295189b2012-06-20 16:38:30 -070022352 pwdiPNOScanReqParams: pointer to the info received
22353 from upper layers
22354 ppSendBuffer, pSize - out pointers of the packed buffer
Jeff Johnsone7245742012-09-05 17:12:55 -070022355 and its size
22356
Jeff Johnson295189b2012-06-20 16:38:30 -070022357 @return Result of the function call
22358*/
22359
22360WDI_Status
22361WDI_PackPreferredNetworkListNew
22362(
22363 WDI_ControlBlockType* pWDICtx,
22364 WDI_PNOScanReqParamsType* pwdiPNOScanReqParams,
22365 wpt_uint8** ppSendBuffer,
22366 wpt_uint16* pSize
22367)
22368{
Jeff Johnsone7245742012-09-05 17:12:55 -070022369 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022370 wpt_uint16 usDataOffset = 0;
22371 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022372 tpPrefNetwListParamsNew pPrefNetwListParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070022373 wpt_uint8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070022374
22375 /*-----------------------------------------------------------------------
22376 Get message buffer
22377 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022378 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_PREF_NETWORK_REQ,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022379 sizeof(tPrefNetwListParamsNew),
Jeff Johnson295189b2012-06-20 16:38:30 -070022380 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022381 ( usSendSize < (usDataOffset + sizeof(tPrefNetwListParamsNew) )))
Jeff Johnson295189b2012-06-20 16:38:30 -070022382 {
22383 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22384 "Unable to get send buffer in Set PNO req %x ",
22385 pwdiPNOScanReqParams);
22386 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022387 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022388 }
22389
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022390 pPrefNetwListParams = (tpPrefNetwListParamsNew)(pSendBuffer + usDataOffset);
22391
Jeff Johnson295189b2012-06-20 16:38:30 -070022392 /*-------------------------------------------------------------------------
22393 Fill prefNetwListParams from pwdiPNOScanReqParams->wdiPNOScanInfo
22394 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022395 pPrefNetwListParams->enable =
Jeff Johnson295189b2012-06-20 16:38:30 -070022396 pwdiPNOScanReqParams->wdiPNOScanInfo.bEnable;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022397 pPrefNetwListParams->modePNO =
Jeff Johnson295189b2012-06-20 16:38:30 -070022398 pwdiPNOScanReqParams->wdiPNOScanInfo.wdiModePNO;
22399
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022400 pPrefNetwListParams->ucNetworksCount =
Jeff Johnsone7245742012-09-05 17:12:55 -070022401 (pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount <
Jeff Johnson295189b2012-06-20 16:38:30 -070022402 WLAN_HAL_PNO_MAX_SUPP_NETWORKS)?
Jeff Johnsone7245742012-09-05 17:12:55 -070022403 pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount :
Jeff Johnson295189b2012-06-20 16:38:30 -070022404 WLAN_HAL_PNO_MAX_SUPP_NETWORKS;
22405
22406 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022407 "WDI SET PNO: Enable %d, Mode %d, Netw Count %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070022408 pwdiPNOScanReqParams->wdiPNOScanInfo.bEnable,
22409 pwdiPNOScanReqParams->wdiPNOScanInfo.wdiModePNO,
22410 pwdiPNOScanReqParams->wdiPNOScanInfo.ucNetworksCount);
22411
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022412 for ( i = 0; i < pPrefNetwListParams->ucNetworksCount; i++ )
Jeff Johnson295189b2012-06-20 16:38:30 -070022413 {
22414 /*SSID of the BSS*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022415 pPrefNetwListParams->aNetworks[i].ssId.length
Jeff Johnson295189b2012-06-20 16:38:30 -070022416 = pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ssId.ucLength;
22417
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022418 wpalMemoryCopy( pPrefNetwListParams->aNetworks[i].ssId.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -070022419 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ssId.sSSID,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022420 pPrefNetwListParams->aNetworks[i].ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070022421
22422 /*Authentication type for the network*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022423 pPrefNetwListParams->aNetworks[i].authentication =
Jeff Johnsone7245742012-09-05 17:12:55 -070022424 (tAuthType)pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].wdiAuth;
Jeff Johnson295189b2012-06-20 16:38:30 -070022425
22426 /*Encryption type for the network*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022427 pPrefNetwListParams->aNetworks[i].encryption =
Jeff Johnsone7245742012-09-05 17:12:55 -070022428 (tEdType)pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].wdiEncryption;
Jeff Johnson295189b2012-06-20 16:38:30 -070022429
22430 /*SSID bcast type for the network*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022431 pPrefNetwListParams->aNetworks[i].bcastNetworkType =
Jeff Johnsone7245742012-09-05 17:12:55 -070022432 (tSSIDBcastType)pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].wdiBcastNetworkType;
Jeff Johnson295189b2012-06-20 16:38:30 -070022433
Jeff Johnsone7245742012-09-05 17:12:55 -070022434 /*Indicate the channel on which the Network can be found
Jeff Johnson295189b2012-06-20 16:38:30 -070022435 0 - if all channels */
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022436 pPrefNetwListParams->aNetworks[i].ucChannelCount =
Jeff Johnson295189b2012-06-20 16:38:30 -070022437 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].ucChannelCount;
22438
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022439 wpalMemoryCopy(pPrefNetwListParams->aNetworks[i].aChannels,
Jeff Johnson295189b2012-06-20 16:38:30 -070022440 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].aChannels,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022441 pPrefNetwListParams->aNetworks[i].ucChannelCount);
Jeff Johnson295189b2012-06-20 16:38:30 -070022442
22443 /*Indicates the RSSI threshold for the network to be considered*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022444 pPrefNetwListParams->aNetworks[i].rssiThreshold =
Jeff Johnson295189b2012-06-20 16:38:30 -070022445 pwdiPNOScanReqParams->wdiPNOScanInfo.aNetworks[i].rssiThreshold;
22446
22447 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022448 "WDI SET PNO: SSID %d %s",
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022449 pPrefNetwListParams->aNetworks[i].ssId.length,
22450 pPrefNetwListParams->aNetworks[i].ssId.ssId);
Jeff Johnson295189b2012-06-20 16:38:30 -070022451 }
22452
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022453 pPrefNetwListParams->scanTimers.ucScanTimersCount =
Jeff Johnsone7245742012-09-05 17:12:55 -070022454 (pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.ucScanTimersCount <
Jeff Johnson295189b2012-06-20 16:38:30 -070022455 WLAN_HAL_PNO_MAX_SCAN_TIMERS)?
22456 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.ucScanTimersCount :
22457 WLAN_HAL_PNO_MAX_SCAN_TIMERS;
22458
22459 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022460 "WDI SET PNO: Scan timers count %d 24G P %d 5G Probe %d",
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022461 pPrefNetwListParams->scanTimers.ucScanTimersCount,
Jeff Johnson295189b2012-06-20 16:38:30 -070022462 pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize,
22463 pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize);
22464
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022465 for ( i = 0; i < pPrefNetwListParams->scanTimers.ucScanTimersCount; i++ )
Jeff Johnson295189b2012-06-20 16:38:30 -070022466 {
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022467 pPrefNetwListParams->scanTimers.aTimerValues[i].uTimerValue =
Jeff Johnson295189b2012-06-20 16:38:30 -070022468 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.aTimerValues[i].uTimerValue;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022469 pPrefNetwListParams->scanTimers.aTimerValues[i].uTimerRepeat =
Jeff Johnson295189b2012-06-20 16:38:30 -070022470 pwdiPNOScanReqParams->wdiPNOScanInfo.scanTimers.aTimerValues[i].uTimerRepeat;
22471 }
22472
22473 /*Copy the probe template*/
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022474 pPrefNetwListParams->us24GProbeSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070022475 (pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize<
22476 WLAN_HAL_PNO_MAX_PROBE_SIZE)?
22477 pwdiPNOScanReqParams->wdiPNOScanInfo.us24GProbeSize:
Jeff Johnsone7245742012-09-05 17:12:55 -070022478 WLAN_HAL_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022479
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022480 wpalMemoryCopy(pPrefNetwListParams->a24GProbeTemplate,
Jeff Johnsone7245742012-09-05 17:12:55 -070022481 pwdiPNOScanReqParams->wdiPNOScanInfo.a24GProbeTemplate,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022482 pPrefNetwListParams->us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070022483
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022484 pPrefNetwListParams->us5GProbeSize =
Jeff Johnson295189b2012-06-20 16:38:30 -070022485 (pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize <
22486 WLAN_HAL_PNO_MAX_PROBE_SIZE)?
22487 pwdiPNOScanReqParams->wdiPNOScanInfo.us5GProbeSize:
Jeff Johnsone7245742012-09-05 17:12:55 -070022488 WLAN_HAL_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022489
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022490 wpalMemoryCopy(pPrefNetwListParams->a5GProbeTemplate,
Jeff Johnsone7245742012-09-05 17:12:55 -070022491 pwdiPNOScanReqParams->wdiPNOScanInfo.a5GProbeTemplate,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070022492 pPrefNetwListParams->us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070022493
Jeff Johnson295189b2012-06-20 16:38:30 -070022494
22495 /*Set the output values*/
22496 *ppSendBuffer = pSendBuffer;
Jeff Johnsone7245742012-09-05 17:12:55 -070022497 *pSize = usSendSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070022498
22499 return WDI_STATUS_SUCCESS;
22500}/*WDI_PackPreferredNetworkListNew*/
22501
22502/**
22503 @brief Process Set Preferred Network List Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070022504
22505 @param pWDICtx: pointer to the WLAN DAL context
22506 pEventData: pointer to the event information structure
22507
Jeff Johnson295189b2012-06-20 16:38:30 -070022508 @return Result of the function call
22509*/
22510WDI_Status
22511WDI_ProcessSetPreferredNetworkReq
Jeff Johnsone7245742012-09-05 17:12:55 -070022512(
Jeff Johnson295189b2012-06-20 16:38:30 -070022513 WDI_ControlBlockType* pWDICtx,
22514 WDI_EventInfoType* pEventData
22515)
22516{
22517 WDI_PNOScanReqParamsType* pwdiPNOScanReqParams = NULL;
22518 WDI_PNOScanCb wdiPNOScanCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070022519 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022520 wpt_uint16 usSendSize = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070022521 WDI_Status wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070022522
22523 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022524 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022525 -------------------------------------------------------------------------*/
22526 if (( NULL == pEventData ) ||
22527 ( NULL == (pwdiPNOScanReqParams = (WDI_PNOScanReqParamsType*)pEventData->pEventData)) ||
22528 ( NULL == (wdiPNOScanCb = (WDI_PNOScanCb)pEventData->pCBfnc)))
22529 {
22530 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22531 "%s: Invalid parameters", __FUNCTION__);
22532 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022533 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022534 }
22535
22536 /*-------------------------------------------------------------------------
22537 Pack the PNO request structure based on version
22538 -------------------------------------------------------------------------*/
22539 if ( pWDICtx->wdiPNOVersion > 0 )
22540 {
22541 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022542 "%s: PNO new version %d ", __FUNCTION__,
Jeff Johnson295189b2012-06-20 16:38:30 -070022543 pWDICtx->wdiPNOVersion);
22544
22545 wdiStatus = WDI_PackPreferredNetworkListNew( pWDICtx, pwdiPNOScanReqParams,
22546 &pSendBuffer, &usSendSize);
22547 }
22548 else
22549 {
22550 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022551 "%s: PNO old version %d ", __FUNCTION__,
Jeff Johnson295189b2012-06-20 16:38:30 -070022552 pWDICtx->wdiPNOVersion);
22553
22554 wdiStatus = WDI_PackPreferredNetworkList( pWDICtx, pwdiPNOScanReqParams,
22555 &pSendBuffer, &usSendSize);
22556 }
22557
22558 if (( WDI_STATUS_SUCCESS != wdiStatus )||
22559 ( NULL == pSendBuffer )||( 0 == usSendSize ))
22560 {
22561 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22562 "%s: failed to pack request parameters", __FUNCTION__);
22563 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022564 return wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070022565 }
22566
22567 pWDICtx->wdiReqStatusCB = pwdiPNOScanReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070022568 pWDICtx->pReqStatusUserData = pwdiPNOScanReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070022569
22570 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022571 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070022572 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022573 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
22574 wdiPNOScanCb, pEventData->pUserData, WDI_SET_PREF_NETWORK_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070022575}
22576
22577/**
22578 @brief Process Set RSSI Filter Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070022579
22580 @param pWDICtx: pointer to the WLAN DAL context
22581 pEventData: pointer to the event information structure
22582
Jeff Johnson295189b2012-06-20 16:38:30 -070022583 @see
22584 @return Result of the function call
22585*/
22586WDI_Status
22587WDI_ProcessSetRssiFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070022588(
Jeff Johnson295189b2012-06-20 16:38:30 -070022589 WDI_ControlBlockType* pWDICtx,
22590 WDI_EventInfoType* pEventData
22591)
22592{
22593 WDI_SetRssiFilterReqParamsType* pwdiRssiFilterReqParams = NULL;
22594 WDI_RssiFilterCb wdiRssiFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070022595 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022596 wpt_uint16 usDataOffset = 0;
22597 wpt_uint16 usSendSize = 0;
22598 wpt_uint8 ucRssiThreshold;
22599
22600 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022601 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022602 -------------------------------------------------------------------------*/
22603 if (( NULL == pEventData ) ||
22604 ( NULL == (pwdiRssiFilterReqParams = (WDI_SetRssiFilterReqParamsType*)pEventData->pEventData)) ||
22605 ( NULL == (wdiRssiFilterCb = (WDI_RssiFilterCb)pEventData->pCBfnc)))
22606 {
22607 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22608 "%s: Invalid parameters", __FUNCTION__);
22609 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022610 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022611 }
22612
22613 /*-----------------------------------------------------------------------
22614 Get message buffer
22615 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022616 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_PREF_NETWORK_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070022617 sizeof(ucRssiThreshold),
22618 &pSendBuffer, &usDataOffset, &usSendSize))||
22619 ( usSendSize < (usDataOffset + sizeof(ucRssiThreshold) )))
22620 {
22621 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22622 "Unable to get send buffer in Set PNO req %x %x %x",
22623 pEventData, pwdiRssiFilterReqParams, wdiRssiFilterCb);
22624 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022625 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022626 }
22627
22628 ucRssiThreshold = pwdiRssiFilterReqParams->rssiThreshold;
22629
Jeff Johnsone7245742012-09-05 17:12:55 -070022630 wpalMemoryCopy( pSendBuffer+usDataOffset,
22631 &ucRssiThreshold,
22632 sizeof(ucRssiThreshold));
Jeff Johnson295189b2012-06-20 16:38:30 -070022633
22634 pWDICtx->wdiReqStatusCB = pwdiRssiFilterReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070022635 pWDICtx->pReqStatusUserData = pwdiRssiFilterReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070022636
22637 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022638 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070022639 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022640 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
22641 wdiRssiFilterCb, pEventData->pUserData, WDI_SET_RSSI_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070022642}
22643
22644
22645/**
22646 @brief Process Update Scan Params function
Jeff Johnsone7245742012-09-05 17:12:55 -070022647
22648 @param pWDICtx: pointer to the WLAN DAL context
22649 pEventData: pointer to the event information structure
22650
Jeff Johnson295189b2012-06-20 16:38:30 -070022651 @see
22652 @return Result of the function call
22653*/
22654WDI_Status
22655WDI_ProcessUpdateScanParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070022656(
Jeff Johnson295189b2012-06-20 16:38:30 -070022657 WDI_ControlBlockType* pWDICtx,
22658 WDI_EventInfoType* pEventData
22659)
22660{
22661 WDI_UpdateScanParamsInfoType* pwdiUpdateScanParams = NULL;
22662 WDI_UpdateScanParamsCb wdiUpdateScanParamsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070022663 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070022664 wpt_uint16 usDataOffset = 0;
22665 wpt_uint16 usSendSize = 0;
22666 tUpdateScanParams updateScanParams = {0};
22667
22668
22669 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022670 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022671 -------------------------------------------------------------------------*/
22672 if (( NULL == pEventData ) ||
22673 ( NULL == (pwdiUpdateScanParams = (WDI_UpdateScanParamsInfoType*)pEventData->pEventData)) ||
22674 ( NULL == (wdiUpdateScanParamsCb = (WDI_UpdateScanParamsCb)pEventData->pCBfnc)))
22675 {
22676 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22677 "%s: Invalid parameters", __FUNCTION__);
22678 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022679 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022680 }
22681
22682 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
22683 "Begin WDI Update Scan Parameters");
22684 /*-----------------------------------------------------------------------
22685 Get message buffer
22686 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022687 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_SCAN_PARAMS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070022688 sizeof(updateScanParams),
22689 &pSendBuffer, &usDataOffset, &usSendSize))||
22690 ( usSendSize < (usDataOffset + sizeof(updateScanParams) )))
22691 {
22692 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22693 "Unable to get send buffer in Update Scan Params req %x %x %x",
22694 pEventData, pwdiUpdateScanParams, wdiUpdateScanParamsCb);
22695 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022696 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022697 }
22698
22699 //
22700 // Fill updateScanParams from pwdiUpdateScanParams->wdiUpdateScanParamsInfo
22701 //
22702
22703 updateScanParams.b11dEnabled = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.b11dEnabled;
22704 updateScanParams.b11dResolved = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.b11dResolved;
Jeff Johnsone7245742012-09-05 17:12:55 -070022705 updateScanParams.ucChannelCount =
Jeff Johnson295189b2012-06-20 16:38:30 -070022706 (pwdiUpdateScanParams->wdiUpdateScanParamsInfo.ucChannelCount <
22707 WLAN_HAL_PNO_MAX_NETW_CHANNELS)?
22708 pwdiUpdateScanParams->wdiUpdateScanParamsInfo.ucChannelCount :
22709 WLAN_HAL_PNO_MAX_NETW_CHANNELS;
22710
Jeff Johnsone7245742012-09-05 17:12:55 -070022711 wpalMemoryCopy( updateScanParams.aChannels,
Jeff Johnson295189b2012-06-20 16:38:30 -070022712 pwdiUpdateScanParams->wdiUpdateScanParamsInfo.aChannels,
22713 updateScanParams.ucChannelCount);
22714
22715 updateScanParams.usActiveMinChTime = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.usActiveMinChTime;
22716 updateScanParams.usActiveMaxChTime = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.usActiveMaxChTime;
22717 updateScanParams.usPassiveMinChTime = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.usPassiveMinChTime;
22718 updateScanParams.usPassiveMaxChTime = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.usPassiveMaxChTime;
22719 updateScanParams.cbState = pwdiUpdateScanParams->wdiUpdateScanParamsInfo.cbState;
22720
Jeff Johnsone7245742012-09-05 17:12:55 -070022721 wpalMemoryCopy( pSendBuffer+usDataOffset,
22722 &updateScanParams,
22723 sizeof(updateScanParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070022724
22725 pWDICtx->wdiReqStatusCB = pwdiUpdateScanParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070022726 pWDICtx->pReqStatusUserData = pwdiUpdateScanParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070022727
22728 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
22729 "End Update Scan Parameters");
22730 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022731 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070022732 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022733 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
22734 wdiUpdateScanParamsCb, pEventData->pUserData, WDI_UPDATE_SCAN_PARAMS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070022735}
22736
22737/**
22738 @brief Process Preferred Network Found Indication function
Jeff Johnsone7245742012-09-05 17:12:55 -070022739
22740 @param pWDICtx: pointer to the WLAN DAL context
22741 pEventData: pointer to the event information structure
22742
Jeff Johnson295189b2012-06-20 16:38:30 -070022743 @see
22744 @return Result of the function call
22745*/
22746WDI_Status
22747WDI_ProcessPrefNetworkFoundInd
Jeff Johnsone7245742012-09-05 17:12:55 -070022748(
Jeff Johnson295189b2012-06-20 16:38:30 -070022749 WDI_ControlBlockType* pWDICtx,
22750 WDI_EventInfoType* pEventData
22751)
22752{
22753 WDI_LowLevelIndType wdiInd;
22754 tPrefNetwFoundInd prefNetwFoundInd = {{0}};
22755
22756
22757 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022758 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022759 -------------------------------------------------------------------------*/
22760 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
22761 ( NULL == pEventData->pEventData ))
22762 {
22763 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22764 "%s: Invalid parameters", __FUNCTION__);
22765 WDI_ASSERT( 0 );
Jeff Johnsone7245742012-09-05 17:12:55 -070022766 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022767 }
22768
22769 /*-------------------------------------------------------------------------
22770 Extract indication and send it to UMAC
22771 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022772 wpalMemoryCopy( (void *)&prefNetwFoundInd.prefNetwFoundParams,
22773 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070022774 sizeof(tPrefNetwFoundParams));
22775
22776 /*Fill in the indication parameters*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022777 wdiInd.wdiIndicationType = WDI_PREF_NETWORK_FOUND_IND;
Jeff Johnson295189b2012-06-20 16:38:30 -070022778
22779 wpalMemoryZero(wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,32);
22780
Jeff Johnsone7245742012-09-05 17:12:55 -070022781 wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength =
Jeff Johnson295189b2012-06-20 16:38:30 -070022782 (prefNetwFoundInd.prefNetwFoundParams.ssId.length < 31 )?
Jeff Johnsone7245742012-09-05 17:12:55 -070022783 prefNetwFoundInd.prefNetwFoundParams.ssId.length : 31;
Jeff Johnson295189b2012-06-20 16:38:30 -070022784
Jeff Johnsone7245742012-09-05 17:12:55 -070022785 wpalMemoryCopy( wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
22786 prefNetwFoundInd.prefNetwFoundParams.ssId.ssId,
Jeff Johnson295189b2012-06-20 16:38:30 -070022787 wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength);
22788
22789 wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.rssi =
22790 prefNetwFoundInd.prefNetwFoundParams.rssi;
22791
22792 // DEBUG
22793 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
22794 "[PNO WDI] PREF_NETWORK_FOUND_IND Type (%x) data (SSID=%s, RSSI=%d)",
22795 wdiInd.wdiIndicationType,
22796 wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
22797 wdiInd.wdiIndicationData.wdiPrefNetworkFoundInd.rssi );
22798
22799 /*Notify UMAC*/
22800 pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
Jeff Johnsone7245742012-09-05 17:12:55 -070022801
22802 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070022803}
22804
22805/**
22806 @brief Process PNO Rsp function (called when a
22807 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070022808
22809 @param pWDICtx: pointer to the WLAN DAL context
22810 pEventData: pointer to the event information structure
22811
Jeff Johnson295189b2012-06-20 16:38:30 -070022812 @see
22813 @return Result of the function call
22814*/
22815WDI_Status
22816WDI_ProcessSetPreferredNetworkRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070022817(
Jeff Johnson295189b2012-06-20 16:38:30 -070022818 WDI_ControlBlockType* pWDICtx,
22819 WDI_EventInfoType* pEventData
22820)
22821{
22822 WDI_Status wdiStatus;
22823 eHalStatus halStatus;
22824 WDI_PNOScanCb wdiPNOScanCb = NULL;
22825 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22826
22827 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022828 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022829 -------------------------------------------------------------------------*/
22830 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
22831 ( NULL == pEventData->pEventData ))
22832 {
22833 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22834 "%s: Invalid parameters", __FUNCTION__);
22835 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022836 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022837 }
22838
22839
Jeff Johnsone7245742012-09-05 17:12:55 -070022840 wdiPNOScanCb = (WDI_PNOScanCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070022841
22842 /*-------------------------------------------------------------------------
22843 Extract response and send it to UMAC
22844 -------------------------------------------------------------------------*/
22845 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070022846 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070022847
22848 /*Notify UMAC*/
22849 wdiPNOScanCb(wdiStatus, pWDICtx->pRspCBUserData);
22850
Jeff Johnsone7245742012-09-05 17:12:55 -070022851 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070022852}/*WDI_ProcessSetPreferredNetworkRsp*/
22853
22854/**
22855 @brief Process RSSI Filter Rsp function (called when a
22856 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070022857
22858 @param pWDICtx: pointer to the WLAN DAL context
22859 pEventData: pointer to the event information structure
22860
Jeff Johnson295189b2012-06-20 16:38:30 -070022861 @see
22862 @return Result of the function call
22863*/
22864WDI_Status
22865WDI_ProcessSetRssiFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070022866(
Jeff Johnson295189b2012-06-20 16:38:30 -070022867 WDI_ControlBlockType* pWDICtx,
22868 WDI_EventInfoType* pEventData
22869)
22870{
22871 WDI_Status wdiStatus;
22872 eHalStatus halStatus;
22873 WDI_RssiFilterCb wdiRssiFilterCb;
22874 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22875
22876 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022877 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022878 -------------------------------------------------------------------------*/
22879 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
22880 ( NULL == pEventData->pEventData ))
22881 {
22882 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22883 "%s: Invalid parameters", __FUNCTION__);
22884 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022885 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022886 }
22887
Jeff Johnsone7245742012-09-05 17:12:55 -070022888 wdiRssiFilterCb = (WDI_RssiFilterCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070022889
22890 /*-------------------------------------------------------------------------
22891 Extract response and send it to UMAC
22892 -------------------------------------------------------------------------*/
22893 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070022894 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070022895
22896 /*Notify UMAC*/
22897 wdiRssiFilterCb(wdiStatus, pWDICtx->pRspCBUserData);
22898
Jeff Johnsone7245742012-09-05 17:12:55 -070022899 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070022900}/*WDI_ProcessSetRssiFilterRsp*/
22901
22902/**
22903 @brief Process Update Scan Params Rsp function (called when a
22904 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070022905
22906 @param pWDICtx: pointer to the WLAN DAL context
22907 pEventData: pointer to the event information structure
22908
Jeff Johnson295189b2012-06-20 16:38:30 -070022909 @see
22910 @return Result of the function call
22911*/
22912WDI_Status
22913WDI_ProcessUpdateScanParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070022914(
Jeff Johnson295189b2012-06-20 16:38:30 -070022915 WDI_ControlBlockType* pWDICtx,
22916 WDI_EventInfoType* pEventData
22917)
22918{
22919 WDI_Status wdiStatus;
Jeff Johnsone7245742012-09-05 17:12:55 -070022920 tUpdateScanParamsResp halUpdScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070022921 WDI_UpdateScanParamsCb wdiUpdateScanParamsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070022922 wpt_uint32 uStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070022923 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22924
22925 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022926 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070022927 -------------------------------------------------------------------------*/
22928 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
22929 ( NULL == pEventData->pEventData ))
22930 {
22931 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
22932 "%s: Invalid parameters", __FUNCTION__);
22933 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070022934 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070022935 }
22936
22937 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
22938 "Process UPD scan params ptr : %x", __FUNCTION__);
22939
Jeff Johnsone7245742012-09-05 17:12:55 -070022940 wdiUpdateScanParamsCb = (WDI_UpdateScanParamsCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070022941
22942 /*-------------------------------------------------------------------------
22943 Extract response and send it to UMAC
22944 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022945 wpalMemoryCopy( (void *)&halUpdScanParams.status,
22946 pEventData->pEventData,
Jeff Johnson295189b2012-06-20 16:38:30 -070022947 sizeof(halUpdScanParams.status));
22948
22949 uStatus = halUpdScanParams.status;
22950
22951 /*Extract PNO version - 1st bit of the status */
Jeff Johnsone7245742012-09-05 17:12:55 -070022952 pWDICtx->wdiPNOVersion = (uStatus & WDI_PNO_VERSION_MASK)? 1:0;
Jeff Johnson295189b2012-06-20 16:38:30 -070022953
22954 /*Remove version bit*/
Jeff Johnsone7245742012-09-05 17:12:55 -070022955 uStatus = uStatus & ( ~(WDI_PNO_VERSION_MASK));
Jeff Johnson295189b2012-06-20 16:38:30 -070022956
Jeff Johnsone7245742012-09-05 17:12:55 -070022957 wdiStatus = WDI_HAL_2_WDI_STATUS(uStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070022958
22959 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070022960 "UPD Scan Parameters rsp with status: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070022961 halUpdScanParams.status);
22962
22963 /*Notify UMAC*/
22964 wdiUpdateScanParamsCb(wdiStatus, pWDICtx->pRspCBUserData);
22965
Jeff Johnsone7245742012-09-05 17:12:55 -070022966 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070022967}
22968#endif // FEATURE_WLAN_SCAN_PNO
22969
22970#ifdef WLAN_FEATURE_PACKET_FILTERING
Jeff Johnsone7245742012-09-05 17:12:55 -070022971WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070022972WDI_8023MulticastListReq
22973(
22974 WDI_RcvFltPktSetMcListReqParamsType* pwdiRcvFltPktSetMcListReqInfo,
22975 WDI_8023MulticastListCb wdi8023MulticastListCallback,
22976 void* pUserData
22977)
22978{
22979 WDI_EventInfoType wdiEventData;
22980 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
22981
22982 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
22983 "%s", __FUNCTION__);
22984
22985 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070022986 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070022987 ------------------------------------------------------------------------*/
22988 if ( eWLAN_PAL_FALSE == gWDIInitialized )
22989 {
22990 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
22991 "WDI API call before module is initialized - Fail request");
22992
Jeff Johnsone7245742012-09-05 17:12:55 -070022993 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070022994 }
22995
22996 /*------------------------------------------------------------------------
22997 Fill in Event data and post to the Main FSM
22998 ------------------------------------------------------------------------*/
22999 wdiEventData.wdiRequest = WDI_8023_MULTICAST_LIST_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070023000 wdiEventData.pEventData = pwdiRcvFltPktSetMcListReqInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070023001 wdiEventData.uEventDataSize = sizeof(*pwdiRcvFltPktSetMcListReqInfo);
Jeff Johnsone7245742012-09-05 17:12:55 -070023002 wdiEventData.pCBfnc = wdi8023MulticastListCallback;
Jeff Johnson295189b2012-06-20 16:38:30 -070023003 wdiEventData.pUserData = pUserData;
23004
23005 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
23006}
23007
Jeff Johnsone7245742012-09-05 17:12:55 -070023008WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070023009WDI_ReceiveFilterSetFilterReq
23010(
23011 WDI_SetRcvPktFilterReqParamsType* pwdiSetRcvPktFilterReqInfo,
23012 WDI_ReceiveFilterSetFilterCb wdiReceiveFilterSetFilterCallback,
23013 void* pUserData
23014)
23015{
23016 WDI_EventInfoType wdiEventData;
23017 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23018
23019 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23020 "%s",__FUNCTION__);
23021
23022 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023023 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070023024 ------------------------------------------------------------------------*/
23025 if ( eWLAN_PAL_FALSE == gWDIInitialized )
23026 {
23027 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23028 "WDI API call before module is initialized - Fail request");
23029
Jeff Johnsone7245742012-09-05 17:12:55 -070023030 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070023031 }
23032
23033 /*------------------------------------------------------------------------
23034 Fill in Event data and post to the Main FSM
23035 ------------------------------------------------------------------------*/
23036 wdiEventData.wdiRequest = WDI_RECEIVE_FILTER_SET_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070023037 wdiEventData.pEventData = pwdiSetRcvPktFilterReqInfo;
23038 wdiEventData.uEventDataSize = sizeof(*pwdiSetRcvPktFilterReqInfo) +
23039 (pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams
Jeff Johnson295189b2012-06-20 16:38:30 -070023040 * sizeof(WDI_RcvPktFilterFieldParams) - 1);
Jeff Johnsone7245742012-09-05 17:12:55 -070023041 wdiEventData.pCBfnc = wdiReceiveFilterSetFilterCallback;
Jeff Johnson295189b2012-06-20 16:38:30 -070023042 wdiEventData.pUserData = pUserData;
23043
23044
23045 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
23046}
23047
Jeff Johnsone7245742012-09-05 17:12:55 -070023048WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070023049WDI_FilterMatchCountReq
23050(
23051 WDI_RcvFltPktMatchCntReqParamsType* pwdiRcvFltPktMatchCntReqInfo,
23052 WDI_FilterMatchCountCb wdiFilterMatchCountCallback,
23053 void* pUserData
23054)
23055{
23056 WDI_EventInfoType wdiEventData;
23057 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23058
23059 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23060 "%s",__FUNCTION__);
23061
23062 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023063 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070023064 ------------------------------------------------------------------------*/
23065 if ( eWLAN_PAL_FALSE == gWDIInitialized )
23066 {
23067 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23068 "WDI API call before module is initialized - Fail request");
23069
Jeff Johnsone7245742012-09-05 17:12:55 -070023070 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070023071 }
23072
23073 /*------------------------------------------------------------------------
23074 Fill in Event data and post to the Main FSM
23075 ------------------------------------------------------------------------*/
23076 wdiEventData.wdiRequest = WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070023077 wdiEventData.pEventData = pwdiRcvFltPktMatchCntReqInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070023078 wdiEventData.uEventDataSize = sizeof(*pwdiRcvFltPktMatchCntReqInfo);
Jeff Johnsone7245742012-09-05 17:12:55 -070023079 wdiEventData.pCBfnc = wdiFilterMatchCountCallback;
Jeff Johnson295189b2012-06-20 16:38:30 -070023080 wdiEventData.pUserData = pUserData;
23081
23082
23083 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
23084}
23085
Jeff Johnsone7245742012-09-05 17:12:55 -070023086WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070023087WDI_ReceiveFilterClearFilterReq
23088(
23089 WDI_RcvFltPktClearReqParamsType* pwdiRcvFltPktClearReqInfo,
23090 WDI_ReceiveFilterClearFilterCb wdiReceiveFilterClearFilterCallback,
23091 void* pUserData
23092)
23093{
23094 WDI_EventInfoType wdiEventData;
23095 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23096
23097 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23098 "%s",__FUNCTION__);
23099
23100 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023101 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070023102 ------------------------------------------------------------------------*/
23103 if ( eWLAN_PAL_FALSE == gWDIInitialized )
23104 {
23105 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23106 "WDI API call before module is initialized - Fail request");
23107
Jeff Johnsone7245742012-09-05 17:12:55 -070023108 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070023109 }
23110
23111 /*------------------------------------------------------------------------
23112 Fill in Event data and post to the Main FSM
23113 ------------------------------------------------------------------------*/
23114 wdiEventData.wdiRequest = WDI_RECEIVE_FILTER_CLEAR_FILTER_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070023115 wdiEventData.pEventData = pwdiRcvFltPktClearReqInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070023116 wdiEventData.uEventDataSize = sizeof(*pwdiRcvFltPktClearReqInfo);
Jeff Johnsone7245742012-09-05 17:12:55 -070023117 wdiEventData.pCBfnc = wdiReceiveFilterClearFilterCallback;
Jeff Johnson295189b2012-06-20 16:38:30 -070023118 wdiEventData.pUserData = pUserData;
23119
23120
23121 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
23122}
23123
23124/**
23125 @brief Process 8023 Multicast List Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070023126
23127 @param pWDICtx: pointer to the WLAN DAL context
23128 pEventData: pointer to the event information structure
23129
Jeff Johnson295189b2012-06-20 16:38:30 -070023130 @see
23131 @return Result of the function call
23132*/
23133WDI_Status
23134WDI_Process8023MulticastListReq
Jeff Johnsone7245742012-09-05 17:12:55 -070023135(
Jeff Johnson295189b2012-06-20 16:38:30 -070023136 WDI_ControlBlockType* pWDICtx,
23137 WDI_EventInfoType* pEventData
23138)
23139{
23140 WDI_RcvFltPktSetMcListReqParamsType* pwdiFltPktSetMcListReqParamsType = NULL;
23141 WDI_8023MulticastListCb wdi8023MulticastListCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070023142 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023143 wpt_uint16 usDataOffset = 0;
23144 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023145 tpHalRcvFltMcAddrListType pRcvFltMcAddrListType;
Jeff Johnson295189b2012-06-20 16:38:30 -070023146 wpt_uint8 i;
Jeff Johnsone7245742012-09-05 17:12:55 -070023147 wpt_uint8 ucCurrentBSSSesIdx = 0;
23148 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023149
23150 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23151 "%s",__FUNCTION__);
23152
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023153 pRcvFltMcAddrListType = wpalMemoryAllocate(sizeof(tHalRcvFltMcAddrListType)) ;
23154 if( NULL == pRcvFltMcAddrListType )
23155 {
23156 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23157 "Failed to alloc in WDI_Process8023MulticastListReq");
23158 return WDI_STATUS_E_FAILURE;
23159 }
23160
Jeff Johnson295189b2012-06-20 16:38:30 -070023161 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023162 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023163 -------------------------------------------------------------------------*/
23164 if (( NULL == pEventData ) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023165 ( NULL == (pwdiFltPktSetMcListReqParamsType =
Jeff Johnson295189b2012-06-20 16:38:30 -070023166 (WDI_RcvFltPktSetMcListReqParamsType*)pEventData->pEventData)) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023167 ( NULL == (wdi8023MulticastListCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070023168 (WDI_8023MulticastListCb)pEventData->pCBfnc)))
23169 {
23170 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23171 "%s: Invalid parameters", __FUNCTION__);
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023172 wpalMemoryFree(pRcvFltMcAddrListType);
Jeff Johnson295189b2012-06-20 16:38:30 -070023173 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023174 return WDI_STATUS_E_FAILURE;
23175 }
23176
23177 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
23178 pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
23179 &pBSSSes);
23180 if ( NULL == pBSSSes )
23181 {
23182 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23183 " %s : Association for this BSSID does not exist",__FUNCTION__);
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023184 wpalMemoryFree(pRcvFltMcAddrListType);
Jeff Johnsone7245742012-09-05 17:12:55 -070023185 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023186 }
23187
23188 /*-----------------------------------------------------------------------
23189 Get message buffer
23190 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023191 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
23192 WDI_8023_MULTICAST_LIST_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070023193 sizeof(tHalRcvFltMcAddrListType),
23194 &pSendBuffer, &usDataOffset, &usSendSize))||
23195 ( usSendSize < (usDataOffset + sizeof(tHalRcvFltMcAddrListType))))
23196 {
23197 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23198 "Unable to get send buffer in "
23199 "WDI_Process8023MulticastListReq() %x %x %x",
23200 pEventData, pwdiFltPktSetMcListReqParamsType,
23201 wdi8023MulticastListCb);
23202 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023203 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023204 }
23205
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023206 pRcvFltMcAddrListType->cMulticastAddr =
Jeff Johnsone7245742012-09-05 17:12:55 -070023207 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt;
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023208 for( i = 0; i < pRcvFltMcAddrListType->cMulticastAddr; i++ )
Jeff Johnson295189b2012-06-20 16:38:30 -070023209 {
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023210 wpalMemoryCopy(pRcvFltMcAddrListType->multicastAddr[i],
Jeff Johnson295189b2012-06-20 16:38:30 -070023211 pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i],
23212 sizeof(tSirMacAddr));
23213 }
23214
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023215 pRcvFltMcAddrListType->bssIdx = pBSSSes->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070023216 wpalMemoryCopy( pSendBuffer+usDataOffset,
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023217 pRcvFltMcAddrListType,
23218 sizeof(tHalRcvFltMcAddrListType));
Jeff Johnson295189b2012-06-20 16:38:30 -070023219
23220 pWDICtx->wdiReqStatusCB = pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070023221 pWDICtx->pReqStatusUserData = pwdiFltPktSetMcListReqParamsType->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070023222
23223
Madan Mohan Koyyalamudicfb9f4d2012-10-21 12:35:08 -070023224 wpalMemoryFree(pRcvFltMcAddrListType);
Jeff Johnson295189b2012-06-20 16:38:30 -070023225 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023226 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070023227 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023228 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -070023229 wdi8023MulticastListCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -070023230 WDI_8023_MULTICAST_LIST_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070023231}
23232
23233/**
23234 @brief Process Receive Filter Set Filter Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070023235
23236 @param pWDICtx: pointer to the WLAN DAL context
23237 pEventData: pointer to the event information structure
23238
Jeff Johnson295189b2012-06-20 16:38:30 -070023239 @see
23240 @return Result of the function call
23241*/
23242WDI_Status
23243WDI_ProcessReceiveFilterSetFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070023244(
Jeff Johnson295189b2012-06-20 16:38:30 -070023245 WDI_ControlBlockType* pWDICtx,
23246 WDI_EventInfoType* pEventData
23247)
23248{
23249 WDI_SetRcvPktFilterReqParamsType* pwdiSetRcvPktFilterReqInfo = NULL;
23250 WDI_ReceiveFilterSetFilterCb wdiReceiveFilterSetFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070023251 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023252 wpt_uint16 usDataOffset = 0;
23253 wpt_uint16 usSendSize = 0;
23254 wpt_uint32 usRcvPktFilterCfgSize;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023255 tHalRcvPktFilterCfgType *pRcvPktFilterCfg = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023256 wpt_uint8 i;
Jeff Johnsone7245742012-09-05 17:12:55 -070023257 wpt_uint8 ucCurrentBSSSesIdx = 0;
23258 WDI_BSSSessionType* pBSSSes = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023259 tHalSessionizedRcvPktFilterCfgType *pSessRcvPktFilterCfg = NULL;
23260 wpt_uint32 usSessRcvPktFilterCfgSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070023261
23262 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23263 "%s",__FUNCTION__);
23264
23265 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023266 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023267 -------------------------------------------------------------------------*/
23268 if (( NULL == pEventData ) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023269 ( NULL == (pwdiSetRcvPktFilterReqInfo =
Jeff Johnson295189b2012-06-20 16:38:30 -070023270 (WDI_SetRcvPktFilterReqParamsType*)pEventData->pEventData)) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023271 ( NULL == (wdiReceiveFilterSetFilterCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070023272 (WDI_ReceiveFilterSetFilterCb)pEventData->pCBfnc)))
23273 {
23274 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23275 "%s: Invalid parameters", __FUNCTION__);
23276 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023277 return WDI_STATUS_E_FAILURE;
23278 }
23279
23280 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
23281 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.bssId,
23282 &pBSSSes);
23283 if ( NULL == pBSSSes )
23284 {
23285 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23286 " %s : Association for this BSSID does not exist",__FUNCTION__);
23287 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023288 }
23289
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023290 if( WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION) )
23291 {
Jeff Johnson295189b2012-06-20 16:38:30 -070023292
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023293 usSessRcvPktFilterCfgSize = sizeof(tHalSessionizedRcvPktFilterCfgType) +
23294 ((pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams - 1)
23295 * sizeof(tHalSessionizedRcvPktFilterCfgType));
23296
23297 pSessRcvPktFilterCfg = (tHalSessionizedRcvPktFilterCfgType *)wpalMemoryAllocate(
23298 usSessRcvPktFilterCfgSize);
23299
23300 if(NULL == pSessRcvPktFilterCfg)
23301 {
23302 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23303 "%s: Failed to allocate memory for "
23304 "tHalRcvPktFilterCfgType: %x %x %x ",
23305 __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
23306 WDI_ASSERT(0);
23307 return WDI_STATUS_E_FAILURE;
23308 }
23309
23310 wpalMemoryZero(pSessRcvPktFilterCfg, usSessRcvPktFilterCfgSize);
23311
23312 /*-----------------------------------------------------------------------
23313 Get message buffer
23314 -----------------------------------------------------------------------*/
23315
23316 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RECEIVE_FILTER_SET_FILTER_REQ,
23317 usSessRcvPktFilterCfgSize,
23318 &pSendBuffer, &usDataOffset, &usSendSize))||
23319 ( usSendSize < (usDataOffset + usSessRcvPktFilterCfgSize)))
23320 {
23321 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23322 "Unable to get send buffer in "
23323 "WDI_ProcessReceiveFilterSetFilterReq() %x %x %x",
23324 pEventData, pwdiSetRcvPktFilterReqInfo,
23325 wdiReceiveFilterSetFilterCb);
23326 WDI_ASSERT(0);
23327 wpalMemoryFree(pSessRcvPktFilterCfg);
23328 return WDI_STATUS_E_FAILURE;
23329 }
23330
23331 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23332 "UsData Off %d UsSend %d cfg %d",usDataOffset,
23333 usSendSize,pSessRcvPktFilterCfg);
23334
23335 pSessRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId;
23336 pSessRcvPktFilterCfg->filterType = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterType;
23337 pSessRcvPktFilterCfg->numParams = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams;
23338 pSessRcvPktFilterCfg->coleasceTime = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.coalesceTime;
23339
23340 pSessRcvPktFilterCfg->bssIdx = pBSSSes->ucBSSIdx;
23341
23342 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23343 "Out: FID %d FT %d",pSessRcvPktFilterCfg->filterId,
23344 pSessRcvPktFilterCfg->filterType);
23345 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23346 "NParams %d CT %d",pSessRcvPktFilterCfg->numParams,
23347 pSessRcvPktFilterCfg->coleasceTime);
23348
23349 for ( i = 0; i < pSessRcvPktFilterCfg->numParams; i++ )
23350 {
23351 pSessRcvPktFilterCfg->paramsData[i].protocolLayer =
23352 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].protocolLayer;
23353 pSessRcvPktFilterCfg->paramsData[i].cmpFlag =
23354 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].cmpFlag;
23355 pSessRcvPktFilterCfg->paramsData[i].dataOffset =
23356 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataOffset;
23357 pSessRcvPktFilterCfg->paramsData[i].dataLength =
23358 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataLength;
23359
23360 wpalMemoryCopy(&pSessRcvPktFilterCfg->paramsData[i].compareData,
23361 &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].compareData,
23362 8);
23363 wpalMemoryCopy(&pSessRcvPktFilterCfg->paramsData[i].dataMask,
23364 &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataMask,
23365 8);
23366
23367 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23368 "Out:Proto %d Comp Flag %d \n",
23369 pSessRcvPktFilterCfg->paramsData[i].protocolLayer,
23370 pSessRcvPktFilterCfg->paramsData[i].cmpFlag);
23371
23372 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23373 "Data Offset %d Data Len %d\n",
23374 pSessRcvPktFilterCfg->paramsData[i].dataOffset,
23375 pSessRcvPktFilterCfg->paramsData[i].dataLength);
23376
23377 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23378 "CData: %d:%d:%d:%d:%d:%d\n",
23379 pSessRcvPktFilterCfg->paramsData[i].compareData[0],
23380 pSessRcvPktFilterCfg->paramsData[i].compareData[1],
23381 pSessRcvPktFilterCfg->paramsData[i].compareData[2],
23382 pSessRcvPktFilterCfg->paramsData[i].compareData[3],
23383 pSessRcvPktFilterCfg->paramsData[i].compareData[4],
23384 pSessRcvPktFilterCfg->paramsData[i].compareData[5]);
23385
23386 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23387 "MData: %d:%d:%d:%d:%d:%d\n",
23388 pSessRcvPktFilterCfg->paramsData[i].dataMask[0],
23389 pSessRcvPktFilterCfg->paramsData[i].dataMask[1],
23390 pSessRcvPktFilterCfg->paramsData[i].dataMask[2],
23391 pSessRcvPktFilterCfg->paramsData[i].dataMask[3],
23392 pSessRcvPktFilterCfg->paramsData[i].dataMask[4],
23393 pSessRcvPktFilterCfg->paramsData[i].dataMask[5]);
23394 }
23395
23396 wpalMemoryCopy( pSendBuffer+usDataOffset,
23397 pSessRcvPktFilterCfg,
23398 usSessRcvPktFilterCfgSize);
23399
23400
23401 pWDICtx->wdiReqStatusCB = pwdiSetRcvPktFilterReqInfo->wdiReqStatusCB;
23402 pWDICtx->pReqStatusUserData = pwdiSetRcvPktFilterReqInfo->pUserData;
23403
23404 wpalMemoryFree(pSessRcvPktFilterCfg);
23405
23406 }
23407 /*If SLM_SESSIONIZATION is not supported then do this */
23408 else
23409 {
23410 usRcvPktFilterCfgSize = sizeof(tHalRcvPktFilterCfgType) +
23411 ((pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams - 1)
23412 * sizeof(tHalRcvPktFilterParams));
23413
23414 pRcvPktFilterCfg = (tHalRcvPktFilterCfgType *)wpalMemoryAllocate(
Jeff Johnson295189b2012-06-20 16:38:30 -070023415 usRcvPktFilterCfgSize);
23416
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023417 if(NULL == pRcvPktFilterCfg)
23418 {
23419 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23420 "%s: Failed to allocate memory for "
23421 "tHalRcvPktFilterCfgType: %x %x %x ",
23422 __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
23423 WDI_ASSERT(0);
23424 return WDI_STATUS_E_FAILURE;
23425 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023426
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023427 wpalMemoryZero(pRcvPktFilterCfg, usRcvPktFilterCfgSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070023428
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023429 /*-----------------------------------------------------------------------
23430 Get message buffer
23431 -----------------------------------------------------------------------*/
23432 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_RECEIVE_FILTER_SET_FILTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070023433 usRcvPktFilterCfgSize,
23434 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023435 ( usSendSize < (usDataOffset + usRcvPktFilterCfgSize)))
23436 {
23437 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
Jeff Johnson295189b2012-06-20 16:38:30 -070023438 "Unable to get send buffer in "
23439 "WDI_ProcessReceiveFilterSetFilterReq() %x %x %x",
23440 pEventData, pwdiSetRcvPktFilterReqInfo,
23441 wdiReceiveFilterSetFilterCb);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023442 WDI_ASSERT(0);
23443 wpalMemoryFree(pRcvPktFilterCfg);
23444 return WDI_STATUS_E_FAILURE;
23445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023446
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023447 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070023448 "UsData Off %d UsSend %d cfg %d",usDataOffset,
Jeff Johnson295189b2012-06-20 16:38:30 -070023449 usSendSize,usRcvPktFilterCfgSize);
23450
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023451 pRcvPktFilterCfg->filterId = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterId;
23452 pRcvPktFilterCfg->filterType = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.filterType;
23453 pRcvPktFilterCfg->numParams = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.numFieldParams;
23454 pRcvPktFilterCfg->coalesceTime = pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.coalesceTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070023455
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023456 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070023457 "Out: FID %d FT %d",pRcvPktFilterCfg->filterId,
Jeff Johnson295189b2012-06-20 16:38:30 -070023458 pRcvPktFilterCfg->filterType);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023459 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070023460 "NParams %d CT %d",pRcvPktFilterCfg->numParams,
Jeff Johnsone7245742012-09-05 17:12:55 -070023461 pRcvPktFilterCfg->coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070023462
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023463 for ( i = 0; i < pRcvPktFilterCfg->numParams; i++ )
23464 {
23465 pRcvPktFilterCfg->paramsData[i].protocolLayer =
23466 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].protocolLayer;
23467 pRcvPktFilterCfg->paramsData[i].cmpFlag =
23468 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].cmpFlag;
23469 pRcvPktFilterCfg->paramsData[i].dataOffset =
23470 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataOffset;
23471 pRcvPktFilterCfg->paramsData[i].dataLength =
23472 pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070023473
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023474 wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].compareData,
Jeff Johnson295189b2012-06-20 16:38:30 -070023475 &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].compareData,
23476 8);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023477 wpalMemoryCopy(&pRcvPktFilterCfg->paramsData[i].dataMask,
Jeff Johnson295189b2012-06-20 16:38:30 -070023478 &pwdiSetRcvPktFilterReqInfo->wdiPktFilterCfg.paramsData[i].dataMask,
23479 8);
23480
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023481 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070023482 "Out:Proto %d Comp Flag %d \n",
Jeff Johnsone7245742012-09-05 17:12:55 -070023483 pRcvPktFilterCfg->paramsData[i].protocolLayer,
Jeff Johnson295189b2012-06-20 16:38:30 -070023484 pRcvPktFilterCfg->paramsData[i].cmpFlag);
23485
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023486 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23487 "Data Offset %d Data Len %d\n",
23488 pRcvPktFilterCfg->paramsData[i].dataOffset,
23489 pRcvPktFilterCfg->paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070023490
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023491 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23492 "CData: %d:%d:%d:%d:%d:%d\n",
23493 pRcvPktFilterCfg->paramsData[i].compareData[0],
23494 pRcvPktFilterCfg->paramsData[i].compareData[1],
23495 pRcvPktFilterCfg->paramsData[i].compareData[2],
23496 pRcvPktFilterCfg->paramsData[i].compareData[3],
23497 pRcvPktFilterCfg->paramsData[i].compareData[4],
23498 pRcvPktFilterCfg->paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070023499
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023500 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23501 "MData: %d:%d:%d:%d:%d:%d\n",
23502 pRcvPktFilterCfg->paramsData[i].dataMask[0],
23503 pRcvPktFilterCfg->paramsData[i].dataMask[1],
23504 pRcvPktFilterCfg->paramsData[i].dataMask[2],
23505 pRcvPktFilterCfg->paramsData[i].dataMask[3],
23506 pRcvPktFilterCfg->paramsData[i].dataMask[4],
23507 pRcvPktFilterCfg->paramsData[i].dataMask[5]);
23508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023509
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023510 wpalMemoryCopy( pSendBuffer+usDataOffset,
Jeff Johnsone7245742012-09-05 17:12:55 -070023511 pRcvPktFilterCfg,
23512 usRcvPktFilterCfgSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070023513
23514
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023515 pWDICtx->wdiReqStatusCB = pwdiSetRcvPktFilterReqInfo->wdiReqStatusCB;
23516 pWDICtx->pReqStatusUserData = pwdiSetRcvPktFilterReqInfo->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070023517
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023518 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23519 "%s",__FUNCTION__);
23520 wpalMemoryFree(pRcvPktFilterCfg);
23521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023522 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023523 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070023524 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023525 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -070023526 wdiReceiveFilterSetFilterCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -070023527 WDI_RECEIVE_FILTER_SET_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070023528}
23529
23530/**
23531 @brief Process Packet Filter Match Count Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070023532
23533 @param pWDICtx: pointer to the WLAN DAL context
23534 pEventData: pointer to the event information structure
23535
Jeff Johnson295189b2012-06-20 16:38:30 -070023536 @see
23537 @return Result of the function call
23538*/
23539WDI_Status
23540WDI_ProcessFilterMatchCountReq
Jeff Johnsone7245742012-09-05 17:12:55 -070023541(
Jeff Johnson295189b2012-06-20 16:38:30 -070023542 WDI_ControlBlockType* pWDICtx,
23543 WDI_EventInfoType* pEventData
23544)
23545{
23546 WDI_RcvFltPktMatchCntReqParamsType* pwdiRcvFltPktMatchCntReqParamsType =
23547 NULL;
23548 WDI_FilterMatchCountCb wdiFilterMatchCountCb =
23549 NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070023550 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023551 wpt_uint16 usDataOffset = 0;
23552 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023553 tHalRcvFltPktMatchCntReqParams rcvFltPktMatchCntReqParam = {0};
23554 wpt_uint8 ucCurrentBSSSesIdx = 0;
23555 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023556
23557 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23558 "%s",__FUNCTION__);
23559
23560 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023561 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023562 -------------------------------------------------------------------------*/
23563 if (( NULL == pEventData ) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023564 ( NULL == (pwdiRcvFltPktMatchCntReqParamsType =
Jeff Johnson295189b2012-06-20 16:38:30 -070023565 (WDI_RcvFltPktMatchCntReqParamsType*)pEventData->pEventData)) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023566 ( NULL == (wdiFilterMatchCountCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070023567 (WDI_FilterMatchCountCb)pEventData->pCBfnc)))
23568 {
23569 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23570 "%s: Invalid parameters", __FUNCTION__);
23571 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023572 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023573 }
23574
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023575 ucCurrentBSSSesIdx = WDI_FindAssocSession( pWDICtx,
23576 pwdiRcvFltPktMatchCntReqParamsType->bssId,
23577 &pBSSSes);
23578 if ( NULL == pBSSSes )
23579 {
23580 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23581 " %s : Association for this BSSID does not exist",__FUNCTION__);
23582 return WDI_STATUS_E_FAILURE;
23583 }
23584
Jeff Johnson295189b2012-06-20 16:38:30 -070023585 /*-----------------------------------------------------------------------
23586 Get message buffer
23587 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023588 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
23589 WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023590 sizeof(tHalRcvFltPktMatchCntReqParams),
Jeff Johnson295189b2012-06-20 16:38:30 -070023591 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023592 ( usSendSize < (usDataOffset + sizeof(tHalRcvFltPktMatchCntReqParams))))
Jeff Johnson295189b2012-06-20 16:38:30 -070023593 {
23594 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23595 "Unable to get send buffer in "
23596 "WDI_ProcessFilterMatchCountReq() %x %x %x",
23597 pEventData, pwdiRcvFltPktMatchCntReqParamsType,
23598 wdiFilterMatchCountCb);
23599 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023600 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023601 }
23602
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023603 rcvFltPktMatchCntReqParam.bssIdx = pBSSSes->ucBSSIdx;
23604 wpalMemoryCopy( pSendBuffer+usDataOffset,
23605 &rcvFltPktMatchCntReqParam,
23606 sizeof(rcvFltPktMatchCntReqParam));
23607
Jeff Johnson295189b2012-06-20 16:38:30 -070023608 //
23609 // Don't need to fill send buffer other than header
23610 //
23611 pWDICtx->wdiReqStatusCB = pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070023612 pWDICtx->pReqStatusUserData = pwdiRcvFltPktMatchCntReqParamsType->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070023613
23614
23615 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023616 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070023617 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023618 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
23619 wdiFilterMatchCountCb,
23620 pEventData->pUserData,
23621 WDI_PACKET_COALESCING_FILTER_MATCH_COUNT_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070023622}
23623
23624/**
23625 @brief Process Receive Filter Clear Filter Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070023626
23627 @param pWDICtx: pointer to the WLAN DAL context
23628 pEventData: pointer to the event information structure
23629
Jeff Johnson295189b2012-06-20 16:38:30 -070023630 @see
23631 @return Result of the function call
23632*/
23633WDI_Status
23634WDI_ProcessReceiveFilterClearFilterReq
Jeff Johnsone7245742012-09-05 17:12:55 -070023635(
Jeff Johnson295189b2012-06-20 16:38:30 -070023636 WDI_ControlBlockType* pWDICtx,
23637 WDI_EventInfoType* pEventData
23638)
Jeff Johnsone7245742012-09-05 17:12:55 -070023639{
Jeff Johnson295189b2012-06-20 16:38:30 -070023640 WDI_RcvFltPktClearReqParamsType* pwdiRcvFltPktClearReqParamsType = NULL;
23641 WDI_ReceiveFilterClearFilterCb wdiRcvFltPktClearFilterCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070023642 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023643 wpt_uint16 usDataOffset = 0;
23644 wpt_uint16 usSendSize = 0;
23645 tHalRcvFltPktClearParam rcvFltPktClearParam;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023646 wpt_uint8 ucCurrentSessionId = 0;
Jeff Johnsone7245742012-09-05 17:12:55 -070023647 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070023648
23649 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23650 "%s",__FUNCTION__);
23651
23652 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023653 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023654 -------------------------------------------------------------------------*/
23655 if (( NULL == pEventData ) ||
23656 ( NULL == (pwdiRcvFltPktClearReqParamsType =
23657 (WDI_RcvFltPktClearReqParamsType*)pEventData->pEventData)) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070023658 ( NULL == (wdiRcvFltPktClearFilterCb =
Jeff Johnson295189b2012-06-20 16:38:30 -070023659 (WDI_ReceiveFilterClearFilterCb)pEventData->pCBfnc)))
23660 {
23661 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23662 "%s: Invalid parameters", __FUNCTION__);
23663 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023664 return WDI_STATUS_E_FAILURE;
23665 }
23666
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023667 ucCurrentSessionId = WDI_FindAssocSession( pWDICtx,
Jeff Johnsone7245742012-09-05 17:12:55 -070023668 pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
23669 &pBSSSes);
23670 if ( NULL == pBSSSes )
23671 {
23672 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
23673 " %s : Association for this BSSID does not exist",__FUNCTION__);
23674 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023675 }
23676
23677 /*-----------------------------------------------------------------------
23678 Get message buffer
23679 -----------------------------------------------------------------------*/
23680 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
Jeff Johnsone7245742012-09-05 17:12:55 -070023681 WDI_RECEIVE_FILTER_CLEAR_FILTER_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070023682 sizeof(tHalRcvFltPktClearParam),
23683 &pSendBuffer, &usDataOffset, &usSendSize))||
23684 ( usSendSize < (usDataOffset + sizeof(tHalRcvFltPktClearParam))))
23685 {
23686 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23687 "Unable to get send buffer in "
23688 "WDI_ProcessReceiveFilterClearFilterReq() %x %x %x",
23689 pEventData, pwdiRcvFltPktClearReqParamsType,
23690 wdiRcvFltPktClearFilterCb);
23691 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023692 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023693 }
23694
23695
23696 rcvFltPktClearParam.status = pwdiRcvFltPktClearReqParamsType->
Jeff Johnsone7245742012-09-05 17:12:55 -070023697 filterClearParam.status;
Jeff Johnson295189b2012-06-20 16:38:30 -070023698 rcvFltPktClearParam.filterId = pwdiRcvFltPktClearReqParamsType->
Jeff Johnsone7245742012-09-05 17:12:55 -070023699 filterClearParam.filterId;
Jeff Johnson295189b2012-06-20 16:38:30 -070023700
Jeff Johnsone7245742012-09-05 17:12:55 -070023701 rcvFltPktClearParam.bssIdx = pBSSSes->ucBSSIdx;
23702 wpalMemoryCopy( pSendBuffer+usDataOffset,
23703 &rcvFltPktClearParam,
23704 sizeof(rcvFltPktClearParam));
Jeff Johnson295189b2012-06-20 16:38:30 -070023705
23706 pWDICtx->wdiReqStatusCB = pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070023707 pWDICtx->pReqStatusUserData = pwdiRcvFltPktClearReqParamsType->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070023708
23709
23710 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023711 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070023712 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070023713 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
Jeff Johnson295189b2012-06-20 16:38:30 -070023714 wdiRcvFltPktClearFilterCb, pEventData->pUserData,
Jeff Johnsone7245742012-09-05 17:12:55 -070023715 WDI_RECEIVE_FILTER_CLEAR_FILTER_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070023716}
23717
23718/**
23719 @brief Process 8023 Multicast List Response function
Jeff Johnsone7245742012-09-05 17:12:55 -070023720
23721 @param pWDICtx: pointer to the WLAN DAL context
23722 pEventData: pointer to the event information structure
23723
Jeff Johnson295189b2012-06-20 16:38:30 -070023724 @see
23725 @return Result of the function call
23726*/
23727WDI_Status
23728WDI_Process8023MulticastListRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070023729(
Jeff Johnson295189b2012-06-20 16:38:30 -070023730 WDI_ControlBlockType* pWDICtx,
23731 WDI_EventInfoType* pEventData
23732)
23733{
Jeff Johnson295189b2012-06-20 16:38:30 -070023734 eHalStatus halStatus;
23735 WDI_8023MulticastListCb wdi8023MulticastListCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023736 tHalRcvFltPktSetMcListRspType halRcvFltPktSetMcListRsp;
23737 WDI_RcvFltPktSetMcListRspParamsType wdiRcvFltPktSetMcListRspInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070023738 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23739
23740 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23741 "%s",__FUNCTION__);
23742
23743 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023744 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023745 -------------------------------------------------------------------------*/
23746 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
23747 ( NULL == pEventData->pEventData ))
23748 {
23749 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23750 "%s: Invalid parameters", __FUNCTION__);
23751 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023752 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023753 }
23754
Jeff Johnsone7245742012-09-05 17:12:55 -070023755 wdi8023MulticastListCb = (WDI_8023MulticastListCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070023756
23757 /*-------------------------------------------------------------------------
23758 Extract response and send it to UMAC
23759 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023760 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
23761 {
23762 wpalMemoryCopy( &halRcvFltPktSetMcListRsp,
23763 pEventData->pEventData,
23764 sizeof(halRcvFltPktSetMcListRsp));
23765
23766 wdiRcvFltPktSetMcListRspInfo.wdiStatus =
23767 WDI_HAL_2_WDI_STATUS(halRcvFltPktSetMcListRsp.status);
23768 wdiRcvFltPktSetMcListRspInfo.bssIdx =
23769 halRcvFltPktSetMcListRsp.bssIdx;
23770 }
23771 else
23772 {
23773 halStatus = *((eHalStatus*)pEventData->pEventData);
23774 wdiRcvFltPktSetMcListRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
23775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023776
23777 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023778 wdi8023MulticastListCb(&wdiRcvFltPktSetMcListRspInfo, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070023779
Jeff Johnsone7245742012-09-05 17:12:55 -070023780 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070023781}
23782
23783/**
23784 @brief Process Set Rsp function (called when a
23785 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070023786
23787 @param pWDICtx: pointer to the WLAN DAL context
23788 pEventData: pointer to the event information structure
23789
Jeff Johnson295189b2012-06-20 16:38:30 -070023790 @see
23791 @return Result of the function call
23792*/
23793WDI_Status
23794WDI_ProcessReceiveFilterSetFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070023795(
Jeff Johnson295189b2012-06-20 16:38:30 -070023796 WDI_ControlBlockType* pWDICtx,
23797 WDI_EventInfoType* pEventData
23798)
23799{
Jeff Johnson295189b2012-06-20 16:38:30 -070023800 eHalStatus halStatus;
23801 WDI_ReceiveFilterSetFilterCb wdiReceiveFilterSetFilterCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023802 tHalSetPktFilterRspParams halSetPktFilterRspParams;
23803 WDI_SetRcvPktFilterRspParamsType wdiSetRcvPktFilterRspInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070023804 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23805
23806 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23807 "%s",__FUNCTION__);
23808
23809 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023810 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023811 -------------------------------------------------------------------------*/
23812 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
23813 ( NULL == pEventData->pEventData ))
23814 {
23815 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23816 "%s: Invalid parameters", __FUNCTION__);
23817 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023818 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023819 }
23820
23821 wdiReceiveFilterSetFilterCb = (WDI_ReceiveFilterSetFilterCb)pWDICtx->
Jeff Johnsone7245742012-09-05 17:12:55 -070023822 pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070023823
23824 /*-------------------------------------------------------------------------
23825 Extract response and send it to UMAC
23826 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023827 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
23828 {
23829 wpalMemoryCopy( &halSetPktFilterRspParams,
23830 pEventData->pEventData,
23831 sizeof(halSetPktFilterRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070023832
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023833 wdiSetRcvPktFilterRspInfo.bssIdx = halSetPktFilterRspParams.bssIdx;
23834 wdiSetRcvPktFilterRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halSetPktFilterRspParams.status);
23835 }
23836 else
23837 {
23838 halStatus = *((eHalStatus*)pEventData->pEventData);
23839 wdiSetRcvPktFilterRspInfo.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
23840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023841 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023842 wdiReceiveFilterSetFilterCb(&wdiSetRcvPktFilterRspInfo, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070023843
Jeff Johnsone7245742012-09-05 17:12:55 -070023844 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070023845}
23846
23847/**
23848 @brief Process Packet Filter Match Count Response function
Jeff Johnsone7245742012-09-05 17:12:55 -070023849
23850 @param pWDICtx: pointer to the WLAN DAL context
23851 pEventData: pointer to the event information structure
23852
Jeff Johnson295189b2012-06-20 16:38:30 -070023853 @see
23854 @return Result of the function call
23855*/
23856WDI_Status
23857WDI_ProcessFilterMatchCountRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070023858(
Jeff Johnson295189b2012-06-20 16:38:30 -070023859 WDI_ControlBlockType* pWDICtx,
23860 WDI_EventInfoType* pEventData
23861)
23862{
Jeff Johnson295189b2012-06-20 16:38:30 -070023863 eHalStatus halStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070023864 WDI_FilterMatchCountCb wdiFilterMatchCountCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023865 tHalRcvFltPktMatchRspParams halRcvFltrPktMatachRsp;
23866 WDI_RcvFltPktMatchCntRspParamsType wdiRcvFltPktMatchRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070023867
23868 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23869
23870 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23871 "%s",__FUNCTION__);
23872
23873 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023874 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023875 -------------------------------------------------------------------------*/
23876 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
23877 ( NULL == pEventData->pEventData ))
23878 {
23879 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23880 "%s: Invalid parameters", __FUNCTION__);
23881 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023882 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023883 }
23884
Jeff Johnsone7245742012-09-05 17:12:55 -070023885 wdiFilterMatchCountCb = (WDI_FilterMatchCountCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070023886
23887 /*-------------------------------------------------------------------------
23888 Extract response and send it to UMAC
23889 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023890 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
23891 {
23892 wpalMemoryCopy( &halRcvFltrPktMatachRsp,
23893 pEventData->pEventData,
23894 sizeof(halRcvFltrPktMatachRsp));
23895
23896 wdiRcvFltPktMatchRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halRcvFltrPktMatachRsp.status);
23897 wdiRcvFltPktMatchRspParams.bssIdx = halRcvFltrPktMatachRsp.bssIdx;
23898 }
23899 else
23900 {
23901 halStatus = *((eHalStatus*)pEventData->pEventData);
23902 wdiRcvFltPktMatchRspParams.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
23903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023904
23905 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023906 wdiFilterMatchCountCb(&wdiRcvFltPktMatchRspParams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070023907
Jeff Johnsone7245742012-09-05 17:12:55 -070023908 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070023909}
23910
23911/**
23912 @brief Process Receive Filter Clear Filter Response function
Jeff Johnsone7245742012-09-05 17:12:55 -070023913
23914 @param pWDICtx: pointer to the WLAN DAL context
23915 pEventData: pointer to the event information structure
23916
Jeff Johnson295189b2012-06-20 16:38:30 -070023917 @see
23918 @return Result of the function call
23919*/
23920WDI_Status
23921WDI_ProcessReceiveFilterClearFilterRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070023922(
Jeff Johnson295189b2012-06-20 16:38:30 -070023923 WDI_ControlBlockType* pWDICtx,
23924 WDI_EventInfoType* pEventData
23925)
23926{
Jeff Johnson295189b2012-06-20 16:38:30 -070023927 eHalStatus halStatus;
23928 WDI_ReceiveFilterClearFilterCb wdiReceiveFilterClearFilterCb;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023929 tHalRcvFltPktClearParam halRcvFltPktClearRspMsg;
23930 WDI_RcvFltPktClearRspParamsType wdiRcvFltPktClearRspParamsType;
Jeff Johnson295189b2012-06-20 16:38:30 -070023931 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
23932
23933 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
23934 "%s",__FUNCTION__);
23935
23936 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070023937 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070023938 -------------------------------------------------------------------------*/
23939 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
23940 ( NULL == pEventData->pEventData ))
23941 {
23942 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
23943 "%s: Invalid parameters", __FUNCTION__);
23944 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070023945 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070023946 }
23947
23948 wdiReceiveFilterClearFilterCb = (WDI_ReceiveFilterClearFilterCb)pWDICtx->
Jeff Johnsone7245742012-09-05 17:12:55 -070023949 pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070023950
23951 /*-------------------------------------------------------------------------
23952 Extract response and send it to UMAC
23953 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023954 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
23955 {
23956 wpalMemoryCopy( &halRcvFltPktClearRspMsg,
23957 pEventData->pEventData,
23958 sizeof(halRcvFltPktClearRspMsg));
23959
23960 wdiRcvFltPktClearRspParamsType.wdiStatus =
23961 WDI_HAL_2_WDI_STATUS(halRcvFltPktClearRspMsg.status);
23962 wdiRcvFltPktClearRspParamsType.bssIdx =
23963 halRcvFltPktClearRspMsg.bssIdx;
23964 }
23965 else
23966 {
23967 halStatus = *((eHalStatus*)pEventData->pEventData);
23968 wdiRcvFltPktClearRspParamsType.wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
23969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070023970
23971 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070023972 wdiReceiveFilterClearFilterCb(&wdiRcvFltPktClearRspParamsType, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070023973
Jeff Johnsone7245742012-09-05 17:12:55 -070023974 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070023975}
23976#endif // WLAN_FEATURE_PACKET_FILTERING
23977
23978/**
23979 @brief Process Shutdown Rsp function
23980 There is no shutdown response comming from HAL
23981 - function just kept for simmetry
Jeff Johnsone7245742012-09-05 17:12:55 -070023982
Jeff Johnson295189b2012-06-20 16:38:30 -070023983 @param pWDICtx: pointer to the WLAN DAL context
Jeff Johnsone7245742012-09-05 17:12:55 -070023984 pEventData: pointer to the event information structure
Jeff Johnson295189b2012-06-20 16:38:30 -070023985
23986 @see
23987 @return Result of the function call
23988*/
23989WDI_Status
23990WDI_ProcessShutdownRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070023991(
Jeff Johnson295189b2012-06-20 16:38:30 -070023992 WDI_ControlBlockType* pWDICtx,
23993 WDI_EventInfoType* pEventData
23994)
23995{
23996 /*There is no shutdown response comming from HAL - function just kept for
23997 simmetry */
23998 WDI_ASSERT(0);
23999 return WDI_STATUS_SUCCESS;
24000}/*WDI_ProcessShutdownRsp*/
24001
24002/**
24003 @brief WDI_SetPowerParamsReq
24004
Jeff Johnsone7245742012-09-05 17:12:55 -070024005 @param pwdiPowerParamsReqParams: the Set Power Params as
Jeff Johnson295189b2012-06-20 16:38:30 -070024006 specified by the Device Interface
Jeff Johnsone7245742012-09-05 17:12:55 -070024007
Jeff Johnson295189b2012-06-20 16:38:30 -070024008 wdiPowerParamsCb: callback for passing back the response
24009 of the Set Power Params operation received from the
24010 device
Jeff Johnsone7245742012-09-05 17:12:55 -070024011
Jeff Johnson295189b2012-06-20 16:38:30 -070024012 pUserData: user data will be passed back with the
Jeff Johnsone7245742012-09-05 17:12:55 -070024013 callback
24014
Jeff Johnson295189b2012-06-20 16:38:30 -070024015 @return Result of the function call
24016*/
Jeff Johnsone7245742012-09-05 17:12:55 -070024017WDI_Status
Jeff Johnson295189b2012-06-20 16:38:30 -070024018WDI_SetPowerParamsReq
24019(
24020 WDI_SetPowerParamsReqParamsType* pwdiPowerParamsReqParams,
24021 WDI_SetPowerParamsCb wdiPowerParamsCb,
24022 void* pUserData
24023)
24024{
24025 WDI_EventInfoType wdiEventData;
24026 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24027
24028 /*------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070024029 Sanity Check
Jeff Johnson295189b2012-06-20 16:38:30 -070024030 ------------------------------------------------------------------------*/
24031 if ( eWLAN_PAL_FALSE == gWDIInitialized )
24032 {
24033 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24034 "WDI API call before module is initialized - Fail request");
24035
Jeff Johnsone7245742012-09-05 17:12:55 -070024036 return WDI_STATUS_E_NOT_ALLOWED;
Jeff Johnson295189b2012-06-20 16:38:30 -070024037 }
24038
24039 /*------------------------------------------------------------------------
24040 Fill in Event data and post to the Main FSM
24041 ------------------------------------------------------------------------*/
24042 wdiEventData.wdiRequest = WDI_SET_POWER_PARAMS_REQ;
Jeff Johnsone7245742012-09-05 17:12:55 -070024043 wdiEventData.pEventData = pwdiPowerParamsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070024044 wdiEventData.uEventDataSize = sizeof(*pwdiPowerParamsReqParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070024045 wdiEventData.pCBfnc = wdiPowerParamsCb;
Jeff Johnson295189b2012-06-20 16:38:30 -070024046 wdiEventData.pUserData = pUserData;
24047
24048 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
24049}/*WDI_SetPowerParamsReq*/
24050
24051/**
24052 @brief Process Set Power Params Request function
Jeff Johnsone7245742012-09-05 17:12:55 -070024053
24054 @param pWDICtx: pointer to the WLAN DAL context
24055 pEventData: pointer to the event information structure
24056
Jeff Johnson295189b2012-06-20 16:38:30 -070024057 @see
24058 @return Result of the function call
24059*/
24060WDI_Status
24061WDI_ProcessSetPowerParamsReq
Jeff Johnsone7245742012-09-05 17:12:55 -070024062(
Jeff Johnson295189b2012-06-20 16:38:30 -070024063 WDI_ControlBlockType* pWDICtx,
24064 WDI_EventInfoType* pEventData
24065)
24066{
24067 WDI_SetPowerParamsReqParamsType* pwdiPowerParamsReqParams = NULL;
24068 WDI_SetPowerParamsCb wdiPowerParamsCb = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070024069 wpt_uint8* pSendBuffer = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070024070 wpt_uint16 usDataOffset = 0;
24071 wpt_uint16 usSendSize = 0;
24072 tSetPowerParamsType powerParams;
24073
24074 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070024075 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070024076 -------------------------------------------------------------------------*/
24077 if (( NULL == pEventData ) ||
24078 ( NULL == (pwdiPowerParamsReqParams = (WDI_SetPowerParamsReqParamsType*)pEventData->pEventData)) ||
24079 ( NULL == (wdiPowerParamsCb = (WDI_SetPowerParamsCb)pEventData->pCBfnc)))
24080 {
24081 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24082 "%s: Invalid parameters", __FUNCTION__);
24083 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070024084 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070024085 }
24086
24087 /*-----------------------------------------------------------------------
24088 Get message buffer
24089 -----------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070024090 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_POWER_PARAMS_REQ,
Jeff Johnson295189b2012-06-20 16:38:30 -070024091 sizeof(powerParams),
24092 &pSendBuffer, &usDataOffset, &usSendSize))||
24093 ( usSendSize < (usDataOffset + sizeof(powerParams) )))
24094 {
24095 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24096 "Unable to get send buffer in Set PNO req %x %x %x",
24097 pEventData, pwdiPowerParamsReqParams, wdiPowerParamsCb);
24098 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070024099 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070024100 }
24101
24102 /* Ignore DTIM */
Jeff Johnsone7245742012-09-05 17:12:55 -070024103 powerParams.uIgnoreDTIM =
Jeff Johnson295189b2012-06-20 16:38:30 -070024104 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uIgnoreDTIM;
24105
24106 /*DTIM Period*/
Jeff Johnsone7245742012-09-05 17:12:55 -070024107 powerParams.uDTIMPeriod =
Jeff Johnson295189b2012-06-20 16:38:30 -070024108 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uDTIMPeriod;
24109
24110 /* Listen Interval */
Jeff Johnsone7245742012-09-05 17:12:55 -070024111 powerParams.uListenInterval=
Jeff Johnson295189b2012-06-20 16:38:30 -070024112 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uListenInterval;
24113
24114 /* Broadcast Multicas Filter */
Jeff Johnsone7245742012-09-05 17:12:55 -070024115 powerParams.uBcastMcastFilter =
Jeff Johnson295189b2012-06-20 16:38:30 -070024116 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uBcastMcastFilter;
24117
24118 /* Beacon Early Termination */
Jeff Johnsone7245742012-09-05 17:12:55 -070024119 powerParams.uEnableBET =
Jeff Johnson295189b2012-06-20 16:38:30 -070024120 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uEnableBET;
24121
24122 /* Beacon Early Termination Interval */
Jeff Johnsone7245742012-09-05 17:12:55 -070024123 powerParams.uBETInterval =
24124 pwdiPowerParamsReqParams->wdiSetPowerParamsInfo.uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070024125
Jeff Johnsone7245742012-09-05 17:12:55 -070024126
24127 wpalMemoryCopy( pSendBuffer+usDataOffset,
24128 &powerParams,
24129 sizeof(powerParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070024130
24131 pWDICtx->wdiReqStatusCB = pwdiPowerParamsReqParams->wdiReqStatusCB;
Jeff Johnsone7245742012-09-05 17:12:55 -070024132 pWDICtx->pReqStatusUserData = pwdiPowerParamsReqParams->pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070024133
24134 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070024135 Send Get STA Request to HAL
Jeff Johnson295189b2012-06-20 16:38:30 -070024136 -------------------------------------------------------------------------*/
Jeff Johnsone7245742012-09-05 17:12:55 -070024137 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
24138 wdiPowerParamsCb, pEventData->pUserData, WDI_SET_POWER_PARAMS_RESP);
Jeff Johnson295189b2012-06-20 16:38:30 -070024139}
24140
24141/**
24142 @brief Process Power Params Rsp function (called when a
24143 response is being received over the bus from HAL)
Jeff Johnsone7245742012-09-05 17:12:55 -070024144
24145 @param pWDICtx: pointer to the WLAN DAL context
24146 pEventData: pointer to the event information structure
24147
Jeff Johnson295189b2012-06-20 16:38:30 -070024148 @see
24149 @return Result of the function call
24150*/
24151WDI_Status
24152WDI_ProcessSetPowerParamsRsp
Jeff Johnsone7245742012-09-05 17:12:55 -070024153(
Jeff Johnson295189b2012-06-20 16:38:30 -070024154 WDI_ControlBlockType* pWDICtx,
24155 WDI_EventInfoType* pEventData
24156)
24157{
24158 WDI_Status wdiStatus;
24159 eHalStatus halStatus;
24160 WDI_SetPowerParamsCb wdiPowerParamsCb;
24161 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24162
24163 /*-------------------------------------------------------------------------
Jeff Johnsone7245742012-09-05 17:12:55 -070024164 Sanity check
Jeff Johnson295189b2012-06-20 16:38:30 -070024165 -------------------------------------------------------------------------*/
24166 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
24167 ( NULL == pEventData->pEventData ))
24168 {
24169 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24170 "%s: Invalid parameters", __FUNCTION__);
24171 WDI_ASSERT(0);
Jeff Johnsone7245742012-09-05 17:12:55 -070024172 return WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070024173 }
24174
Jeff Johnsone7245742012-09-05 17:12:55 -070024175 wdiPowerParamsCb = (WDI_SetPowerParamsCb)pWDICtx->pfncRspCB;
Jeff Johnson295189b2012-06-20 16:38:30 -070024176
24177 /*-------------------------------------------------------------------------
24178 Extract response and send it to UMAC
24179 -------------------------------------------------------------------------*/
24180 halStatus = *((eHalStatus*)pEventData->pEventData);
Jeff Johnsone7245742012-09-05 17:12:55 -070024181 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070024182
24183 /*Notify UMAC*/
24184 wdiPowerParamsCb(wdiStatus, pWDICtx->pRspCBUserData);
24185
Jeff Johnsone7245742012-09-05 17:12:55 -070024186 return WDI_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -070024187}/*WDI_ProcessSetPowerParamsRsp*/
24188
24189#ifdef WLAN_FEATURE_GTK_OFFLOAD
24190/**
24191 @brief WDI_GTKOffloadReq will be called when the upper MAC
24192 wants to set GTK Rekey Counter while in power save. Upon
24193 the call of this API the WLAN DAL will pack and send a
24194 HAL GTK offload request message to the lower RIVA
24195 sub-system if DAL is in state STARTED.
24196
24197 In state BUSY this request will be queued. Request won't
24198 be allowed in any other state.
24199
24200 WDI_PostAssocReq must have been called.
24201
24202 @param pwdiGtkOffloadParams: the GTK offload as specified
24203 by the Device Interface
24204
24205 wdiGtkOffloadCb: callback for passing back the response
24206 of the GTK offload operation received from the device
24207
24208 pUserData: user data will be passed back with the
24209 callback
24210
24211 @see WDI_PostAssocReq
24212 @return Result of the function call
24213*/
24214WDI_Status
24215WDI_GTKOffloadReq
24216(
24217 WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg,
24218 WDI_GtkOffloadCb wdiGtkOffloadCb,
24219 void* pUserData
24220)
24221{
24222 WDI_EventInfoType wdiEventData = {0};
24223 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24224
24225 /*------------------------------------------------------------------------
24226 Sanity Check
24227 ------------------------------------------------------------------------*/
24228 if ( eWLAN_PAL_FALSE == gWDIInitialized )
24229 {
24230 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24231 "WDI API call before module is initialized - Fail request");
24232
24233 return WDI_STATUS_E_NOT_ALLOWED;
24234 }
24235
24236 /*------------------------------------------------------------------------
24237 Fill in Event data and post to the Main FSM
24238 ------------------------------------------------------------------------*/
24239 wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_REQ;
24240 wdiEventData.pEventData = pwdiGtkOffloadReqMsg;
24241 wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadReqMsg);;
24242 wdiEventData.pCBfnc = wdiGtkOffloadCb;
24243 wdiEventData.pUserData = pUserData;
24244
24245 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
24246}
24247
24248
24249/**
24250 @brief WDI_GTKOffloadGetInfoReq will be called when the upper
24251 MAC wants to get GTK Rekey Counter while in power save.
24252 Upon the call of this API the WLAN DAL will pack and
24253 send a HAL GTK offload request message to the lower RIVA
24254 sub-system if DAL is in state STARTED.
24255
24256 In state BUSY this request will be queued. Request won't
24257 be allowed in any other state.
24258
24259 WDI_PostAssocReq must have been called.
24260
24261 @param pwdiGtkOffloadGetInfoReqMsg: the GTK Offload
24262 Information Message as specified by the
24263 Device Interface
24264
24265 wdiGtkOffloadGetInfoCb: callback for passing back the
24266 response of the GTK offload operation received from the
24267 device
24268
24269 pUserData: user data will be passed back with the
24270 callback
24271
24272 @see WDI_PostAssocReq
24273 @return Result of the function call
24274*/
24275WDI_Status
24276WDI_GTKOffloadGetInfoReq
24277(
24278 WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg,
24279 WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb,
24280 void* pUserData
24281)
24282{
24283 WDI_EventInfoType wdiEventData = {0};
24284 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24285
24286 /*------------------------------------------------------------------------
24287 Sanity Check
24288 ------------------------------------------------------------------------*/
24289 if ( eWLAN_PAL_FALSE == gWDIInitialized )
24290 {
24291 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24292 "WDI API call before module is initialized - Fail request");
24293
24294 return WDI_STATUS_E_NOT_ALLOWED;
24295 }
24296
24297 /*------------------------------------------------------------------------
24298 Fill in Event data and post to the Main FSM
24299 ------------------------------------------------------------------------*/
24300 wdiEventData.wdiRequest = WDI_GTK_OFFLOAD_GETINFO_REQ;
24301 wdiEventData.pEventData = pwdiGtkOffloadGetInfoReqMsg;
24302 wdiEventData.uEventDataSize = sizeof(*pwdiGtkOffloadGetInfoReqMsg);
24303 wdiEventData.pCBfnc = wdiGtkOffloadGetInfoCb;
24304 wdiEventData.pUserData = pUserData;
24305
24306 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
24307}
24308
24309
24310/**
24311 @brief Process set GTK Offload Request function
24312
24313 @param pWDICtx: pointer to the WLAN DAL context
24314 pEventData: pointer to the event information structure
24315
24316 @see
24317 @return Result of the function call
24318*/
24319WDI_Status
24320WDI_ProcessGTKOffloadReq
24321(
24322 WDI_ControlBlockType* pWDICtx,
24323 WDI_EventInfoType* pEventData
24324)
24325{
24326 WDI_GtkOffloadReqMsg* pwdiGtkOffloadReqMsg = NULL;
24327 WDI_GtkOffloadCb wdiGtkOffloadCb = NULL;
24328 wpt_uint8* pSendBuffer = NULL;
24329 wpt_uint16 usDataOffset = 0;
24330 wpt_uint16 usSendSize = 0;
24331 tHalGtkOffloadReqParams gtkOffloadReqParams = {0};
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024332 wpt_uint8 ucCurrentSessionId = 0;
24333 WDI_BSSSessionType* pBSSSes = NULL;
24334
Jeff Johnson295189b2012-06-20 16:38:30 -070024335 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24336
24337 /*-------------------------------------------------------------------------
24338 Sanity check
24339 -------------------------------------------------------------------------*/
24340 if (( NULL == pEventData ) ||
24341 ( NULL == (pwdiGtkOffloadReqMsg = (WDI_GtkOffloadReqMsg*)pEventData->pEventData)) ||
24342 ( NULL == (wdiGtkOffloadCb = (WDI_GtkOffloadCb)pEventData->pCBfnc)))
24343 {
24344 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24345 "%s: Invalid parameters", __FUNCTION__);
24346 WDI_ASSERT(0);
24347 return WDI_STATUS_E_FAILURE;
24348 }
24349
24350 /*-----------------------------------------------------------------------
24351 Get message buffer
24352 -----------------------------------------------------------------------*/
24353 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_REQ,
24354 sizeof(gtkOffloadReqParams),
24355 &pSendBuffer, &usDataOffset, &usSendSize))||
24356 ( usSendSize < (usDataOffset + sizeof(gtkOffloadReqParams) )))
24357 {
24358 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24359 "Unable to get send buffer in GTK offload req %x %x %x",
24360 pEventData, pwdiGtkOffloadReqMsg, wdiGtkOffloadCb);
24361 WDI_ASSERT(0);
24362 return WDI_STATUS_E_FAILURE;
24363 }
24364
24365 //
24366 // Fill gtkOffloadReqParams from pwdiGtkOffloadReqMsg->gtkOffloadReqParams
24367 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024368 ucCurrentSessionId = WDI_FindAssocSession( pWDICtx,
24369 pwdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
24370 &pBSSSes);
24371 if ( NULL == pBSSSes )
24372 {
24373 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24374 " %s : Association for this BSSID does not exist", __FUNCTION__);
24375 return WDI_STATUS_E_FAILURE;
24376 }
24377
24378 gtkOffloadReqParams.bssIdx = pBSSSes->ucBSSIdx;
24379
Jeff Johnson295189b2012-06-20 16:38:30 -070024380 gtkOffloadReqParams.ulFlags = pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags;
24381 // Copy KCK
24382 wpalMemoryCopy(&(gtkOffloadReqParams.aKCK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), 16);
24383 // Copy KEK
24384 wpalMemoryCopy(&(gtkOffloadReqParams.aKEK[0]), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), 16);
24385 // Copy KeyReplayCounter
24386 wpalMemoryCopy(&(gtkOffloadReqParams.ullKeyReplayCounter), &(pwdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter), sizeof(v_U64_t));
24387
24388 wpalMemoryCopy( pSendBuffer+usDataOffset,
24389 &gtkOffloadReqParams,
24390 sizeof(gtkOffloadReqParams));
24391
24392 pWDICtx->wdiReqStatusCB = pwdiGtkOffloadReqMsg->wdiReqStatusCB;
24393 pWDICtx->pReqStatusUserData = pwdiGtkOffloadReqMsg->pUserData;
24394
24395 /*-------------------------------------------------------------------------
24396 Send Get STA Request to HAL
24397 -------------------------------------------------------------------------*/
24398 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
24399 wdiGtkOffloadCb, pEventData->pUserData, WDI_GTK_OFFLOAD_RESP);
24400}
24401
24402
24403/**
24404 @brief Process GTK Offload Get Information Request function
24405
24406 @param pWDICtx: pointer to the WLAN DAL context
24407 pEventData: pointer to the event information structure
24408
24409 @see
24410 @return Result of the function call
24411*/
24412WDI_Status
24413WDI_ProcessGTKOffloadGetInfoReq
24414(
24415 WDI_ControlBlockType* pWDICtx,
24416 WDI_EventInfoType* pEventData
24417)
24418{
24419 WDI_GtkOffloadGetInfoReqMsg* pwdiGtkOffloadGetInfoReqMsg = NULL;
24420 WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL;
24421 wpt_uint8* pSendBuffer = NULL;
24422 wpt_uint16 usDataOffset = 0;
24423 wpt_uint16 usSendSize = 0;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024424 tHalGtkOffloadGetInfoReqParams halGtkOffloadGetInfoReqParams;
24425 wpt_uint8 ucCurrentSessionId = 0;
24426 WDI_BSSSessionType* pBSSSes = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070024427
24428 /*-------------------------------------------------------------------------
24429 Sanity check
24430 -------------------------------------------------------------------------*/
24431 if (( NULL == pEventData ) ||
24432 ( NULL == (pwdiGtkOffloadGetInfoReqMsg = (WDI_GtkOffloadGetInfoReqMsg*)pEventData->pEventData)) ||
24433 ( NULL == (wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pEventData->pCBfnc)))
24434 {
24435 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24436 "%s: Invalid parameters", __FUNCTION__);
24437 WDI_ASSERT(0);
24438 return WDI_STATUS_E_FAILURE;
24439 }
24440
24441 /*-----------------------------------------------------------------------
24442 Get message buffer
24443 -----------------------------------------------------------------------*/
24444 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_GETINFO_REQ,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024445 sizeof(halGtkOffloadGetInfoReqParams),
Jeff Johnson295189b2012-06-20 16:38:30 -070024446 &pSendBuffer, &usDataOffset, &usSendSize))||
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024447 ( usSendSize < ( usDataOffset + sizeof(halGtkOffloadGetInfoReqParams)))
Jeff Johnson295189b2012-06-20 16:38:30 -070024448 {
24449 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24450 "Unable to get send buffer in WDI_ProcessGTKOffloadGetInfoReq() %x %x %x",
24451 pEventData, pwdiGtkOffloadGetInfoReqMsg, wdiGtkOffloadGetInfoCb);
24452 WDI_ASSERT(0);
24453 return WDI_STATUS_E_FAILURE;
24454 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024455 ucCurrentSessionId = WDI_FindAssocSession( pWDICtx,
24456 pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
24457 &pBSSSes);
24458 if ( NULL == pBSSSes )
24459 {
24460 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24461 " %s : Association for this BSSID does not exist",__FUNCTION__);
24462 return WDI_STATUS_E_FAILURE;
24463 }
24464 halGtkOffloadGetInfoReqParams.bssIdx = pBSSSes->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070024465
24466 //
24467 // Don't need to fill send buffer other than header
24468 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024469 wpalMemoryCopy( pSendBuffer+usDataOffset,
24470 &halGtkOffloadGetInfoReqParams,
24471 sizeof(halGtkOffloadGetInfoReqParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070024472
24473 pWDICtx->wdiReqStatusCB = pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB;
24474 pWDICtx->pReqStatusUserData = pwdiGtkOffloadGetInfoReqMsg->pUserData;
24475
24476 /*-------------------------------------------------------------------------
24477 Send Get STA Request to HAL
24478 -------------------------------------------------------------------------*/
24479 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
24480 wdiGtkOffloadGetInfoCb, pEventData->pUserData, WDI_GTK_OFFLOAD_GETINFO_RESP);
24481}
24482
24483/**
24484 @brief Process host offload Rsp function (called when a
24485 response is being received over the bus from HAL)
24486
24487 @param pWDICtx: pointer to the WLAN DAL context
24488 pEventData: pointer to the event information structure
24489
24490 @see
24491 @return Result of the function call
24492*/
24493WDI_Status
24494WDI_ProcessGtkOffloadRsp
24495(
24496 WDI_ControlBlockType* pWDICtx,
24497 WDI_EventInfoType* pEventData
24498)
24499{
Jeff Johnson295189b2012-06-20 16:38:30 -070024500 eHalStatus halStatus;
24501 WDI_GtkOffloadCb wdiGtkOffloadCb = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024502 tHalGtkOffloadRspParams halGtkOffloadRspParams;
24503 WDI_GtkOffloadRspParams wdiGtkOffloadRsparams;
Jeff Johnson295189b2012-06-20 16:38:30 -070024504 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24505
24506 wdiGtkOffloadCb = (WDI_GtkOffloadCb)pWDICtx->pfncRspCB;
24507
24508 /*-------------------------------------------------------------------------
24509 Sanity check
24510 -------------------------------------------------------------------------*/
24511 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
24512 ( NULL == pEventData->pEventData))
24513 {
24514 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24515 "%s: Invalid parameters", __FUNCTION__);
24516 WDI_ASSERT(0);
24517 return WDI_STATUS_E_FAILURE;
24518 }
24519
24520 /*-------------------------------------------------------------------------
24521 Extract response and send it to UMAC
24522 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024523 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
24524 {
24525 wpalMemoryCopy( &halGtkOffloadRspParams,
24526 pEventData->pEventData,
24527 sizeof(halGtkOffloadRspParams));
24528
24529 wdiGtkOffloadRsparams.ulStatus =
24530 WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.status);
24531 wdiGtkOffloadRsparams.bssIdx =
24532 halGtkOffloadRspParams.bssIdx;
24533 }
24534 else
24535 {
24536 halStatus = *((eHalStatus*)pEventData->pEventData);
24537 wdiGtkOffloadRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus);
24538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070024539
24540 /*Notify UMAC*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024541 wdiGtkOffloadCb( &wdiGtkOffloadRsparams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070024542
24543 return WDI_STATUS_SUCCESS;
24544}
24545
24546/**
24547 @brief Process GTK Offload Get Information Response function
24548
24549 @param pWDICtx: pointer to the WLAN DAL context
24550 pEventData: pointer to the event information structure
24551
24552 @see
24553 @return Result of the function call
24554*/
24555WDI_Status
24556WDI_ProcessGTKOffloadGetInfoRsp
24557(
24558 WDI_ControlBlockType* pWDICtx,
24559 WDI_EventInfoType* pEventData
24560)
24561{
Jeff Johnson295189b2012-06-20 16:38:30 -070024562 eHalStatus halStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070024563 WDI_GtkOffloadGetInfoCb wdiGtkOffloadGetInfoCb = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024564 tHalGtkOffloadGetInfoRspParams halGtkOffloadGetInfoRspParams;
24565 WDI_GtkOffloadGetInfoRspParams wdiGtkOffloadGetInfoRsparams;
Jeff Johnson295189b2012-06-20 16:38:30 -070024566
24567 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24568
24569 wdiGtkOffloadGetInfoCb = (WDI_GtkOffloadGetInfoCb)pWDICtx->pfncRspCB;
24570
24571 /*-------------------------------------------------------------------------
24572 Sanity check
24573 -------------------------------------------------------------------------*/
24574 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
24575 ( NULL == pEventData->pEventData ))
24576 {
24577 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24578 "%s: Invalid parameters", __FUNCTION__);
24579 WDI_ASSERT(0);
24580 return WDI_STATUS_E_FAILURE;
24581 }
24582
24583 /*-------------------------------------------------------------------------
24584 Extract response and send it to UMAC
24585 -------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024586 if(WDI_getFwWlanFeatCaps(SLM_SESSIONIZATION))
24587 {
24588 wpalMemoryCopy( &halGtkOffloadGetInfoRspParams,
24589 pEventData->pEventData,
24590 sizeof(halGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070024591
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024592 wdiGtkOffloadGetInfoRsparams.ulStatus =
24593 WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.status);
24594 wdiGtkOffloadGetInfoRsparams.ullKeyReplayCounter =
24595 halGtkOffloadGetInfoRspParams.ullKeyReplayCounter;
24596 wdiGtkOffloadGetInfoRsparams.ulTotalRekeyCount =
24597 halGtkOffloadGetInfoRspParams.ulTotalRekeyCount;
24598 wdiGtkOffloadGetInfoRsparams.ulGTKRekeyCount =
24599 halGtkOffloadGetInfoRspParams.ulGTKRekeyCount;
24600 wdiGtkOffloadGetInfoRsparams.ulIGTKRekeyCount =
24601 halGtkOffloadGetInfoRspParams.ulIGTKRekeyCount;
24602 wdiGtkOffloadGetInfoRsparams.bssIdx =
24603 halGtkOffloadGetInfoRspParams.bssIdx;
24604 }
24605 else
24606 {
24607 halStatus = *((eHalStatus*)pEventData->pEventData);
24608 wdiGtkOffloadGetInfoRsparams.ulStatus = WDI_HAL_2_WDI_STATUS(halStatus);
24609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070024610 /*Notify UMAC*/
24611 //wdiUpdateScanParamsCb(wdiStatus, pWDICtx->pRspCBUserData);
24612 //wdiReceiveFilterClearFilterCb(wdiStatus, pWDICtx->pRspCBUserData);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070024613 wdiGtkOffloadGetInfoCb(&wdiGtkOffloadGetInfoRsparams, pWDICtx->pRspCBUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -070024614
24615 return WDI_STATUS_SUCCESS;
24616}
24617#endif // WLAN_FEATURE_GTK_OFFLOAD
24618
24619#ifdef WLAN_WAKEUP_EVENTS
24620WDI_Status
24621WDI_ProcessWakeReasonInd
24622(
24623 WDI_ControlBlockType* pWDICtx,
24624 WDI_EventInfoType* pEventData
24625)
24626{
24627 WDI_LowLevelIndType *pWdiInd;
24628 tpWakeReasonParams pWakeReasonParams;
24629 wpt_uint32 allocSize = 0;
24630
24631 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
24632 "+%s", __FUNCTION__);
24633
24634 /*-------------------------------------------------------------------------
24635 Sanity check
24636 -------------------------------------------------------------------------*/
24637 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
24638 ( NULL == pEventData->pEventData ))
24639 {
24640 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24641 "%s: Invalid parameters", __FUNCTION__);
24642 WDI_ASSERT( 0 );
24643 return WDI_STATUS_E_FAILURE;
24644 }
24645
24646 /*-------------------------------------------------------------------------
24647 Extract indication and send it to UMAC
24648 -------------------------------------------------------------------------*/
24649 pWakeReasonParams = (tpWakeReasonParams)(pEventData->pEventData);
24650
24651 allocSize = sizeof(WDI_LowLevelIndType) + (pWakeReasonParams->ulStoredDataLen - 1);
24652
24653 //Allocate memory for WDI_WakeReasonIndType structure
24654 pWdiInd = wpalMemoryAllocate(allocSize) ;
24655
24656 if(NULL == pWdiInd)
24657 {
24658 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24659 "%s: Failed to allocate memory for WDI_WakeReasonIndType: %x %x %x ",
24660 __FUNCTION__, pWDICtx, pEventData, pEventData->pEventData);
24661 WDI_ASSERT(0);
24662 return WDI_STATUS_E_FAILURE;
24663 }
24664
24665 wpalMemoryZero(pWdiInd, allocSize);
24666
24667 /* Fill in the indication parameters*/
24668 // Fill wdiInd.wdiIndicationData.wakeReasonInd structure from wakeReasonInd.wakeReasonParams
24669 pWdiInd->wdiIndicationType = WDI_WAKE_REASON_IND;
24670 pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReason = pWakeReasonParams->ulReason;
24671 pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg = pWakeReasonParams->ulReasonArg;
24672 pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen = pWakeReasonParams->ulStoredDataLen;
24673 pWdiInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen = pWakeReasonParams->ulActualDataLen;
24674 wpalMemoryCopy( (void *)&(pWdiInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
24675 &(pWakeReasonParams->aDataStart[0]),
24676 pWakeReasonParams->ulStoredDataLen);
24677
24678 /*Notify UMAC*/
24679 pWDICtx->wdiLowLevelIndCB( pWdiInd, pWDICtx->pIndUserData );
24680
24681 //Free memory allocated for WDI_WakeReasonIndType structure
24682 wpalMemoryFree(pWdiInd);
24683
24684 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
24685 "-%s", __FUNCTION__);
24686
24687 return WDI_STATUS_SUCCESS;
24688}
24689#endif // WLAN_WAKEUP_EVENTS
24690
24691void WDI_GetWcnssCompiledApiVersion
24692(
24693 WDI_WlanVersionType *pWcnssApiVersion
24694)
24695{
24696 pWcnssApiVersion->major = WLAN_HAL_VER_MAJOR;
24697 pWcnssApiVersion->minor = WLAN_HAL_VER_MINOR;
24698 pWcnssApiVersion->version = WLAN_HAL_VER_VERSION;
24699 pWcnssApiVersion->revision = WLAN_HAL_VER_REVISION;
24700}
24701
24702/**
24703 @brief Process Set TM Level Rsp function (called when a
24704 response is being received over the bus from HAL)
24705
24706 @param pWDICtx: pointer to the WLAN DAL context
24707 pEventData: pointer to the event information structure
24708
24709 @see
24710 @return Result of the function call
24711*/
24712WDI_Status
24713WDI_ProcessSetTmLevelRsp
24714(
24715 WDI_ControlBlockType* pWDICtx,
24716 WDI_EventInfoType* pEventData
24717)
24718{
24719 WDI_Status wdiStatus;
24720 eHalStatus halStatus;
24721 WDI_SetTmLevelCb wdiSetTmLevelCb;
24722 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24723
24724 /*-------------------------------------------------------------------------
24725 Sanity check
24726 -------------------------------------------------------------------------*/
24727 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
24728 ( NULL == pEventData->pEventData ))
24729 {
24730 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24731 "%s: Invalid parameters", __FUNCTION__);
24732 WDI_ASSERT(0);
24733 return WDI_STATUS_E_FAILURE;
24734 }
24735
24736 wdiSetTmLevelCb = (WDI_SetPowerParamsCb)pWDICtx->pfncRspCB;
24737
24738 /*-------------------------------------------------------------------------
24739 Extract response and send it to UMAC
24740 -------------------------------------------------------------------------*/
24741 halStatus = *((eHalStatus*)pEventData->pEventData);
24742 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
24743
24744 /*Notify UMAC*/
24745 wdiSetTmLevelCb(wdiStatus, pWDICtx->pRspCBUserData);
24746
24747 return WDI_STATUS_SUCCESS;
24748}/*WDI_ProcessSetTmLevelRsp*/
24749
24750/**
24751 @brief Process Set Thermal Mitigation level Changed request
24752
24753 @param pWDICtx: pointer to the WLAN DAL context
24754 pEventData: pointer to the event information structure
24755
24756 @see
24757 @return Result of the function call
24758*/
24759WDI_Status
24760WDI_ProcessSetTmLevelReq
24761(
24762 WDI_ControlBlockType* pWDICtx,
24763 WDI_EventInfoType* pEventData
24764)
24765{
24766 WDI_SetTmLevelReqType *pwdiSetTmLevelReq = NULL;
24767 WDI_SetTmLevelCb wdiSetTmLevelCb = NULL;
24768 wpt_uint8* pSendBuffer = NULL;
24769 wpt_uint16 usDataOffset = 0;
24770 wpt_uint16 usSendSize = 0;
24771 tSetThermalMitgationType halTmMsg;
24772
24773 /*-------------------------------------------------------------------------
24774 Sanity check
24775 -------------------------------------------------------------------------*/
24776 if (( NULL == pEventData ) ||
24777 ( NULL == (pwdiSetTmLevelReq = (WDI_SetTmLevelReqType*)pEventData->pEventData)) ||
24778 ( NULL == (wdiSetTmLevelCb = (WDI_SetTmLevelCb)pEventData->pCBfnc)))
24779 {
24780 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24781 "%s: Invalid parameters", __FUNCTION__);
24782 WDI_ASSERT(0);
24783 return WDI_STATUS_E_FAILURE;
24784 }
24785
24786 /*-----------------------------------------------------------------------
24787 Get message buffer
24788 -----------------------------------------------------------------------*/
24789 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_SET_TM_LEVEL_REQ,
24790 sizeof(halTmMsg),
24791 &pSendBuffer, &usDataOffset, &usSendSize))||
24792 ( usSendSize < (usDataOffset + sizeof(halTmMsg) )))
24793 {
24794 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
24795 "Unable to get send buffer in Set PNO req %x %x %x",
24796 pEventData, pwdiSetTmLevelReq, wdiSetTmLevelCb);
24797 WDI_ASSERT(0);
24798 return WDI_STATUS_E_FAILURE;
24799 }
24800
24801 halTmMsg.thermalMitMode = pwdiSetTmLevelReq->tmMode;
24802 halTmMsg.thermalMitLevel = pwdiSetTmLevelReq->tmLevel;
24803
24804 wpalMemoryCopy( pSendBuffer+usDataOffset,
24805 &halTmMsg,
24806 sizeof(halTmMsg));
24807
24808 pWDICtx->pReqStatusUserData = pwdiSetTmLevelReq->pUserData;
24809 pWDICtx->pfncRspCB = NULL;
24810 /*-------------------------------------------------------------------------
24811 Send Get STA Request to HAL
24812 -------------------------------------------------------------------------*/
24813 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
24814 wdiSetTmLevelCb, pEventData->pUserData, WDI_SET_TM_LEVEL_RESP);
24815}
24816
24817/* Fill the value from the global features enabled array to the global capabilities
24818 * bitmap struct
24819 */
24820static void
24821FillAllFeatureCaps(tWlanFeatCaps *fCaps, placeHolderInCapBitmap *enabledFeat, wpt_int8 len)
24822{
24823 wpt_int8 i;
24824 for (i=0; i<len; i++)
24825 {
24826 setFeatCaps(fCaps, enabledFeat[i]);
24827 }
24828}
24829
24830/**
24831 @brief WDI_featureCapsExchangeReq
24832 Post feature capability bitmap exchange event.
24833 Host will send its own capability to FW in this req and
24834 expect FW to send its capability back as a bitmap in Response
24835
24836 @param
24837
24838 wdiFeatureCapsExchangeCb: callback called on getting the response.
24839 It is kept to mantain similarity between WDI reqs and if needed, can
24840 be used in future. Currently, It is set to NULL
24841
24842 pUserData: user data will be passed back with the
24843 callback
24844
24845 @see
24846 @return Result of the function call
24847*/
24848WDI_Status
24849WDI_featureCapsExchangeReq
24850(
24851 WDI_featureCapsExchangeCb wdiFeatureCapsExchangeCb,
24852 void* pUserData
24853)
24854{
24855 WDI_EventInfoType wdiEventData;
24856 wpt_int32 fCapsStructSize;
24857
24858 /*------------------------------------------------------------------------
24859 Sanity Check
24860 ------------------------------------------------------------------------*/
24861 if ( eWLAN_PAL_FALSE == gWDIInitialized )
24862 {
24863 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24864 "WDI API call before module is initialized - Fail request");
24865
24866 return WDI_STATUS_E_NOT_ALLOWED;
24867 }
24868
24869 /* Allocate memory separately for global variable carrying FW caps */
24870 fCapsStructSize = sizeof(tWlanFeatCaps);
24871 gpHostWlanFeatCaps = wpalMemoryAllocate(fCapsStructSize);
24872 if ( NULL == gpHostWlanFeatCaps )
24873 {
24874 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
24875 "Cannot allocate memory for host capability info\n");
24876 WDI_ASSERT(0);
24877 return WDI_STATUS_MEM_FAILURE;
24878 }
24879
24880 wpalMemoryZero(gpHostWlanFeatCaps, fCapsStructSize);
24881
24882 /*------------------------------------------------------------------------
24883 Fill in Event data and post to the Main FSM
24884 ------------------------------------------------------------------------*/
24885 FillAllFeatureCaps(gpHostWlanFeatCaps, supportEnabledFeatures,
24886 (sizeof(supportEnabledFeatures)/sizeof(supportEnabledFeatures[0])));
Jeff Johnsone7245742012-09-05 17:12:55 -070024887 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
24888 "Host caps %x %x %x %x\n",
Jeff Johnson295189b2012-06-20 16:38:30 -070024889 gpHostWlanFeatCaps->featCaps[0],
24890 gpHostWlanFeatCaps->featCaps[1],
24891 gpHostWlanFeatCaps->featCaps[2],
24892 gpHostWlanFeatCaps->featCaps[3]
24893 );
24894
24895 wdiEventData.wdiRequest = WDI_FEATURE_CAPS_EXCHANGE_REQ;
24896 wdiEventData.pEventData = gpHostWlanFeatCaps;
24897 wdiEventData.uEventDataSize = fCapsStructSize;
24898 wdiEventData.pCBfnc = wdiFeatureCapsExchangeCb;
24899 wdiEventData.pUserData = pUserData;
24900
24901 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
24902}
24903
24904/**
24905 @brief Process Host-FW Capability Exchange Request function
24906
24907 @param pWDICtx: pointer to the WLAN DAL context
24908 pEventData: pointer to the event information structure
24909
24910 @see
24911 @return Result of the function call
24912*/
24913WDI_Status
24914WDI_ProcessFeatureCapsExchangeReq
24915(
24916 WDI_ControlBlockType* pWDICtx,
24917 WDI_EventInfoType* pEventData
24918)
24919{
24920 wpt_uint8* pSendBuffer = NULL;
24921 wpt_uint16 usDataOffset = 0;
24922 wpt_uint16 usSendSize = 0;
24923 wpt_uint16 usLen = 0;
24924
24925 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
24926
24927 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
24928 "%s", __FUNCTION__);
24929
24930 /*-------------------------------------------------------------------------
24931 Sanity check
24932 -------------------------------------------------------------------------*/
24933 /* Call back function is NULL since not required for cap exchange req */
24934 if (( NULL == pEventData ) ||
24935 ( NULL == (tWlanFeatCaps *)pEventData->pEventData))
24936 {
24937 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
24938 "%s: Invalid parameters", __FUNCTION__);
24939 WDI_ASSERT(0);
24940 return WDI_STATUS_E_FAILURE;
24941 }
24942
24943 /*-----------------------------------------------------------------------
24944 Get message buffer
24945 -----------------------------------------------------------------------*/
24946 usLen = sizeof(tWlanFeatCaps);
24947
24948 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
24949 WDI_FEATURE_CAPS_EXCHANGE_REQ,
24950 usLen,
24951 &pSendBuffer, &usDataOffset, &usSendSize))||
24952 ( usSendSize < (usDataOffset + usLen )))
24953 {
24954 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
24955 "Unable to get send buffer in feat caps exchange req %x %x",
24956 pEventData, (tWlanFeatCaps *)pEventData->pEventData);
24957 WDI_ASSERT(0);
24958 return WDI_STATUS_E_FAILURE;
24959 }
24960
24961 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Jeff Johnsone7245742012-09-05 17:12:55 -070024962 "Host Caps - %x %x %x %x\n",
Jeff Johnson295189b2012-06-20 16:38:30 -070024963 ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[0],
24964 ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[1],
24965 ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[2],
24966 ((tWlanFeatCaps *)pEventData->pEventData)->featCaps[3]
24967 );
24968
24969 /* Copy host caps after the offset in the send buffer */
24970 wpalMemoryCopy( pSendBuffer+usDataOffset,
24971 (tWlanFeatCaps *)pEventData->pEventData,
24972 usLen);
24973
24974 /*-------------------------------------------------------------------------
24975 Send Start Request to HAL
24976 -------------------------------------------------------------------------*/
24977 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
24978 (WDI_StartRspCb)pEventData->pCBfnc,
24979 pEventData->pUserData, WDI_FEATURE_CAPS_EXCHANGE_RESP);
24980
24981}/*WDI_ProcessFeatureCapsExchangeReq*/
24982
24983/**
24984 @brief Process Host-FW Capability Exchange Response function
24985
24986 @param pWDICtx: pointer to the WLAN DAL context
24987 pEventData: pointer to the event information structure
24988
24989 @see
24990 @return Result of the function call
24991*/
24992WDI_Status
24993WDI_ProcessFeatureCapsExchangeRsp
24994(
24995 WDI_ControlBlockType* pWDICtx,
24996 WDI_EventInfoType* pEventData
24997)
24998{
24999 WDI_featureCapsExchangeCb wdiFeatureCapsExchangeCb;
25000 wpt_int32 fCapsStructSize;
25001 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
25002
25003 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
25004 "%s", __FUNCTION__);
25005
25006 /*-------------------------------------------------------------------------
25007 Sanity check
25008 -------------------------------------------------------------------------*/
25009 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
25010 ( NULL == pEventData->pEventData ))
25011 {
25012 /* It will go here when riva is old (doesn't understand this msg) and host is new */
25013 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25014 "%s: Invalid parameters", __FUNCTION__);
25015 WDI_ASSERT(0);
25016 return WDI_STATUS_E_FAILURE;
25017 }
25018
25019 /* Allocate memory separately for global variable carrying FW caps */
25020 fCapsStructSize = sizeof(tWlanFeatCaps);
25021 gpFwWlanFeatCaps = wpalMemoryAllocate(fCapsStructSize);
25022 if ( NULL == gpFwWlanFeatCaps )
25023 {
25024 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
25025 "Cannot allocate memory for host capability info\n");
25026 WDI_ASSERT(0);
25027 return WDI_STATUS_MEM_FAILURE;
25028 }
25029
25030 /*-------------------------------------------------------------------------
25031 Unpack HAL Response Message - the header was already extracted by the
25032 main Response Handling procedure
25033 -------------------------------------------------------------------------*/
25034 /*-------------------------------------------------------------------------
25035 Extract response and send it to UMAC
25036 -------------------------------------------------------------------------*/
25037
25038 wpalMemoryCopy(gpFwWlanFeatCaps,(tWlanFeatCaps *) pEventData -> pEventData,
25039 fCapsStructSize);
Jeff Johnsone7245742012-09-05 17:12:55 -070025040 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
25041 "FW caps %x %x %x %x\n",
Jeff Johnson295189b2012-06-20 16:38:30 -070025042 gpFwWlanFeatCaps->featCaps[0],
25043 gpFwWlanFeatCaps->featCaps[1],
25044 gpFwWlanFeatCaps->featCaps[2],
25045 gpFwWlanFeatCaps->featCaps[3]
25046 );
Jeff Johnsone7245742012-09-05 17:12:55 -070025047
Jeff Johnson295189b2012-06-20 16:38:30 -070025048 wdiFeatureCapsExchangeCb = (WDI_featureCapsExchangeCb) pWDICtx -> pfncRspCB;
25049
25050 /*Notify UMAC - there is no callback right now but can be used in future if reqd */
25051 if (wdiFeatureCapsExchangeCb != NULL)
25052 wdiFeatureCapsExchangeCb(NULL, NULL);
25053
25054 return WDI_STATUS_SUCCESS;
25055}
25056
Mohit Khanna4a70d262012-09-11 16:30:12 -070025057#ifdef WLAN_FEATURE_11AC
25058WDI_Status
25059WDI_ProcessUpdateVHTOpModeRsp
25060(
25061 WDI_ControlBlockType* pWDICtx,
25062 WDI_EventInfoType* pEventData
25063)
25064{
25065 WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL;
25066 WDI_Status wdiStatus;
25067 eHalStatus halStatus;
25068
25069 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
25070
25071 /*-------------------------------------------------------------------------
25072 Sanity check
25073 -------------------------------------------------------------------------*/
25074 if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
25075 ( NULL == pEventData->pEventData))
25076 {
25077 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25078 "%s: Invalid parameters", __FUNCTION__);
25079 WDI_ASSERT(0);
25080 return WDI_STATUS_E_FAILURE;
25081 }
25082 wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc;
25083
25084 /*-------------------------------------------------------------------------
25085 Extract response and send it to UMAC
25086 -------------------------------------------------------------------------*/
25087 halStatus = *((eHalStatus*)pEventData->pEventData);
25088 wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
25089
25090 /*Notify UMAC*/
25091 wdiVHTOpModeCb( wdiStatus, pEventData->pUserData);
25092
25093 return WDI_STATUS_SUCCESS;
25094}
25095#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070025096/**
25097 @brief WDI_getHostWlanFeatCaps
25098 WDI API that returns whether the feature passed to it as enum value in
25099 "placeHolderInCapBitmap" is supported by Host or not. It uses WDI global
25100 variable storing host capability bitmap to find this. This can be used by
25101 other moduels to decide certain things like call different APIs based on
25102 whether a particular feature is supported.
25103
25104 @param
25105
25106 feat_enum_value: enum value for the feature as in placeHolderInCapBitmap in wlan_hal_msg.h.
25107
25108 @see
25109 @return
25110 0 - if the feature is NOT supported in host
25111 any non-zero value - if the feature is SUPPORTED in host.
25112*/
25113wpt_uint8 WDI_getHostWlanFeatCaps(wpt_uint8 feat_enum_value)
25114{
25115 wpt_uint8 featSupported = 0;
25116 if (gpHostWlanFeatCaps != NULL)
25117 {
25118 getFeatCaps(gpHostWlanFeatCaps, feat_enum_value, featSupported);
25119 }
25120 else
25121 {
Madan Mohan Koyyalamudi8b7f1e62012-10-05 14:56:51 -070025122 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi8bdd3112012-09-24 13:55:14 -070025123 "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value);
Jeff Johnson295189b2012-06-20 16:38:30 -070025124 }
25125 return featSupported;
25126}
25127
25128/**
25129 @brief WDI_getFwWlanFeatCaps
25130 WDI API that returns whether the feature passed to it as enum value in
25131 "placeHolderInCapBitmap" is supported by FW or not. It uses WDI global
25132 variable storing host capability bitmap to find this. This can be used by
25133 other moduels to decide certain things like call different APIs based on
25134 whether a particular feature is supported.
25135
25136 @param
25137
25138 feat_enum_value: enum value for the feature as in placeHolderInCapBitmap
25139 in wlan_hal_msg.h.
25140
25141 @see
25142 @return
25143 0 - if the feature is NOT supported in FW
25144 any non-zero value - if the feature is SUPPORTED in FW.
25145*/
25146wpt_uint8 WDI_getFwWlanFeatCaps(wpt_uint8 feat_enum_value)
25147{
25148 wpt_uint8 featSupported = 0;
25149 if (gpFwWlanFeatCaps != NULL)
25150 {
25151 getFeatCaps(gpFwWlanFeatCaps, feat_enum_value, featSupported);
25152 }
25153 else
25154 {
Madan Mohan Koyyalamudi8b7f1e62012-10-05 14:56:51 -070025155 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi8bdd3112012-09-24 13:55:14 -070025156 "Caps exchange feature NOT supported. Return NOT SUPPORTED for %u feature", feat_enum_value);
Jeff Johnson295189b2012-06-20 16:38:30 -070025157 }
25158 return featSupported;
25159}
Mohit Khanna4a70d262012-09-11 16:30:12 -070025160
25161#ifdef WLAN_FEATURE_11AC
25162WDI_Status
25163WDI_ProcessUpdateVHTOpModeReq
25164(
25165 WDI_ControlBlockType* pWDICtx,
25166 WDI_EventInfoType* pEventData
25167)
25168{
25169 WDI_UpdateVHTOpMode* pwdiVHTOpModeParams = NULL;
25170 WDI_UpdateVHTOpModeCb wdiVHTOpModeCb = NULL;
25171 wpt_uint8* pSendBuffer = NULL;
25172 wpt_uint16 usDataOffset = 0;
25173 wpt_uint16 usSendSize = 0;
25174
25175 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
25176
25177 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
25178 "%s", __FUNCTION__);
25179
25180 /*-------------------------------------------------------------------------
25181 Sanity check
25182 -------------------------------------------------------------------------*/
25183 if (( NULL == pEventData ) ||
25184 ( NULL == (pwdiVHTOpModeParams = (WDI_UpdateVHTOpMode*)pEventData->pEventData)) ||
25185 ( NULL == (wdiVHTOpModeCb = (WDI_UpdateVHTOpModeCb)pEventData->pCBfnc)))
25186 {
25187 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25188 "%s: Invalid parameters", __FUNCTION__);
25189 WDI_ASSERT(0);
25190 return WDI_STATUS_E_FAILURE;
25191 }
25192
25193 /*-----------------------------------------------------------------------
25194 Get message buffer
25195 -----------------------------------------------------------------------*/
25196 if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_UPDATE_VHT_OP_MODE_REQ,
25197 sizeof(WDI_UpdateVHTOpMode),
25198 &pSendBuffer, &usDataOffset, &usSendSize))||
25199 ( usSendSize < (usDataOffset + sizeof(WDI_UpdateVHTOpMode) )))
25200 {
25201 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25202 "Unable to get send buffer in update vht opMode req");
25203 WDI_ASSERT(0);
25204 return WDI_STATUS_E_FAILURE;
25205 }
25206
25207 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25208 "pwdiVHTOpModeParams->opMode=%d, pwdiVHTOpModeParams->staId=%d\n", pwdiVHTOpModeParams->opMode, pwdiVHTOpModeParams->staId);
25209
25210 wpalMemoryCopy( pSendBuffer+usDataOffset, pwdiVHTOpModeParams,
25211 sizeof(WDI_UpdateVHTOpMode));
25212
25213 /*-------------------------------------------------------------------------
25214 Send Start Request to HAL
25215 -------------------------------------------------------------------------*/
25216 return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
25217 wdiVHTOpModeCb,
25218 pEventData->pUserData, WDI_UPDATE_VHT_OP_MODE_RESP);
25219
25220}
25221
25222WDI_Status
25223WDI_UpdateVHTOpModeReq
25224(
25225 WDI_UpdateVHTOpMode *pData,
25226 WDI_UpdateVHTOpModeCb wdiUpdateVHTOpModeCb,
25227 void* pUserData
25228)
25229{
25230 WDI_EventInfoType wdiEventData;
25231
25232 /*------------------------------------------------------------------------
25233 Sanity Check
25234 ------------------------------------------------------------------------*/
25235 if ( eWLAN_PAL_FALSE == gWDIInitialized )
25236 {
25237 WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
25238 "WDI API call before module is initialized - Fail request");
25239
25240 return WDI_STATUS_E_NOT_ALLOWED;
25241 }
25242
25243 /*------------------------------------------------------------------------
25244 Fill in Event data and post to the Main FSM
25245 ------------------------------------------------------------------------*/
25246 wdiEventData.wdiRequest = WDI_UPDATE_VHT_OP_MODE_REQ;
25247 wdiEventData.pEventData = pData;
25248 wdiEventData.uEventDataSize = sizeof(WDI_UpdateVHTOpMode);
25249 wdiEventData.pCBfnc = wdiUpdateVHTOpModeCb;
25250 wdiEventData.pUserData = pUserData;
25251
25252 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25253 "pData->opMode=%d, pData->staId=%d\n", pData->opMode, pData->staId);
25254
25255 return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
25256
25257}
25258#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070025259
25260/**
25261 @brief WDI_TransportChannelDebug -
25262 Display DXE Channel debugging information
25263 User may request to display DXE channel snapshot
25264 Or if host driver detects any abnormal stcuk may display
Madan Mohan Koyyalamudi8b7f1e62012-10-05 14:56:51 -070025265
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070025266 @param displaySnapshot : Dispaly DXE snapshot option
25267 @param enableStallDetect : Enable stall detect feature
25268 This feature will take effect to data performance
25269 Not integrate till fully verification
25270 @see
25271 @return none
25272*/
25273void WDI_TransportChannelDebug
25274(
25275 wpt_boolean displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070025276 wpt_boolean toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070025277)
25278{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070025279 WDTS_ChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070025280 return;
Madan Mohan Koyyalamudi3352adb2012-09-28 14:57:24 -070025281}
Madan Mohan Koyyalamudi0bfd0002012-10-24 14:39:37 -070025282/**
25283 @brief WDI_SsrTimerCB
25284 Callback function for SSR timer, if this is called then the graceful
25285 shutdown for Riva did not happen.
25286
25287 @param pUserData : user data to timer
25288
25289 @see
25290 @return none
25291*/
25292void
25293WDI_SsrTimerCB
25294(
25295 void *pUserData
25296)
25297{
25298 WDI_ControlBlockType* pWDICtx = (WDI_ControlBlockType*)pUserData;
25299 /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
25300
25301 if (NULL == pWDICtx )
25302 {
25303 WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
25304 "%s: Invalid parameters", __FUNCTION__);
25305 WDI_ASSERT(0);
25306 return;
25307 }
25308 wpalRivaSubystemRestart();
25309
25310 return;
25311
25312}/*WDI_SsrTimerCB*/