blob: 76b000cdd3423fa9d592e6f6655bd8428b4841fc [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
2 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28/*
29 * This file lim_utils.h contains the utility definitions
30 * LIM uses.
31 * Author: Chandra Modumudi
32 * Date: 02/13/02
33 * History:-
34 * Date Modified by Modification Information
35 * --------------------------------------------------------------------
36 */
37#ifndef __LIM_UTILS_H
38#define __LIM_UTILS_H
39
40#include "sir_api.h"
41#include "sir_debug.h"
42#include "cfg_api.h"
43
44#include "lim_types.h"
45#include "lim_scan_result_utils.h"
46#include "lim_timer_utils.h"
47#include "lim_trace.h"
48typedef enum {
49 ONE_BYTE = 1,
50 TWO_BYTE = 2
51} eSizeOfLenField;
52
53#define MIN_TX_PWR_CAP 8
54#define MAX_TX_PWR_CAP 22
55
56#define LIM_STA_ID_MASK 0x00FF
57#define LIM_AID_MASK 0xC000
58#define LIM_SPECTRUM_MANAGEMENT_BIT_MASK 0x0100
59#define LIM_RRM_BIT_MASK 0x1000
60#define LIM_SHORT_PREAMBLE_BIT_MASK 0x0020
61#define LIM_IMMEDIATE_BLOCK_ACK_MASK 0x8000
62#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
63#define LIM_MAX_REASSOC_RETRY_LIMIT 2
64#endif
65
66/* classifier ID is coded as 0-3: tsid, 4-5:direction */
67#define LIM_MAKE_CLSID(tsid, dir) (((tsid) & 0x0F) | (((dir) & 0x03) << 4))
68
69#define VHT_MCS_3x3_MASK 0x30
70#define VHT_MCS_2x2_MASK 0x0C
71
72#ifdef WLAN_FEATURE_11W
73typedef union uPmfSaQueryTimerId {
74 struct {
75 uint8_t sessionId;
76 uint16_t peerIdx;
77 } fields;
78 uint32_t value;
79} tPmfSaQueryTimerId, *tpPmfSaQueryTimerId;
80#endif
81
82/* LIM utility functions */
83void limGetBssidFromPkt(tpAniSirGlobal, uint8_t *, uint8_t *, uint32_t *);
84char *lim_dot11_reason_str(uint16_t reasonCode);
85char *lim_mlm_state_str(tLimMlmStates state);
86char *lim_sme_state_str(tLimSmeStates state);
87char *lim_msg_str(uint32_t msgType);
88char *lim_result_code_str(tSirResultCodes resultCode);
89char *lim_dot11_mode_str(tpAniSirGlobal pMac, uint8_t dot11Mode);
90void lim_print_mlm_state(tpAniSirGlobal pMac, uint16_t logLevel,
91 tLimMlmStates state);
92void lim_print_sme_state(tpAniSirGlobal pMac, uint16_t logLevel,
93 tLimSmeStates state);
94void lim_print_msg_name(tpAniSirGlobal pMac, uint16_t logLevel, uint32_t msgType);
95
96#if defined FEATURE_WLAN_ESE || defined WLAN_FEATURE_VOWIFI
97extern tSirRetStatus lim_send_set_max_tx_power_req(tpAniSirGlobal pMac,
98 tPowerdBm txPower,
99 tpPESession pSessionEntry);
100extern uint8_t lim_get_max_tx_power(tPowerdBm regMax, tPowerdBm apTxPower,
101 uint8_t iniTxPower);
102#endif
103uint8_t lim_is_addr_bc(tSirMacAddr);
104uint8_t lim_is_group_addr(tSirMacAddr);
105
106/* check for type of scan allowed */
107uint8_t lim_active_scan_allowed(tpAniSirGlobal, uint8_t);
108
109/* AID pool management functions */
110void lim_init_peer_idxpool(tpAniSirGlobal, tpPESession);
111uint16_t lim_assign_peer_idx(tpAniSirGlobal, tpPESession);
112
113void lim_enable_overlap11g_protection(tpAniSirGlobal pMac,
114 tpUpdateBeaconParams pBeaconParams,
115 tpSirMacMgmtHdr pMh,
116 tpPESession psessionEntry);
117void lim_update_overlap_sta_param(tpAniSirGlobal pMac, tSirMacAddr bssId,
118 tpLimProtStaParams pStaParams);
119void lim_update_short_preamble(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
120 tpUpdateBeaconParams pBeaconParams,
121 tpPESession psessionEntry);
122void lim_update_short_slot_time(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
123 tpUpdateBeaconParams pBeaconParams,
124 tpPESession psessionEntry);
125
126/*
127 * The below 'product' check tobe removed if 'Association' is
128 * allowed in IBSS.
129 */
130void lim_release_peer_idx(tpAniSirGlobal, uint16_t, tpPESession);
131
132void lim_decide_ap_protection(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
133 tpUpdateBeaconParams pBeaconParams, tpPESession);
134void lim_decide_ap_protection_on_delete(tpAniSirGlobal pMac,
135 tpDphHashNode pStaDs,
136 tpUpdateBeaconParams pBeaconParams,
137 tpPESession psessionEntry);
138
139extern tSirRetStatus lim_update_11a_protection(tpAniSirGlobal pMac,
140 uint8_t enable,
141 uint8_t overlap,
142 tpUpdateBeaconParams pBeaconParams,
143 tpPESession);
144extern tSirRetStatus lim_enable11g_protection(tpAniSirGlobal pMac,
145 uint8_t enable,
146 uint8_t overlap,
147 tpUpdateBeaconParams pBeaconParams,
148 tpPESession psessionEntry);
149extern tSirRetStatus lim_enable_ht_protection_from11g(tpAniSirGlobal pMac,
150 uint8_t enable,
151 uint8_t overlap,
152 tpUpdateBeaconParams
153 pBeaconParams,
154 tpPESession psessionEntry);
155extern tSirRetStatus lim_enable_ht20_protection(tpAniSirGlobal pMac,
156 uint8_t enable, uint8_t overlap,
157 tpUpdateBeaconParams pBeaconParams,
158 tpPESession sessionEntry);
159extern tSirRetStatus lim_enable_ht_non_gf_protection(tpAniSirGlobal pMac,
160 uint8_t enable, uint8_t overlap,
161 tpUpdateBeaconParams
162 pBeaconParams, tpPESession);
163extern tSirRetStatus lim_enable_ht_rifs_protection(tpAniSirGlobal pMac,
164 uint8_t enable, uint8_t overlap,
165 tpUpdateBeaconParams
166 pBeaconParams,
167 tpPESession psessionEntry);
168extern tSirRetStatus lim_enable_ht_lsig_txop_protection(tpAniSirGlobal pMac,
169 uint8_t enable,
170 uint8_t overlap,
171 tpUpdateBeaconParams
172 pBeaconParams, tpPESession);
173extern tSirRetStatus lim_enable_short_preamble(tpAniSirGlobal pMac,
174 uint8_t enable,
175 tpUpdateBeaconParams pBeaconParams,
176 tpPESession psessionEntry);
177extern tSirRetStatus lim_enable_ht_obss_protection(tpAniSirGlobal pMac,
178 uint8_t enable, uint8_t overlap,
179 tpUpdateBeaconParams
180 pBeaconParams, tpPESession);
181void lim_decide_sta_protection(tpAniSirGlobal pMac,
182 tpSchBeaconStruct pBeaconStruct,
183 tpUpdateBeaconParams pBeaconParams,
184 tpPESession psessionEntry);
185void lim_decide_sta_protection_on_assoc(tpAniSirGlobal pMac,
186 tpSchBeaconStruct pBeaconStruct,
187 tpPESession psessionEntry);
188void lim_update_sta_run_time_ht_switch_chnl_params(tpAniSirGlobal pMac,
189 tDot11fIEHTInfo *pHTInfo,
190 uint8_t bssIdx,
191 tpPESession psessionEntry);
192/* Print MAC address utility function */
193void lim_print_mac_addr(tpAniSirGlobal, tSirMacAddr, uint8_t);
194
195/* Deferred Message Queue read/write */
196uint8_t lim_write_deferred_msg_q(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
197tSirMsgQ *lim_read_deferred_msg_q(tpAniSirGlobal pMac);
198void lim_handle_defer_msg_error(tpAniSirGlobal pMac, tpSirMsgQ pLimMsg);
199
200/* Deferred Message Queue Reset */
201void lim_reset_deferred_msg_q(tpAniSirGlobal pMac);
202
203tSirRetStatus lim_sys_process_mmh_msg_api(tpAniSirGlobal, tSirMsgQ *, uint8_t);
204
205void lim_handle_update_olbc_cache(tpAniSirGlobal pMac);
206
207uint8_t lim_is_null_ssid(tSirMacSSid *pSsid);
208
209/* 11h Support */
210void lim_stop_tx_and_switch_channel(tpAniSirGlobal pMac, uint8_t sessionId);
211void lim_process_channel_switch_timeout(tpAniSirGlobal);
212tSirRetStatus lim_start_channel_switch(tpAniSirGlobal pMac,
213 tpPESession psessionEntry);
214void lim_update_channel_switch(tpAniSirGlobal, tpSirProbeRespBeacon,
215 tpPESession psessionEntry);
216void lim_process_quiet_timeout(tpAniSirGlobal);
217void lim_process_quiet_bss_timeout(tpAniSirGlobal);
218
219void lim_start_quiet_timer(tpAniSirGlobal pMac, uint8_t sessionId);
220void lim_switch_primary_channel(tpAniSirGlobal, uint8_t, tpPESession);
221void lim_switch_primary_secondary_channel(tpAniSirGlobal pMac,
222 tpPESession psessionEntry,
223 uint8_t newChannel,
224 uint8_t ch_center_freq_seg0,
225 uint8_t ch_center_freq_seg1,
226 phy_ch_width ch_width);
227void limUpdateStaRunTimeHTSwtichChnlParams(tpAniSirGlobal pMac,
228 tDot11fIEHTInfo *pRcvdHTInfo,
229 uint8_t bssIdx);
230void lim_update_sta_run_time_ht_capability(tpAniSirGlobal pMac,
231 tDot11fIEHTCaps *pHTCaps);
232void lim_update_sta_run_time_ht_info(struct sAniSirGlobal *pMac,
233 tDot11fIEHTInfo *pRcvdHTInfo,
234 tpPESession psessionEntry);
235void lim_cancel_dot11h_channel_switch(tpAniSirGlobal pMac,
236 tpPESession psessionEntry);
237void lim_cancel_dot11h_quiet(tpAniSirGlobal pMac, tpPESession psessionEntry);
238tAniBool lim_is_channel_valid_for_channel_switch(tpAniSirGlobal pMac,
239 uint8_t channel);
240void lim_frame_transmission_control(tpAniSirGlobal pMac, tLimQuietTxMode type,
241 tLimControlTx mode);
242tSirRetStatus lim_restore_pre_channel_switch_state(tpAniSirGlobal pMac,
243 tpPESession psessionEntry);
244tSirRetStatus lim_restore_pre_quiet_state(tpAniSirGlobal pMac,
245 tpPESession psessionEntry);
246
247void lim_prepare_for11h_channel_switch(tpAniSirGlobal pMac,
248 tpPESession psessionEntry);
249void lim_switch_channel_cback(tpAniSirGlobal pMac, CDF_STATUS status,
250 uint32_t *data, tpPESession psessionEntry);
251
252static inline tSirRFBand lim_get_rf_band(uint8_t channel)
253{
254 if ((channel >= SIR_11A_CHANNEL_BEGIN) &&
255 (channel <= SIR_11A_CHANNEL_END))
256 return SIR_BAND_5_GHZ;
257
258 if ((channel >= SIR_11B_CHANNEL_BEGIN) &&
259 (channel <= SIR_11B_CHANNEL_END))
260 return SIR_BAND_2_4_GHZ;
261
262 return SIR_BAND_UNKNOWN;
263}
264
265static inline tSirRetStatus
266lim_get_mgmt_staid(tpAniSirGlobal pMac, uint16_t *staid,
267 tpPESession psessionEntry)
268{
269 if (LIM_IS_AP_ROLE(psessionEntry))
270 *staid = 1;
271 else if (LIM_IS_STA_ROLE(psessionEntry))
272 *staid = 0;
273 else
274 return eSIR_FAILURE;
275
276 return eSIR_SUCCESS;
277}
278
279static inline uint8_t lim_is_system_in_set_mimops_state(tpAniSirGlobal pMac)
280{
281 if (pMac->lim.gLimMlmState == eLIM_MLM_WT_SET_MIMOPS_STATE)
282 return true;
283 return false;
284}
285
286static inline uint8_t
287is_entering_mimo_ps(tSirMacHTMIMOPowerSaveState curState,
288 tSirMacHTMIMOPowerSaveState newState)
289{
290 if (curState == eSIR_HT_MIMO_PS_NO_LIMIT &&
291 (newState == eSIR_HT_MIMO_PS_DYNAMIC
292 || newState == eSIR_HT_MIMO_PS_STATIC))
293 return true;
294 return false;
295}
296
297static inline int lim_select_cb_mode(tDphHashNode *pStaDs,
298 tpPESession psessionEntry, uint8_t channel,
299 uint8_t chan_bw)
300{
301 if (pStaDs->mlmStaContext.vhtCapability && chan_bw) {
302 if (channel == 36 || channel == 52 || channel == 100 ||
303 channel == 116 || channel == 149) {
304 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW - 1;
305 } else if (channel == 40 || channel == 56 || channel == 104 ||
306 channel == 120 || channel == 153) {
307 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW - 1;
308 } else if (channel == 44 || channel == 60 || channel == 108 ||
309 channel == 124 || channel == 157) {
310 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH - 1;
311 } else if (channel == 48 || channel == 64 || channel == 112 ||
312 channel == 128 || channel == 161) {
313 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH - 1;
314 } else if (channel == 165) {
315 return PHY_SINGLE_CHANNEL_CENTERED;
316 }
317 } else if (pStaDs->mlmStaContext.htCapability) {
318 if (channel == 40 || channel == 48 || channel == 56 ||
319 channel == 64 || channel == 104 || channel == 112 ||
320 channel == 120 || channel == 128 || channel == 136 ||
321 channel == 144 || channel == 153 || channel == 161) {
322 return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
323 } else if (channel == 36 || channel == 44 || channel == 52 ||
324 channel == 60 || channel == 100 ||
325 channel == 108 || channel == 116 ||
326 channel == 124 || channel == 132 ||
327 channel == 140 || channel == 149 ||
328 channel == 157) {
329 return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
330 } else if (channel == 165) {
331 return PHY_SINGLE_CHANNEL_CENTERED;
332 }
333 }
334 return PHY_SINGLE_CHANNEL_CENTERED;
335}
336
337/* ANI peer station count management and associated actions */
338void lim_util_count_sta_add(tpAniSirGlobal pMac, tpDphHashNode pSta,
339 tpPESession psessionEntry);
340void lim_util_count_sta_del(tpAniSirGlobal pMac, tpDphHashNode pSta,
341 tpPESession psessionEntry);
342
343uint8_t lim_get_ht_capability(tpAniSirGlobal, uint32_t, tpPESession);
344void lim_tx_complete(tHalHandle hHal, void *pData, bool free);
345
346/**
347 * This function will be registered with HAL for callback when TSPEC inactivity
348 * timer fires.
349 */
350
351void lim_process_del_ts_ind(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
352tSirRetStatus lim_process_hal_ind_messages(tpAniSirGlobal pMac, uint32_t mesgId,
353 void *mesgParam);
354tSirRetStatus lim_validate_delts_req(tpAniSirGlobal pMac,
355 tpSirDeltsReq pDeltsReq,
356 tSirMacAddr peerMacAddr,
357 tpPESession psessionEntry);
358
359/* callback function registration to HAL for any indication. */
360void lim_register_hal_ind_call_back(tpAniSirGlobal pMac);
361void lim_pkt_free(tpAniSirGlobal pMac,
362 eFrameType frmType, uint8_t *pBD, void *body);
363
364void lim_get_b_dfrom_rx_packet(tpAniSirGlobal pMac, void *body, uint32_t **pBD);
365
366/**
367 * utils_power_xy() - calc result of base raised to power
368 * @base: Base value
369 * @power: Base raised to this Power value
370 *
371 * Given a base(X) and power(Y), this API will return
372 * the result of base raised to power - (X ^ Y)
373 *
374 * Return: Result of X^Y
375 *
376 */
377static inline uint32_t utils_power_xy(uint16_t base, uint16_t power)
378{
379 uint32_t result = 1, i;
380
381 for (i = 0; i < power; i++)
382 result *= base;
383
384 return result;
385}
386
387tSirRetStatus lim_post_sm_state_update(tpAniSirGlobal pMac,
388 uint16_t StaIdx,
389 tSirMacHTMIMOPowerSaveState MIMOPSState,
390 uint8_t *pPeerStaMac, uint8_t sessionId);
391
392void lim_delete_sta_context(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
393void lim_delete_dialogue_token_list(tpAniSirGlobal pMac);
394void lim_resset_scan_channel_info(tpAniSirGlobal pMac);
395uint8_t lim_get_channel_from_beacon(tpAniSirGlobal pMac,
396 tpSchBeaconStruct pBeacon);
397tSirNwType lim_get_nw_type(tpAniSirGlobal pMac, uint8_t channelNum,
398 uint32_t type, tpSchBeaconStruct pBeacon);
399
400void lim_set_tspec_uapsd_mask_per_session(tpAniSirGlobal pMac,
401 tpPESession psessionEntry,
402 tSirMacTSInfo *pTsInfo, uint32_t action);
403
404void lim_handle_heart_beat_timeout_for_session(tpAniSirGlobal pMac,
405 tpPESession psessionEntry);
406
407void lim_process_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ pMsgQ);
408
409void lim_update_beacon(tpAniSirGlobal pMac);
410
411void lim_process_ap_mlm_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,
412 tpPESession psessionEntry);
413void lim_process_bt_amp_ap_mlm_del_bss_rsp(tpAniSirGlobal pMac,
414 tpSirMsgQ limMsgQ,
415 tpPESession psessionEntry);
416
417void lim_process_bt_amp_ap_mlm_del_sta_rsp(tpAniSirGlobal pMac,
418 tpSirMsgQ limMsgQ,
419 tpPESession psessionEntry);
420
421tpPESession lim_is_ibss_session_active(tpAniSirGlobal pMac);
422tpPESession lim_is_ap_session_active(tpAniSirGlobal pMac);
423void lim_handle_heart_beat_failure_timeout(tpAniSirGlobal pMac);
424
425uint8_t *lim_get_ie_ptr_new(tpAniSirGlobal pMac, uint8_t *pIes, int length,
426 uint8_t eid, eSizeOfLenField size_of_len_field);
427
428#define limGetWscIEPtr(pMac, ie, ie_len) \
429 cfg_get_vendor_ie_ptr_from_oui(pMac, SIR_MAC_WSC_OUI, \
430 SIR_MAC_WSC_OUI_SIZE, ie, ie_len)
431
432#define limGetP2pIEPtr(pMac, ie, ie_len) \
433 cfg_get_vendor_ie_ptr_from_oui(pMac, SIR_MAC_P2P_OUI, \
434 SIR_MAC_P2P_OUI_SIZE, ie, ie_len)
435
436uint8_t lim_get_noa_attr_stream_in_mult_p2p_ies(tpAniSirGlobal pMac,
437 uint8_t *noaStream, uint8_t noaLen,
438 uint8_t overFlowLen);
439uint8_t lim_get_noa_attr_stream(tpAniSirGlobal pMac, uint8_t *pNoaStream,
440 tpPESession psessionEntry);
441
442uint8_t lim_build_p2p_ie(tpAniSirGlobal pMac, uint8_t *ie, uint8_t *data,
443 uint8_t ie_len);
444bool lim_is_noa_insert_reqd(tpAniSirGlobal pMac);
445bool lim_isconnected_on_dfs_channel(uint8_t currentChannel);
446uint8_t lim_get_current_operating_channel(tpAniSirGlobal pMac);
447
448#ifdef WLAN_FEATURE_11AC
449bool lim_check_vht_op_mode_change(tpAniSirGlobal pMac,
450 tpPESession psessionEntry,
451 uint8_t chanWidth, uint8_t staId,
452 uint8_t *peerMac);
453bool lim_set_nss_change(tpAniSirGlobal pMac, tpPESession psessionEntry,
454 uint8_t rxNss, uint8_t staId, uint8_t *peerMac);
455bool lim_check_membership_user_position(tpAniSirGlobal pMac,
456 tpPESession psessionEntry,
457 uint32_t membership, uint32_t userPosition,
458 uint8_t staId);
459#endif
460
461#ifdef FEATURE_WLAN_DIAG_SUPPORT
462
463typedef enum {
464 WLAN_PE_DIAG_SCAN_REQ_EVENT = 0,
465 WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT,
466 WLAN_PE_DIAG_SCAN_RSP_EVENT,
467 WLAN_PE_DIAG_JOIN_REQ_EVENT,
468 WLAN_PE_DIAG_JOIN_RSP_EVENT,
469 WLAN_PE_DIAG_SETCONTEXT_REQ_EVENT,
470 WLAN_PE_DIAG_SETCONTEXT_RSP_EVENT,
471 WLAN_PE_DIAG_REASSOC_REQ_EVENT,
472 WLAN_PE_DIAG_REASSOC_RSP_EVENT,
473 WLAN_PE_DIAG_AUTH_REQ_EVENT,
474 WLAN_PE_DIAG_AUTH_RSP_EVENT = 10,
475 WLAN_PE_DIAG_DISASSOC_REQ_EVENT,
476 WLAN_PE_DIAG_DISASSOC_RSP_EVENT,
477 WLAN_PE_DIAG_DISASSOC_IND_EVENT,
478 WLAN_PE_DIAG_DISASSOC_CNF_EVENT,
479 WLAN_PE_DIAG_DEAUTH_REQ_EVENT,
480 WLAN_PE_DIAG_DEAUTH_RSP_EVENT,
481 WLAN_PE_DIAG_DEAUTH_IND_EVENT,
482 WLAN_PE_DIAG_START_BSS_REQ_EVENT,
483 WLAN_PE_DIAG_START_BSS_RSP_EVENT,
484 WLAN_PE_DIAG_AUTH_IND_EVENT = 20,
485 WLAN_PE_DIAG_ASSOC_IND_EVENT,
486 WLAN_PE_DIAG_ASSOC_CNF_EVENT,
487 WLAN_PE_DIAG_REASSOC_IND_EVENT,
488 WLAN_PE_DIAG_SWITCH_CHL_IND_EVENT,
489 WLAN_PE_DIAG_STOP_BSS_REQ_EVENT,
490 WLAN_PE_DIAG_STOP_BSS_RSP_EVENT,
491 WLAN_PE_DIAG_DEAUTH_CNF_EVENT,
492 WLAN_PE_DIAG_ADDTS_REQ_EVENT,
493 WLAN_PE_DIAG_ADDTS_RSP_EVENT,
494 WLAN_PE_DIAG_DELTS_REQ_EVENT = 30,
495 WLAN_PE_DIAG_DELTS_RSP_EVENT,
496 WLAN_PE_DIAG_DELTS_IND_EVENT,
497 WLAN_PE_DIAG_ENTER_BMPS_REQ_EVENT,
498 WLAN_PE_DIAG_ENTER_BMPS_RSP_EVENT,
499 WLAN_PE_DIAG_EXIT_BMPS_REQ_EVENT,
500 WLAN_PE_DIAG_EXIT_BMPS_RSP_EVENT,
501 WLAN_PE_DIAG_EXIT_BMPS_IND_EVENT,
502 WLAN_PE_DIAG_ENTER_UAPSD_REQ_EVENT,
503 WLAN_PE_DIAG_ENTER_UAPSD_RSP_EVENT,
504 WLAN_PE_DIAG_EXIT_UAPSD_REQ_EVENT = 40,
505 WLAN_PE_DIAG_EXIT_UAPSD_RSP_EVENT,
506 WLAN_PE_DIAG_WOWL_ADD_BCAST_PTRN_EVENT,
507 WLAN_PE_DIAG_WOWL_DEL_BCAST_PTRN_EVENT,
508 WLAN_PE_DIAG_ENTER_WOWL_REQ_EVENT,
509 WLAN_PE_DIAG_ENTER_WOWL_RSP_EVENT,
510 WLAN_PE_DIAG_EXIT_WOWL_REQ_EVENT,
511 WLAN_PE_DIAG_EXIT_WOWL_RSP_EVENT,
512 WLAN_PE_DIAG_HB_FAILURE_TIMEOUT,
513 WLAN_PE_DIAG_PRE_AUTH_REQ_EVENT,
514 WLAN_PE_DIAG_PRE_AUTH_RSP_EVENT = 50,
515 WLAN_PE_DIAG_PREAUTH_DONE,
516 WLAN_PE_DIAG_REASSOCIATING,
517 WLAN_PE_DIAG_CONNECTED,
518 WLAN_PE_DIAG_ASSOC_REQ_EVENT,
519 WLAN_PE_DIAG_AUTH_COMP_EVENT,
520 WLAN_PE_DIAG_ASSOC_COMP_EVENT,
521 WLAN_PE_DIAG_AUTH_START_EVENT,
522 WLAN_PE_DIAG_ASSOC_START_EVENT,
523 WLAN_PE_DIAG_REASSOC_START_EVENT,
524 WLAN_PE_DIAG_ROAM_AUTH_START_EVENT = 60,
525 WLAN_PE_DIAG_ROAM_AUTH_COMP_EVENT,
526 WLAN_PE_DIAG_ROAM_ASSOC_START_EVENT,
527 WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT,
528 RESERVED1, /* = 64 for SCAN_COMPLETE */
529 RESERVED2, /* = 65 for SCAN_RES_FOUND */
530} WLAN_PE_DIAG_EVENT_TYPE;
531
532void lim_diag_event_report(tpAniSirGlobal pMac, uint16_t eventType,
533 tpPESession pSessionEntry, uint16_t status,
534 uint16_t reasonCode);
535#endif /* FEATURE_WLAN_DIAG_SUPPORT */
536
537void pe_set_resume_channel(tpAniSirGlobal pMac, uint16_t channel,
538 ePhyChanBondState cbState);
539
540void lim_get_short_slot_from_phy_mode(tpAniSirGlobal pMac,
541 tpPESession psessionEntry,
542 uint32_t phyMode, uint8_t *pShortSlotEnable);
543
544void lim_clean_up_disassoc_deauth_req(tpAniSirGlobal pMac, uint8_t *staMac,
545 bool cleanRxPath);
546
547bool lim_check_disassoc_deauth_ack_pending(tpAniSirGlobal pMac,
548 uint8_t *staMac);
549
550#ifdef WLAN_FEATURE_11W
551void lim_pmf_sa_query_timer_handler(void *pMacGlobal, uint32_t param);
552#endif
553
554void lim_set_protected_bit(tpAniSirGlobal pMac,
555 tpPESession psessionEntry,
556 tSirMacAddr peer, tpSirMacMgmtHdr pMacHdr);
557
558#ifdef WLAN_FEATURE_11W
559void lim_pmf_comeback_timer_callback(void *context);
560#endif /* WLAN_FEATURE_11W */
561
562void lim_set_ht_caps(tpAniSirGlobal p_mac,
563 tpPESession p_session_ntry,
564 uint8_t *p_ie_start,
565 uint32_t num_bytes);
566
567#ifdef WLAN_FEATURE_11AC
568void lim_set_vht_caps(tpAniSirGlobal p_mac,
569 tpPESession p_session_entry,
570 uint8_t *p_ie_start,
571 uint32_t num_bytes);
572#endif /* WLAN_FEATURE_11AC */
573bool lim_validate_received_frame_a1_addr(tpAniSirGlobal mac_ctx,
574 tSirMacAddr a1, tpPESession session);
575void lim_set_stads_rtt_cap(tpDphHashNode sta_ds, struct s_ext_cap *ext_cap,
576 tpAniSirGlobal mac_ctx);
577
578void lim_check_and_reset_protection_params(tpAniSirGlobal mac_ctx);
579
580CDF_STATUS lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, uint32_t session_id,
581 tDot11fIEExtCap *extracted_extcap, bool merge);
582
583tSirRetStatus lim_strip_extcap_ie(tpAniSirGlobal mac_ctx, uint8_t *addn_ie,
584 uint16_t *addn_ielen, uint8_t *extracted_extcap);
585void lim_update_extcap_struct(tpAniSirGlobal mac_ctx, uint8_t *buf,
586 tDot11fIEExtCap *ext_cap);
587tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx,
588 uint8_t *addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst);
589void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src);
590
591#endif /* __LIM_UTILS_H */