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