xref: /wlan-dirver/qcacld-3.0/core/mac/src/pe/lim/lim_utils.h (revision af88fc7dfcd4d710a850de08f8ee561cd4d43663)
1 /*
2  * Copyright (c) 2012-2016 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"
48 typedef enum {
49 	ONE_BYTE = 1,
50 	TWO_BYTE = 2
51 } eSizeOfLenField;
52 
53 #define LIM_STA_ID_MASK                        0x00FF
54 #define LIM_AID_MASK                              0xC000
55 #define LIM_SPECTRUM_MANAGEMENT_BIT_MASK          0x0100
56 #define LIM_RRM_BIT_MASK                          0x1000
57 #define LIM_SHORT_PREAMBLE_BIT_MASK               0x0020
58 #define LIM_IMMEDIATE_BLOCK_ACK_MASK              0x8000
59 #define LIM_MAX_REASSOC_RETRY_LIMIT            2
60 
61 /* classifier ID is coded as 0-3: tsid, 4-5:direction */
62 #define LIM_MAKE_CLSID(tsid, dir) (((tsid) & 0x0F) | (((dir) & 0x03) << 4))
63 
64 #define VHT_MCS_3x3_MASK    0x30
65 #define VHT_MCS_2x2_MASK    0x0C
66 
67 #define CENTER_FREQ_DIFF_160MHz 8
68 #define CENTER_FREQ_DIFF_80P80MHz 16
69 
70 #define IS_VHT_NSS_1x1(__mcs_map)	((__mcs_map & 0xFFFC) == 0xFFFC)
71 
72 #ifdef WLAN_FEATURE_11W
73 typedef 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 */
83 void limGetBssidFromPkt(tpAniSirGlobal, uint8_t *, uint8_t *, uint32_t *);
84 char *lim_dot11_reason_str(uint16_t reasonCode);
85 char *lim_mlm_state_str(tLimMlmStates state);
86 char *lim_sme_state_str(tLimSmeStates state);
87 char *lim_msg_str(uint32_t msgType);
88 char *lim_result_code_str(tSirResultCodes resultCode);
89 char *lim_dot11_mode_str(tpAniSirGlobal pMac, uint8_t dot11Mode);
90 void lim_print_mlm_state(tpAniSirGlobal pMac, uint16_t logLevel,
91 		tLimMlmStates state);
92 void lim_print_sme_state(tpAniSirGlobal pMac, uint16_t logLevel,
93 		tLimSmeStates state);
94 void lim_print_msg_name(tpAniSirGlobal pMac, uint16_t logLevel, uint32_t msgType);
95 
96 extern tSirRetStatus lim_send_set_max_tx_power_req(tpAniSirGlobal pMac,
97 		int8_t txPower,
98 		tpPESession pSessionEntry);
99 extern uint8_t lim_get_max_tx_power(int8_t regMax, int8_t apTxPower,
100 		uint8_t iniTxPower);
101 uint8_t lim_is_addr_bc(tSirMacAddr);
102 uint8_t lim_is_group_addr(tSirMacAddr);
103 
104 /* check for type of scan allowed */
105 uint8_t lim_active_scan_allowed(tpAniSirGlobal, uint8_t);
106 
107 /* AID pool management functions */
108 void lim_init_peer_idxpool(tpAniSirGlobal, tpPESession);
109 uint16_t lim_assign_peer_idx(tpAniSirGlobal, tpPESession);
110 
111 void lim_enable_overlap11g_protection(tpAniSirGlobal pMac,
112 		tpUpdateBeaconParams pBeaconParams,
113 		tpSirMacMgmtHdr pMh,
114 		tpPESession psessionEntry);
115 void lim_update_overlap_sta_param(tpAniSirGlobal pMac, tSirMacAddr bssId,
116 		tpLimProtStaParams pStaParams);
117 void lim_update_short_preamble(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
118 		tpUpdateBeaconParams pBeaconParams,
119 		tpPESession psessionEntry);
120 void lim_update_short_slot_time(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
121 		tpUpdateBeaconParams pBeaconParams,
122 		tpPESession psessionEntry);
123 
124 /*
125  * The below 'product' check tobe removed if 'Association' is
126  * allowed in IBSS.
127  */
128 void lim_release_peer_idx(tpAniSirGlobal, uint16_t, tpPESession);
129 
130 void lim_decide_ap_protection(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
131 		tpUpdateBeaconParams pBeaconParams, tpPESession);
132 void lim_decide_ap_protection_on_delete(tpAniSirGlobal pMac,
133 		tpDphHashNode pStaDs,
134 		tpUpdateBeaconParams pBeaconParams,
135 		tpPESession psessionEntry);
136 
137 extern tSirRetStatus lim_update_11a_protection(tpAniSirGlobal pMac,
138 		uint8_t enable,
139 		uint8_t overlap,
140 		tpUpdateBeaconParams pBeaconParams,
141 		tpPESession);
142 extern tSirRetStatus lim_enable11g_protection(tpAniSirGlobal pMac,
143 		uint8_t enable,
144 		uint8_t overlap,
145 		tpUpdateBeaconParams pBeaconParams,
146 		tpPESession psessionEntry);
147 extern tSirRetStatus lim_enable_ht_protection_from11g(tpAniSirGlobal pMac,
148 		uint8_t enable,
149 		uint8_t overlap,
150 		tpUpdateBeaconParams
151 		pBeaconParams,
152 		tpPESession psessionEntry);
153 extern tSirRetStatus lim_enable_ht20_protection(tpAniSirGlobal pMac,
154 		uint8_t enable, uint8_t overlap,
155 		tpUpdateBeaconParams pBeaconParams,
156 		tpPESession sessionEntry);
157 extern tSirRetStatus lim_enable_ht_non_gf_protection(tpAniSirGlobal pMac,
158 		uint8_t enable, uint8_t overlap,
159 		tpUpdateBeaconParams
160 		pBeaconParams, tpPESession);
161 extern tSirRetStatus lim_enable_ht_rifs_protection(tpAniSirGlobal pMac,
162 		uint8_t enable, uint8_t overlap,
163 		tpUpdateBeaconParams
164 		pBeaconParams,
165 		tpPESession psessionEntry);
166 extern tSirRetStatus lim_enable_ht_lsig_txop_protection(tpAniSirGlobal pMac,
167 		uint8_t enable,
168 		uint8_t overlap,
169 		tpUpdateBeaconParams
170 		pBeaconParams, tpPESession);
171 extern tSirRetStatus lim_enable_short_preamble(tpAniSirGlobal pMac,
172 		uint8_t enable,
173 		tpUpdateBeaconParams pBeaconParams,
174 		tpPESession psessionEntry);
175 extern tSirRetStatus lim_enable_ht_obss_protection(tpAniSirGlobal pMac,
176 		uint8_t enable, uint8_t overlap,
177 		tpUpdateBeaconParams
178 		pBeaconParams, tpPESession);
179 void lim_decide_sta_protection(tpAniSirGlobal pMac,
180 		tpSchBeaconStruct pBeaconStruct,
181 		tpUpdateBeaconParams pBeaconParams,
182 		tpPESession psessionEntry);
183 void lim_decide_sta_protection_on_assoc(tpAniSirGlobal pMac,
184 		tpSchBeaconStruct pBeaconStruct,
185 		tpPESession psessionEntry);
186 void lim_update_sta_run_time_ht_switch_chnl_params(tpAniSirGlobal pMac,
187 		tDot11fIEHTInfo *pHTInfo,
188 		uint8_t bssIdx,
189 		tpPESession psessionEntry);
190 /* Print MAC address utility function */
191 void lim_print_mac_addr(tpAniSirGlobal, tSirMacAddr, uint8_t);
192 
193 /* Deferred Message Queue read/write */
194 uint8_t lim_write_deferred_msg_q(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
195 tSirMsgQ *lim_read_deferred_msg_q(tpAniSirGlobal pMac);
196 void lim_handle_defer_msg_error(tpAniSirGlobal pMac, tpSirMsgQ pLimMsg);
197 
198 /* Deferred Message Queue Reset */
199 void lim_reset_deferred_msg_q(tpAniSirGlobal pMac);
200 
201 tSirRetStatus lim_sys_process_mmh_msg_api(tpAniSirGlobal, tSirMsgQ *, uint8_t);
202 
203 void lim_handle_update_olbc_cache(tpAniSirGlobal pMac);
204 
205 uint8_t lim_is_null_ssid(tSirMacSSid *pSsid);
206 
207 /* 11h Support */
208 void lim_stop_tx_and_switch_channel(tpAniSirGlobal pMac, uint8_t sessionId);
209 void lim_process_channel_switch_timeout(tpAniSirGlobal);
210 tSirRetStatus lim_start_channel_switch(tpAniSirGlobal pMac,
211 		tpPESession psessionEntry);
212 void lim_update_channel_switch(tpAniSirGlobal, tpSirProbeRespBeacon,
213 		tpPESession psessionEntry);
214 void lim_process_quiet_timeout(tpAniSirGlobal);
215 void lim_process_quiet_bss_timeout(tpAniSirGlobal);
216 
217 void lim_start_quiet_timer(tpAniSirGlobal pMac, uint8_t sessionId);
218 void lim_switch_primary_channel(tpAniSirGlobal, uint8_t, tpPESession);
219 void lim_switch_primary_secondary_channel(tpAniSirGlobal pMac,
220 					tpPESession psessionEntry,
221 					uint8_t newChannel,
222 					uint8_t ch_center_freq_seg0,
223 					uint8_t ch_center_freq_seg1,
224 					enum phy_ch_width ch_width);
225 void limUpdateStaRunTimeHTSwtichChnlParams(tpAniSirGlobal pMac,
226 		tDot11fIEHTInfo *pRcvdHTInfo,
227 		uint8_t bssIdx);
228 void lim_update_sta_run_time_ht_capability(tpAniSirGlobal pMac,
229 		tDot11fIEHTCaps *pHTCaps);
230 void lim_update_sta_run_time_ht_info(struct sAniSirGlobal *pMac,
231 		tDot11fIEHTInfo *pRcvdHTInfo,
232 		tpPESession psessionEntry);
233 void lim_cancel_dot11h_channel_switch(tpAniSirGlobal pMac,
234 		tpPESession psessionEntry);
235 void lim_cancel_dot11h_quiet(tpAniSirGlobal pMac, tpPESession psessionEntry);
236 tAniBool lim_is_channel_valid_for_channel_switch(tpAniSirGlobal pMac,
237 		uint8_t channel);
238 void lim_frame_transmission_control(tpAniSirGlobal pMac, tLimQuietTxMode type,
239 		tLimControlTx mode);
240 tSirRetStatus lim_restore_pre_channel_switch_state(tpAniSirGlobal pMac,
241 		tpPESession psessionEntry);
242 tSirRetStatus lim_restore_pre_quiet_state(tpAniSirGlobal pMac,
243 		tpPESession psessionEntry);
244 
245 void lim_prepare_for11h_channel_switch(tpAniSirGlobal pMac,
246 		tpPESession psessionEntry);
247 void lim_switch_channel_cback(tpAniSirGlobal pMac, QDF_STATUS status,
248 		uint32_t *data, tpPESession psessionEntry);
249 
250 static inline tSirRFBand lim_get_rf_band(uint8_t channel)
251 {
252 	if ((channel >= SIR_11A_CHANNEL_BEGIN) &&
253 			(channel <= SIR_11A_CHANNEL_END))
254 		return SIR_BAND_5_GHZ;
255 
256 	if ((channel >= SIR_11B_CHANNEL_BEGIN) &&
257 			(channel <= SIR_11B_CHANNEL_END))
258 		return SIR_BAND_2_4_GHZ;
259 
260 	return SIR_BAND_UNKNOWN;
261 }
262 
263 static inline tSirRetStatus
264 lim_get_mgmt_staid(tpAniSirGlobal pMac, uint16_t *staid,
265 		tpPESession psessionEntry)
266 {
267 	if (LIM_IS_AP_ROLE(psessionEntry))
268 		*staid = 1;
269 	else if (LIM_IS_STA_ROLE(psessionEntry))
270 		*staid = 0;
271 	else
272 		return eSIR_FAILURE;
273 
274 	return eSIR_SUCCESS;
275 }
276 
277 static inline uint8_t lim_is_system_in_set_mimops_state(tpAniSirGlobal pMac)
278 {
279 	if (pMac->lim.gLimMlmState == eLIM_MLM_WT_SET_MIMOPS_STATE)
280 		return true;
281 	return false;
282 }
283 
284 static inline uint8_t
285 is_entering_mimo_ps(tSirMacHTMIMOPowerSaveState curState,
286 		tSirMacHTMIMOPowerSaveState newState)
287 {
288 	if (curState == eSIR_HT_MIMO_PS_NO_LIMIT &&
289 			(newState == eSIR_HT_MIMO_PS_DYNAMIC
290 			 || newState == eSIR_HT_MIMO_PS_STATIC))
291 		return true;
292 	return false;
293 }
294 
295 static inline int lim_select_cb_mode(tDphHashNode *pStaDs,
296 		tpPESession psessionEntry, uint8_t channel,
297 		uint8_t chan_bw)
298 {
299 	if (pStaDs->mlmStaContext.vhtCapability && chan_bw) {
300 		if (channel == 36 || channel == 52 || channel == 100 ||
301 				channel == 116 || channel == 149) {
302 			return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW - 1;
303 		} else if (channel == 40 || channel == 56 || channel == 104 ||
304 				channel == 120 || channel == 153) {
305 			return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW - 1;
306 		} else if (channel == 44 || channel == 60 || channel == 108 ||
307 				channel == 124 || channel == 157) {
308 			return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH - 1;
309 		} else if (channel == 48 || channel == 64 || channel == 112 ||
310 				channel == 128 || channel == 161) {
311 			return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH - 1;
312 		} else if (channel == 165) {
313 			return PHY_SINGLE_CHANNEL_CENTERED;
314 		}
315 	} else if (pStaDs->mlmStaContext.htCapability) {
316 		if (channel == 40 || channel == 48 || channel == 56 ||
317 			channel == 64 || channel == 104 || channel == 112 ||
318 			channel == 120 || channel == 128 || channel == 136 ||
319 			channel == 144 || channel == 153 || channel == 161) {
320 			return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
321 		} else if (channel == 36 || channel == 44 || channel == 52 ||
322 				channel == 60 || channel == 100 ||
323 				channel == 108 || channel == 116 ||
324 				channel == 124 || channel == 132 ||
325 				channel == 140 || channel == 149 ||
326 				channel == 157) {
327 			return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
328 		} else if (channel == 165) {
329 			return PHY_SINGLE_CHANNEL_CENTERED;
330 		}
331 	}
332 	return PHY_SINGLE_CHANNEL_CENTERED;
333 }
334 
335 /* ANI peer station count management and associated actions */
336 void lim_util_count_sta_add(tpAniSirGlobal pMac, tpDphHashNode pSta,
337 		tpPESession psessionEntry);
338 void lim_util_count_sta_del(tpAniSirGlobal pMac, tpDphHashNode pSta,
339 		tpPESession psessionEntry);
340 
341 uint8_t lim_get_ht_capability(tpAniSirGlobal, uint32_t, tpPESession);
342 void lim_tx_complete(tHalHandle hHal, void *pData, bool free);
343 
344 /**
345  * This function will be registered with HAL for callback when TSPEC inactivity
346  * timer fires.
347  */
348 
349 void lim_process_del_ts_ind(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
350 tSirRetStatus lim_process_hal_ind_messages(tpAniSirGlobal pMac, uint32_t mesgId,
351 		void *mesgParam);
352 tSirRetStatus lim_validate_delts_req(tpAniSirGlobal pMac,
353 		tpSirDeltsReq pDeltsReq,
354 		tSirMacAddr peerMacAddr,
355 		tpPESession psessionEntry);
356 
357 /* callback function registration to HAL for any indication. */
358 void lim_register_hal_ind_call_back(tpAniSirGlobal pMac);
359 void lim_pkt_free(tpAniSirGlobal pMac,
360 		eFrameType frmType, uint8_t *pBD, void *body);
361 
362 void lim_get_b_dfrom_rx_packet(tpAniSirGlobal pMac, void *body, uint32_t **pBD);
363 
364 /**
365  * utils_power_xy() - calc result of base raised to power
366  * @base: Base value
367  * @power: Base raised to this Power value
368  *
369  * Given a base(X) and power(Y), this API will return
370  * the result of base raised to power - (X ^ Y)
371  *
372  * Return: Result of X^Y
373  *
374  */
375 static inline uint32_t utils_power_xy(uint16_t base, uint16_t power)
376 {
377 	uint32_t result = 1, i;
378 
379 	for (i = 0; i < power; i++)
380 		result *= base;
381 
382 	return result;
383 }
384 
385 tSirRetStatus lim_post_sm_state_update(tpAniSirGlobal pMac,
386 		uint16_t StaIdx,
387 		tSirMacHTMIMOPowerSaveState MIMOPSState,
388 		uint8_t *pPeerStaMac, uint8_t sessionId);
389 
390 void lim_delete_sta_context(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
391 void lim_delete_dialogue_token_list(tpAniSirGlobal pMac);
392 void lim_resset_scan_channel_info(tpAniSirGlobal pMac);
393 uint8_t lim_get_channel_from_beacon(tpAniSirGlobal pMac,
394 		tpSchBeaconStruct pBeacon);
395 tSirNwType lim_get_nw_type(tpAniSirGlobal pMac, uint8_t channelNum,
396 		uint32_t type, tpSchBeaconStruct pBeacon);
397 
398 void lim_set_tspec_uapsd_mask_per_session(tpAniSirGlobal pMac,
399 		tpPESession psessionEntry,
400 		tSirMacTSInfo *pTsInfo, uint32_t action);
401 
402 void lim_handle_heart_beat_timeout_for_session(tpAniSirGlobal pMac,
403 		tpPESession psessionEntry);
404 
405 void lim_process_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ pMsgQ);
406 
407 void lim_update_beacon(tpAniSirGlobal pMac);
408 
409 void lim_process_ap_mlm_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,
410 		tpPESession psessionEntry);
411 void lim_process_ap_mlm_del_bss_rsp(tpAniSirGlobal pMac,
412 		tpSirMsgQ limMsgQ,
413 		tpPESession psessionEntry);
414 
415 void lim_process_ap_mlm_del_sta_rsp(tpAniSirGlobal pMac,
416 		tpSirMsgQ limMsgQ,
417 		tpPESession psessionEntry);
418 
419 tpPESession lim_is_ibss_session_active(tpAniSirGlobal pMac);
420 tpPESession lim_is_ap_session_active(tpAniSirGlobal pMac);
421 void lim_handle_heart_beat_failure_timeout(tpAniSirGlobal pMac);
422 
423 uint8_t *lim_get_ie_ptr_new(tpAniSirGlobal pMac, uint8_t *pIes, int length,
424 		uint8_t eid, eSizeOfLenField size_of_len_field);
425 
426 #define limGetWscIEPtr(pMac, ie, ie_len) \
427 	cfg_get_vendor_ie_ptr_from_oui(pMac, SIR_MAC_WSC_OUI, \
428 			SIR_MAC_WSC_OUI_SIZE, ie, ie_len)
429 
430 #define limGetP2pIEPtr(pMac, ie, ie_len) \
431 	cfg_get_vendor_ie_ptr_from_oui(pMac, SIR_MAC_P2P_OUI, \
432 			SIR_MAC_P2P_OUI_SIZE, ie, ie_len)
433 
434 uint8_t lim_get_noa_attr_stream_in_mult_p2p_ies(tpAniSirGlobal pMac,
435 		uint8_t *noaStream, uint8_t noaLen,
436 		uint8_t overFlowLen);
437 uint8_t lim_get_noa_attr_stream(tpAniSirGlobal pMac, uint8_t *pNoaStream,
438 		tpPESession psessionEntry);
439 
440 uint8_t lim_build_p2p_ie(tpAniSirGlobal pMac, uint8_t *ie, uint8_t *data,
441 		uint8_t ie_len);
442 bool lim_is_noa_insert_reqd(tpAniSirGlobal pMac);
443 bool lim_isconnected_on_dfs_channel(uint8_t currentChannel);
444 uint8_t lim_get_current_operating_channel(tpAniSirGlobal pMac);
445 uint32_t lim_get_max_rate_flags(tpAniSirGlobal mac_ctx, tpDphHashNode sta_ds);
446 
447 bool lim_check_vht_op_mode_change(tpAniSirGlobal pMac,
448 		tpPESession psessionEntry,
449 		uint8_t chanWidth, uint8_t staId,
450 		uint8_t *peerMac);
451 bool lim_set_nss_change(tpAniSirGlobal pMac, tpPESession psessionEntry,
452 		uint8_t rxNss, uint8_t staId, uint8_t *peerMac);
453 bool lim_check_membership_user_position(tpAniSirGlobal pMac,
454 		tpPESession psessionEntry,
455 		uint32_t membership, uint32_t userPosition,
456 		uint8_t staId);
457 
458 #ifdef FEATURE_WLAN_DIAG_SUPPORT
459 
460 typedef enum {
461 	WLAN_PE_DIAG_SCAN_REQ_EVENT = 0,
462 	WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT,
463 	WLAN_PE_DIAG_SCAN_RSP_EVENT,
464 	WLAN_PE_DIAG_JOIN_REQ_EVENT,
465 	WLAN_PE_DIAG_JOIN_RSP_EVENT,
466 	WLAN_PE_DIAG_SETCONTEXT_REQ_EVENT,
467 	WLAN_PE_DIAG_SETCONTEXT_RSP_EVENT,
468 	WLAN_PE_DIAG_REASSOC_REQ_EVENT,
469 	WLAN_PE_DIAG_REASSOC_RSP_EVENT,
470 	WLAN_PE_DIAG_AUTH_REQ_EVENT,
471 	WLAN_PE_DIAG_AUTH_RSP_EVENT = 10,
472 	WLAN_PE_DIAG_DISASSOC_REQ_EVENT,
473 	WLAN_PE_DIAG_DISASSOC_RSP_EVENT,
474 	WLAN_PE_DIAG_DISASSOC_IND_EVENT,
475 	WLAN_PE_DIAG_DISASSOC_CNF_EVENT,
476 	WLAN_PE_DIAG_DEAUTH_REQ_EVENT,
477 	WLAN_PE_DIAG_DEAUTH_RSP_EVENT,
478 	WLAN_PE_DIAG_DEAUTH_IND_EVENT,
479 	WLAN_PE_DIAG_START_BSS_REQ_EVENT,
480 	WLAN_PE_DIAG_START_BSS_RSP_EVENT,
481 	WLAN_PE_DIAG_AUTH_IND_EVENT = 20,
482 	WLAN_PE_DIAG_ASSOC_IND_EVENT,
483 	WLAN_PE_DIAG_ASSOC_CNF_EVENT,
484 	WLAN_PE_DIAG_REASSOC_IND_EVENT,
485 	WLAN_PE_DIAG_SWITCH_CHL_IND_EVENT,
486 	WLAN_PE_DIAG_STOP_BSS_REQ_EVENT,
487 	WLAN_PE_DIAG_STOP_BSS_RSP_EVENT,
488 	WLAN_PE_DIAG_DEAUTH_CNF_EVENT,
489 	WLAN_PE_DIAG_ADDTS_REQ_EVENT,
490 	WLAN_PE_DIAG_ADDTS_RSP_EVENT,
491 	WLAN_PE_DIAG_DELTS_REQ_EVENT = 30,
492 	WLAN_PE_DIAG_DELTS_RSP_EVENT,
493 	WLAN_PE_DIAG_DELTS_IND_EVENT,
494 	WLAN_PE_DIAG_ENTER_BMPS_REQ_EVENT,
495 	WLAN_PE_DIAG_ENTER_BMPS_RSP_EVENT,
496 	WLAN_PE_DIAG_EXIT_BMPS_REQ_EVENT,
497 	WLAN_PE_DIAG_EXIT_BMPS_RSP_EVENT,
498 	WLAN_PE_DIAG_EXIT_BMPS_IND_EVENT,
499 	WLAN_PE_DIAG_ENTER_UAPSD_REQ_EVENT,
500 	WLAN_PE_DIAG_ENTER_UAPSD_RSP_EVENT,
501 	WLAN_PE_DIAG_EXIT_UAPSD_REQ_EVENT = 40,
502 	WLAN_PE_DIAG_EXIT_UAPSD_RSP_EVENT,
503 	WLAN_PE_DIAG_WOWL_ADD_BCAST_PTRN_EVENT,
504 	WLAN_PE_DIAG_WOWL_DEL_BCAST_PTRN_EVENT,
505 	WLAN_PE_DIAG_ENTER_WOWL_REQ_EVENT,
506 	WLAN_PE_DIAG_ENTER_WOWL_RSP_EVENT,
507 	WLAN_PE_DIAG_EXIT_WOWL_REQ_EVENT,
508 	WLAN_PE_DIAG_EXIT_WOWL_RSP_EVENT,
509 	WLAN_PE_DIAG_HB_FAILURE_TIMEOUT,
510 	WLAN_PE_DIAG_PRE_AUTH_REQ_EVENT,
511 	WLAN_PE_DIAG_PRE_AUTH_RSP_EVENT = 50,
512 	WLAN_PE_DIAG_PREAUTH_DONE,
513 	WLAN_PE_DIAG_REASSOCIATING,
514 	WLAN_PE_DIAG_CONNECTED,
515 	WLAN_PE_DIAG_ASSOC_REQ_EVENT,
516 	WLAN_PE_DIAG_AUTH_COMP_EVENT,
517 	WLAN_PE_DIAG_ASSOC_COMP_EVENT,
518 	WLAN_PE_DIAG_AUTH_START_EVENT,
519 	WLAN_PE_DIAG_ASSOC_START_EVENT,
520 	WLAN_PE_DIAG_REASSOC_START_EVENT,
521 	WLAN_PE_DIAG_ROAM_AUTH_START_EVENT = 60,
522 	WLAN_PE_DIAG_ROAM_AUTH_COMP_EVENT,
523 	WLAN_PE_DIAG_ROAM_ASSOC_START_EVENT,
524 	WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT,
525 	RESERVED1, /* = 64 for SCAN_COMPLETE */
526 	RESERVED2, /* = 65 for SCAN_RES_FOUND */
527 	WLAN_PE_DIAG_ASSOC_TIMEOUT,
528 	WLAN_PE_DIAG_AUTH_TIMEOUT,
529 } WLAN_PE_DIAG_EVENT_TYPE;
530 
531 void lim_diag_event_report(tpAniSirGlobal pMac, uint16_t eventType,
532 		tpPESession pSessionEntry, uint16_t status,
533 		uint16_t reasonCode);
534 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
535 
536 void pe_set_resume_channel(tpAniSirGlobal pMac, uint16_t channel,
537 		ePhyChanBondState cbState);
538 
539 void lim_get_short_slot_from_phy_mode(tpAniSirGlobal pMac,
540 		tpPESession psessionEntry,
541 		uint32_t phyMode, uint8_t *pShortSlotEnable);
542 
543 void lim_clean_up_disassoc_deauth_req(tpAniSirGlobal pMac, uint8_t *staMac,
544 		bool cleanRxPath);
545 
546 bool lim_check_disassoc_deauth_ack_pending(tpAniSirGlobal pMac,
547 		uint8_t *staMac);
548 
549 #ifdef WLAN_FEATURE_11W
550 void lim_pmf_sa_query_timer_handler(void *pMacGlobal, uint32_t param);
551 #endif
552 
553 void lim_set_protected_bit(tpAniSirGlobal pMac,
554 		tpPESession psessionEntry,
555 		tSirMacAddr peer, tpSirMacMgmtHdr pMacHdr);
556 
557 #ifdef WLAN_FEATURE_11W
558 void lim_pmf_comeback_timer_callback(void *context);
559 #endif /* WLAN_FEATURE_11W */
560 
561 void lim_set_ht_caps(tpAniSirGlobal p_mac,
562 		tpPESession p_session_ntry,
563 		uint8_t *p_ie_start,
564 		uint32_t num_bytes);
565 
566 void lim_set_vht_caps(tpAniSirGlobal p_mac,
567 		tpPESession p_session_entry,
568 		uint8_t *p_ie_start,
569 		uint32_t num_bytes);
570 bool lim_validate_received_frame_a1_addr(tpAniSirGlobal mac_ctx,
571 		tSirMacAddr a1, tpPESession session);
572 void lim_set_stads_rtt_cap(tpDphHashNode sta_ds, struct s_ext_cap *ext_cap,
573 			   tpAniSirGlobal mac_ctx);
574 
575 void lim_check_and_reset_protection_params(tpAniSirGlobal mac_ctx);
576 
577 QDF_STATUS lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, uint32_t session_id,
578 			       tDot11fIEExtCap *extracted_extcap, bool merge);
579 
580 QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
581 				 tpPESession session, uint8_t vdev_id);
582 
583 tSirRetStatus lim_strip_extcap_ie(tpAniSirGlobal mac_ctx, uint8_t *addn_ie,
584 			  uint16_t *addn_ielen, uint8_t *extracted_extcap);
585 void lim_update_extcap_struct(tpAniSirGlobal mac_ctx, uint8_t *buf,
586 			      tDot11fIEExtCap *ext_cap);
587 tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx,
588 		uint8_t *addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst);
589 void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src);
590 
591 uint8_t lim_get_80Mhz_center_channel(uint8_t primary_channel);
592 void lim_update_obss_scanparams(tpPESession session,
593 			tDot11fIEOBSSScanParameters *scan_params);
594 void lim_init_obss_params(tpAniSirGlobal mac_ctx, tpPESession session);
595 #ifdef WLAN_FEATURE_HOST_ROAM
596 uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx);
597 void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx);
598 void lim_deactivate_and_change_timer_host_roam(tpAniSirGlobal mac_ctx,
599 		uint32_t timer_id);
600 #else
601 static inline uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx)
602 {
603 	return 0;
604 }
605 static inline void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx)
606 {}
607 static inline void lim_deactivate_and_change_timer_host_roam(
608 		tpAniSirGlobal mac_ctx, uint32_t timer_id)
609 {}
610 #endif
611 
612 bool lim_is_robust_mgmt_action_frame(uint8_t action_category);
613 bool lim_is_ext_cap_ie_present (struct s_ext_cap *ext_cap);
614 QDF_STATUS lim_p2p_action_cnf(tpAniSirGlobal mac_ctx,
615 			uint32_t tx_complete_success);
616 void lim_update_caps_info_for_bss(tpAniSirGlobal mac_ctx,
617 			uint16_t *caps, uint16_t bss_caps);
618 void lim_send_set_dtim_period(tpAniSirGlobal mac_ctx, uint8_t dtim_period,
619 			      tpPESession session);
620 
621 tSirRetStatus lim_strip_ie(tpAniSirGlobal mac_ctx,
622 		uint8_t *addn_ie, uint16_t *addn_ielen,
623 		uint8_t eid, eSizeOfLenField size_of_len_field,
624 		uint8_t *oui, uint8_t out_len, uint8_t *extracted_ie);
625 #endif /* __LIM_UTILS_H */
626