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