1 /* 2 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /* 21 * This file lim_types.h contains the definitions used by all 22 * all LIM modules. 23 * Author: Chandra Modumudi 24 * Date: 02/11/02 25 * History:- 26 * Date Modified by Modification Information 27 * -------------------------------------------------------------------- 28 * 29 */ 30 #ifndef __LIM_TYPES_H 31 #define __LIM_TYPES_H 32 33 #include "wni_api.h" 34 #include "sir_api.h" 35 #include "sir_common.h" 36 #include "sir_mac_prot_def.h" 37 #include "utils_api.h" 38 39 #include "lim_api.h" 40 #include "lim_trace.h" 41 #include "lim_send_sme_rsp_messages.h" 42 #include "sys_global.h" 43 #include "dph_global.h" 44 #include "parser_api.h" 45 #include "wma_if.h" 46 47 #define LINK_TEST_DEFER 1 48 49 #define TRACE_EVENT_CNF_TIMER_DEACT 0x6600 50 #define TRACE_EVENT_CNF_TIMER_ACT 0x6601 51 #define TRACE_EVENT_AUTH_RSP_TIMER_DEACT 0x6602 52 #define TRACE_EVENT_AUTH_RSP_TIMER_ACT 0x6603 53 54 #define SAE_AUTH_SEQ_NUM_OFFSET 2 55 #define SAE_AUTH_STATUS_CODE_OFFSET 4 56 #define SAE_AUTH_GROUP_ID_OFFSET 6 57 58 #define SAE_GROUP_ID_19 19 59 #define SAE_GROUP_ID_20 20 60 #define SAE_GROUP_ID_21 21 61 62 #define SAE_GROUP_19_FIXED_FIELDS_LEN 96 63 #define SAE_GROUP_20_FIXED_FIELDS_LEN 144 64 #define SAE_GROUP_21_FIXED_FIELDS_LEN 198 65 66 #define WLAN_SAE_STATUS_HASH_TO_ELEMENT 126 67 #define WLAN_SAE_STATUS_PK 127 68 69 /* MLM message types */ 70 enum mlmmsgtype { 71 LIM_MLM_MSG_START = 1000, 72 LIM_MLM_SCAN_REQ = LIM_MLM_MSG_START, 73 LIM_MLM_SCAN_CNF = (LIM_MLM_MSG_START + 1), 74 LIM_MLM_START_CNF = (LIM_MLM_MSG_START + 3), 75 LIM_MLM_JOIN_REQ = (LIM_MLM_MSG_START + 4), 76 LIM_MLM_JOIN_CNF = (LIM_MLM_MSG_START + 5), 77 LIM_MLM_AUTH_REQ = (LIM_MLM_MSG_START + 6), 78 LIM_MLM_AUTH_CNF = (LIM_MLM_MSG_START + 7), 79 LIM_MLM_AUTH_IND = (LIM_MLM_MSG_START + 8), 80 LIM_MLM_ASSOC_REQ = (LIM_MLM_MSG_START + 9), 81 LIM_MLM_ASSOC_CNF = (LIM_MLM_MSG_START + 10), 82 LIM_MLM_ASSOC_IND = (LIM_MLM_MSG_START + 11), 83 LIM_MLM_DISASSOC_REQ = (LIM_MLM_MSG_START + 12), 84 LIM_MLM_DISASSOC_CNF = (LIM_MLM_MSG_START + 13), 85 LIM_MLM_DISASSOC_IND = (LIM_MLM_MSG_START + 14), 86 LIM_MLM_REASSOC_CNF = (LIM_MLM_MSG_START + 15), 87 LIM_MLM_REASSOC_IND = (LIM_MLM_MSG_START + 16), 88 LIM_MLM_DEAUTH_REQ = (LIM_MLM_MSG_START + 17), 89 LIM_MLM_DEAUTH_CNF = (LIM_MLM_MSG_START + 18), 90 LIM_MLM_DEAUTH_IND = (LIM_MLM_MSG_START + 19), 91 LIM_MLM_TSPEC_REQ = (LIM_MLM_MSG_START + 20), 92 LIM_MLM_TSPEC_CNF = (LIM_MLM_MSG_START + 21), 93 LIM_MLM_TSPEC_IND = (LIM_MLM_MSG_START + 22), 94 LIM_MLM_SETKEYS_CNF = LIM_MLM_MSG_START + 24, 95 LIM_MLM_LINK_TEST_STOP_REQ = LIM_MLM_MSG_START + 30, 96 LIM_MLM_PURGE_STA_IND = (LIM_MLM_MSG_START + 31), 97 /* 98 * Values (LIM_MLM_MSG_START + 32) through 99 * (LIM_MLM_MSG_START + 40) are unused. 100 */ 101 }; 102 103 #define LIM_WEP_IN_FC 1 104 #define LIM_NO_WEP_IN_FC 0 105 106 #define LIM_DECRYPT_ICV_FAIL 1 107 108 /* / Definitions to distinguish between Association/Reassociaton */ 109 #define LIM_ASSOC 0 110 #define LIM_REASSOC 1 111 112 /* / Verifies whether given mac addr matches the CURRENT Bssid */ 113 #define IS_CURRENT_BSSID(mac, addr, pe_session) (!qdf_mem_cmp(addr, \ 114 pe_session->bssId, \ 115 sizeof(pe_session->bssId))) 116 /* / Verifies whether given addr matches the REASSOC Bssid */ 117 #define IS_REASSOC_BSSID(mac, addr, pe_session) (!qdf_mem_cmp(addr, \ 118 pe_session->limReAssocbssId, \ 119 sizeof(pe_session->limReAssocbssId))) 120 121 #define REQ_TYPE_REGISTRAR (0x2) 122 #define REQ_TYPE_WLAN_MANAGER_REGISTRAR (0x3) 123 124 #define RESP_TYPE_ENROLLEE_INFO_ONLY (0x0) 125 #define RESP_TYPE_ENROLLEE_OPEN_8021X (0x1) 126 #define RESP_TYPE_AP (0x3) 127 128 129 #define HAL_USE_SELF_STA_REQUESTED_MASK 0x2 /* bit 1 for STA overwrite with selfSta Requested. */ 130 131 #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 /* Bit 6 will be used to control BD rate for Management frames */ 132 #define HAL_USE_PEER_STA_REQUESTED_MASK 0x80 /* bit 7 will be used to control frames for p2p interface */ 133 #define HAL_USE_PMF 0x20 134 #define HAL_USE_INCORRECT_KEY_PMF 0x10 135 136 #define MGMT_TX_USE_INCORRECT_KEY BIT(0) 137 138 #define LIM_DOS_PROTECTION_TIME 1000 //1000ms 139 /* enums used by LIM are as follows */ 140 141 enum eLimDisassocTrigger { 142 eLIM_HOST_DISASSOC, 143 eLIM_PEER_ENTITY_DISASSOC, 144 eLIM_LINK_MONITORING_DISASSOC, 145 eLIM_PROMISCUOUS_MODE_DISASSOC, 146 eLIM_HOST_DEAUTH, 147 eLIM_PEER_ENTITY_DEAUTH, 148 eLIM_LINK_MONITORING_DEAUTH, 149 eLIM_JOIN_FAILURE, 150 eLIM_REASSOC_REJECT, 151 eLIM_DUPLICATE_ENTRY, 152 }; 153 154 /** 155 * enum eChannelChangeReasonCodes - Reason code to determine the channel change 156 * reason 157 * @LIM_SWITCH_CHANNEL_REASSOC: channel switch to reassoc 158 * @LIM_SWITCH_CHANNEL_JOIN: switch for connect req 159 * @LIM_SWITCH_CHANNEL_OPERATION: Generic change channel for STA 160 * @LIM_SWITCH_CHANNEL_SAP_DFS: SAP channel change req 161 * @LIM_SWITCH_CHANNEL_HT_WIDTH: HT channel width change reg 162 * @LIM_SWITCH_CHANNEL_MONITOR: Monitor mode channel change req 163 */ 164 enum eChannelChangeReasonCodes { 165 LIM_SWITCH_CHANNEL_REASSOC, 166 LIM_SWITCH_CHANNEL_JOIN, 167 LIM_SWITCH_CHANNEL_OPERATION, 168 LIM_SWITCH_CHANNEL_SAP_DFS, 169 LIM_SWITCH_CHANNEL_HT_WIDTH, 170 LIM_SWITCH_CHANNEL_MONITOR, 171 }; 172 173 typedef struct sLimMlmStartReq { 174 tSirMacSSid ssId; 175 enum bss_type bssType; 176 tSirMacAddr bssId; 177 tSirMacBeaconInterval beaconPeriod; 178 uint8_t dtimPeriod; 179 tSirMacCfParamSet cfParamSet; 180 uint32_t oper_ch_freq; 181 ePhyChanBondState cbMode; 182 tSirMacRateSet rateSet; 183 uint8_t sessionId; /* Added For BT-AMP Support */ 184 185 /* Parameters reqd for new HAL (message) interface */ 186 tSirNwType nwType; 187 uint8_t htCapable; 188 tSirMacHTOperatingMode htOperMode; 189 uint8_t dualCTSProtection; 190 uint8_t txChannelWidthSet; 191 uint8_t ssidHidden; 192 uint8_t wps_state; 193 uint8_t obssProtEnabled; 194 uint16_t beacon_tx_rate; 195 uint32_t cac_duration_ms; 196 uint32_t dfs_regdomain; 197 } tLimMlmStartReq, *tpLimMlmStartReq; 198 199 typedef struct sLimMlmStartCnf { 200 tSirResultCodes resultCode; 201 uint8_t sessionId; 202 } tLimMlmStartCnf, *tpLimMlmStartCnf; 203 204 typedef struct sLimMlmJoinCnf { 205 tSirResultCodes resultCode; 206 uint16_t protStatusCode; 207 uint8_t sessionId; 208 } tLimMlmJoinCnf, *tpLimMlmJoinCnf; 209 210 typedef struct sLimMlmAssocReq { 211 tSirMacAddr peerMacAddr; 212 uint16_t capabilityInfo; 213 tSirMacListenInterval listenInterval; 214 uint8_t sessionId; 215 } tLimMlmAssocReq, *tpLimMlmAssocReq; 216 217 typedef struct sLimMlmAssocCnf { 218 tSirResultCodes resultCode; /* Internal status code. */ 219 uint16_t protStatusCode; /* Protocol Status code. */ 220 uint8_t sessionId; 221 } tLimMlmAssocCnf, *tpLimMlmAssocCnf; 222 223 typedef struct sLimMlmAssocInd { 224 tSirMacAddr peerMacAddr; 225 uint16_t aid; 226 tAniAuthType authType; 227 enum ani_akm_type akm_type; 228 tAniSSID ssId; 229 tSirRSNie rsnIE; 230 tSirWAPIie wapiIE; 231 tSirAddie addIE; /* additional IE received from the peer, which possibly includes WSC IE and/or P2P IE. */ 232 tSirMacCapabilityInfo capabilityInfo; 233 bool spectrumMgtIndicator; 234 struct power_cap_info powerCap; 235 struct supported_channels supportedChannels; 236 uint8_t sessionId; 237 238 bool WmmStaInfoPresent; 239 240 /* Required for indicating the frames to upper layer */ 241 uint32_t assocReqLength; 242 uint8_t *assocReqPtr; 243 struct oem_channel_info chan_info; 244 bool ampdu; 245 bool sgi_enable; 246 bool tx_stbc; 247 bool rx_stbc; 248 tSirMacHTChannelWidth ch_width; 249 enum sir_sme_phy_mode mode; 250 uint8_t max_supp_idx; 251 uint8_t max_ext_idx; 252 uint8_t max_mcs_idx; 253 uint8_t max_real_mcs_idx; 254 uint8_t rx_mcs_map; 255 uint8_t tx_mcs_map; 256 uint8_t ecsa_capable; 257 uint32_t ext_cap; 258 uint8_t supported_band; 259 260 tDot11fIEHTCaps ht_caps; 261 tDot11fIEVHTCaps vht_caps; 262 bool he_caps_present; 263 bool eht_caps_present; 264 bool is_sae_authenticated; 265 #ifdef WLAN_FEATURE_11BE_MLO 266 tSirMacAddr peer_mld_addr; 267 #endif 268 } tLimMlmAssocInd, *tpLimMlmAssocInd; 269 270 typedef struct sLimMlmReassocReq { 271 tSirMacAddr peerMacAddr; 272 uint16_t capabilityInfo; 273 tSirMacListenInterval listenInterval; 274 uint8_t sessionId; 275 } tLimMlmReassocReq, *tpLimMlmReassocReq; 276 277 typedef struct sLimMlmReassocCnf { 278 tSirResultCodes resultCode; 279 uint16_t protStatusCode; /* Protocol Status code. */ 280 uint8_t sessionId; 281 } tLimMlmReassocCnf, *tpLimMlmReassocCnf; 282 283 typedef struct sLimMlmAuthCnf { 284 tSirMacAddr peerMacAddr; 285 tAniAuthType authType; 286 tSirResultCodes resultCode; 287 uint16_t protStatusCode; 288 uint8_t sessionId; 289 } tLimMlmAuthCnf, *tpLimMlmAuthCnf; 290 291 typedef struct sLimMlmDeauthReq { 292 struct qdf_mac_addr peer_macaddr; 293 uint16_t reasonCode; 294 uint16_t deauthTrigger; 295 uint16_t aid; 296 uint8_t sessionId; /* Added for BT-AMP SUPPORT */ 297 298 } tLimMlmDeauthReq, *tpLimMlmDeauthReq; 299 300 typedef struct sLimMlmDeauthCnf { 301 struct qdf_mac_addr peer_macaddr; 302 tSirResultCodes resultCode; 303 uint16_t deauthTrigger; 304 uint16_t aid; 305 uint8_t sessionId; 306 } tLimMlmDeauthCnf, *tpLimMLmDeauthCnf; 307 308 typedef struct sLimMlmDeauthInd { 309 tSirMacAddr peerMacAddr; 310 uint16_t reasonCode; 311 uint16_t deauthTrigger; 312 uint16_t aid; 313 } tLimMlmDeauthInd, *tpLimMlmDeauthInd; 314 315 typedef struct sLimMlmDisassocReq { 316 struct qdf_mac_addr peer_macaddr; 317 uint16_t reasonCode; 318 uint16_t disassocTrigger; 319 uint16_t aid; 320 uint8_t sessionId; 321 } tLimMlmDisassocReq, *tpLimMlmDisassocReq; 322 323 typedef struct sLimMlmDisassocCnf { 324 tSirMacAddr peerMacAddr; 325 tSirResultCodes resultCode; 326 uint16_t disassocTrigger; 327 uint16_t aid; 328 uint8_t sessionId; 329 } tLimMlmDisassocCnf, *tpLimMlmDisassocCnf; 330 331 typedef struct sLimMlmDisassocInd { 332 tSirMacAddr peerMacAddr; 333 uint16_t reasonCode; 334 uint16_t disassocTrigger; 335 uint16_t aid; 336 uint8_t sessionId; 337 } tLimMlmDisassocInd, *tpLimMlmDisassocInd; 338 339 typedef struct sLimMlmPurgeStaInd { 340 tSirMacAddr peerMacAddr; 341 uint16_t reasonCode; 342 uint16_t purgeTrigger; 343 uint16_t aid; 344 uint8_t sessionId; 345 } tLimMlmPurgeStaInd, *tpLimMlmPurgeStaInd; 346 347 /** 348 * struct sLimMlmSetKeysCnf - set key confirmation parameters 349 * @peer_macaddr: peer mac address 350 * @resultCode: Result of set key operation 351 * @aid: association id 352 * @sessionId: PE session id 353 * @key_len_nonzero: Keys are non-zero length 354 */ 355 typedef struct sLimMlmSetKeysCnf { 356 struct qdf_mac_addr peer_macaddr; 357 uint16_t resultCode; 358 uint16_t aid; 359 uint8_t sessionId; 360 bool key_len_nonzero; 361 } tLimMlmSetKeysCnf, *tpLimMlmSetKeysCnf; 362 363 /* Function templates */ 364 365 bool lim_process_sme_req_messages(struct mac_context *, struct scheduler_msg *); 366 void lim_process_mlm_req_messages(struct mac_context *, struct scheduler_msg *); 367 void lim_process_mlm_rsp_messages(struct mac_context *, uint32_t, uint32_t *); 368 void lim_process_sme_del_bss_rsp(struct mac_context *mac, 369 struct pe_session *pe_session); 370 371 /** 372 * lim_process_mlm_start_cnf(): called to processes MLM_START_CNF message from 373 * MLM State machine. 374 * @mac_ctx: Pointer to Global MAC structure 375 * @msg_buf: A pointer to the MLM message buffer 376 * 377 * Return: None 378 */ 379 void lim_process_mlm_start_cnf(struct mac_context *mac_ctx, uint32_t *msg_buf); 380 381 void lim_get_random_bssid(struct mac_context *mac, uint8_t *data); 382 383 /* Function to handle HT and HT IE CFG parameter intializations */ 384 void handle_ht_capabilityand_ht_info(struct mac_context *mac, 385 struct pe_session *pe_session); 386 387 void lim_handle_param_update(struct mac_context *mac, eUpdateIEsType cfgId); 388 389 /* Function to apply CFG parameters before join/reassoc/start BSS */ 390 void lim_apply_configuration(struct mac_context *, struct pe_session *); 391 392 /** 393 * lim_set_cfg_protection() - sets lim global cfg cache from the config 394 * @mac: global mac context 395 * @pesessionEntry: PE session 396 * 397 * Return none 398 */ 399 void lim_set_cfg_protection(struct mac_context *mac, struct pe_session *pesessionEntry); 400 401 /* Function to Initialize MLM state machine on STA */ 402 QDF_STATUS lim_init_mlm(struct mac_context *); 403 404 /** 405 * struct pasn_peer_delete_msg - PASN peer delete request message 406 * @message_type: Message type 407 * @length: message length 408 * @vdev_id: Vdev id 409 */ 410 struct pasn_peer_delete_msg { 411 uint16_t message_type; 412 uint16_t length; 413 uint8_t vdev_id; 414 }; 415 416 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT) 417 /** 418 * lim_process_pasn_delete_all_peers() - Process delete all PASN peers 419 * request 420 * @mac: Pointer to mac address 421 * @msg: Peer delete message 422 * 423 * Return: QDF_STATUS 424 */ 425 QDF_STATUS 426 lim_process_pasn_delete_all_peers(struct mac_context *mac, 427 struct pasn_peer_delete_msg *msg); 428 #else 429 static inline QDF_STATUS 430 lim_process_pasn_delete_all_peers(struct mac_context *mac, 431 struct pasn_peer_delete_msg *msg) 432 { 433 return QDF_STATUS_SUCCESS; 434 } 435 #endif 436 437 /* Function to cleanup MLM state machine */ 438 void lim_cleanup_mlm(struct mac_context *); 439 440 /* Management frame handling functions */ 441 442 #ifdef WLAN_FEATURE_11BE 443 /** 444 * lim_process_beacon_eht() - process beacon 11be IE 445 * @mac_ctx: global mac context 446 * @session: pe session 447 * @bcn_ptr: pointer to tSchBeaconStruct 448 * 449 * Return none 450 */ 451 void lim_process_beacon_eht(struct mac_context *mac_ctx, 452 struct pe_session *session, 453 tSchBeaconStruct *bcn_ptr); 454 455 /** 456 * lim_process_beacon_eht_op() - process beacon 11be eht op IE 457 * @session: pe session 458 * @bcn_ptr: pointer to bcn ptr 459 * 460 * Return none 461 */ 462 void lim_process_beacon_eht_op(struct pe_session *session, 463 struct sSirProbeRespBeacon *bcn_ptr); 464 #else 465 static inline 466 void lim_process_beacon_eht(struct mac_context *mac_ctx, 467 struct pe_session *session, 468 tSchBeaconStruct *bcn_ptr) 469 { 470 } 471 472 static inline 473 void lim_process_beacon_eht_op(struct pe_session *session, 474 struct sSirProbeRespBeacon *bcn_ptr) 475 { 476 } 477 #endif 478 479 #ifdef WLAN_FEATURE_11BE_MLO 480 /** 481 * lim_process_bcn_prb_rsp_t2lm() - process beacon/probe response 482 * 11be t2lm IE 483 * @mac_ctx: global mac context 484 * @session: pe session 485 * @bcn_ptr: pointer to tpSirProbeRespBeacon 486 * 487 * Return none 488 */ 489 void lim_process_bcn_prb_rsp_t2lm(struct mac_context *mac_ctx, 490 struct pe_session *session, 491 tpSirProbeRespBeacon bcn_ptr); 492 493 /** 494 * lim_process_beacon_mlo() - process beacon mlo IE 495 * @mac_ctx: global mac context 496 * @session: pe session 497 * @bcn_ptr: pointer to tSchBeaconStruct 498 * 499 * Return none 500 */ 501 void lim_process_beacon_mlo(struct mac_context *mac_ctx, 502 struct pe_session *session, 503 tSchBeaconStruct *bcn_ptr); 504 505 /** 506 * lim_process_ml_reconfig() - to process beacon frames with reconfig IE 507 * @mac_ctx: Pointer to Global MAC structure 508 * @session: A pointer to session 509 * @rx_pkt_info: A pointer to RX packet info structure 510 * 511 * This function will process ml reconfig beacon frames. If reconfig ie 512 * is present for link removal, link reconfig timer will start. 513 * 514 * Return: none 515 */ 516 void 517 lim_process_ml_reconfig(struct mac_context *mac_ctx, 518 struct pe_session *session, 519 uint8_t *rx_pkt_info); 520 #else 521 static inline 522 void lim_process_beacon_mlo(struct mac_context *mac_ctx, 523 struct pe_session *session, 524 tSchBeaconStruct *bcn_ptr) 525 { 526 } 527 528 static inline 529 void lim_process_bcn_prb_rsp_t2lm(struct mac_context *mac_ctx, 530 struct pe_session *session, 531 tpSirProbeRespBeacon bcn_ptr) 532 { 533 } 534 535 static inline void 536 lim_process_ml_reconfig(struct mac_context *mac_ctx, 537 struct pe_session *session, 538 uint8_t *rx_pkt_info) 539 { 540 } 541 #endif 542 543 void lim_process_beacon_frame(struct mac_context *, uint8_t *, struct pe_session *); 544 void lim_process_probe_req_frame(struct mac_context *, uint8_t *, struct pe_session *); 545 void lim_process_probe_rsp_frame(struct mac_context *, uint8_t *, struct pe_session *); 546 void lim_process_probe_req_frame_multiple_bss(struct mac_context *, uint8_t *, 547 struct pe_session *); 548 549 /** 550 * lim_process_gen_probe_rsp_frame() - process generate probe rsp frame 551 * @mac_ctx: pointer to global mac context 552 * @session_entry: pointer to pe session 553 * @bcn_probe: pointer to the data frame 554 * @len: the length of data frame 555 * 556 * Return: void 557 */ 558 void lim_process_gen_probe_rsp_frame(struct mac_context *mac_ctx, 559 struct pe_session *session_entry, 560 uint8_t *bcn_probe, uint32_t len); 561 562 /* Process Auth frame when we have a session in progress. */ 563 void lim_process_auth_frame(struct mac_context *, uint8_t *, struct pe_session *); 564 565 /** 566 * lim_process_auth_frame_no_session() - Process auth frame received from AP to 567 * which we are not connected currently. 568 * @mac: Pointer to global mac context 569 * @bd: Pointer to rx auth frame 570 * @body: Pointer to lim_msg->body_ptr 571 * 572 * This is possibly the pre-auth from the neighbor AP, in the same mobility 573 * domain or pre-authentication reply for WPA3 SAE roaming. 574 * This will be used in case of 11r FT. 575 */ 576 QDF_STATUS lim_process_auth_frame_no_session(struct mac_context *mac, 577 uint8_t *bd, void *body); 578 579 /** 580 * lim_check_assoc_req() - check session and peer info before handling it 581 * @mac_ctx: pointer to Global MAC structure 582 * @sub_type: Assoc(=0) or Reassoc(=1) Requestframe 583 * @sa: Mac address of requesting peer 584 * @session: pointer to pe session entry 585 * 586 * Return: QDF_STATUS 587 */ 588 QDF_STATUS lim_check_assoc_req(struct mac_context *mac_ctx, 589 uint8_t sub_type, tSirMacAddr sa, 590 struct pe_session *session); 591 592 /** 593 * lim_proc_assoc_req_frm_cmn() - process assoc req frame 594 * @mac_ctx: pointer to Global MAC structure 595 * @sub_type: Assoc(=0) or Reassoc(=1) Requestframe 596 * @session: pointer to pe session entry 597 * @sa: Mac address of requesting peer 598 * @assoc_req: assoc req 599 * @peer_aid: association id 600 * 601 * Return: QDF_STATUS 602 */ 603 QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx, 604 uint8_t sub_type, 605 struct pe_session *session, 606 tSirMacAddr sa, 607 tpSirAssocReq assoc_req, 608 uint16_t peer_aid); 609 610 void lim_process_assoc_req_frame(struct mac_context *, uint8_t *, uint8_t, struct pe_session *); 611 612 /** 613 * lim_fill_lim_assoc_ind_params() - Initialize lim association indication 614 * @assoc_ind: PE association indication structure 615 * @mac_ctx: Pointer to Global MAC structure 616 * @sta_ds: station dph entry 617 * @session_entry: PE session entry 618 * 619 * Return: true if lim assoc ind filled successfully 620 */ 621 bool lim_fill_lim_assoc_ind_params( 622 tpLimMlmAssocInd assoc_ind, 623 struct mac_context *mac_ctx, 624 tpDphHashNode sta_ds, 625 struct pe_session *session_entry); 626 627 /** 628 * lim_sae_auth_cleanup_retry() - API to cleanup sae auth frmae stored 629 * and deactivate the timer 630 * @mac_ctx: Pointer to mac context 631 * @vdev_id: vdev id 632 * 633 * Return: none 634 */ 635 void lim_sae_auth_cleanup_retry(struct mac_context *mac_ctx, 636 uint8_t vdev_id); 637 638 /** 639 * lim_fill_sme_assoc_ind_params() - Initialize association indication 640 * @mac_ctx: Pointer to Global MAC structure 641 * @assoc_ind: PE association indication structure 642 * @sme_assoc_ind: SME association indication 643 * @session_entry: PE session entry 644 * @assoc_req_alloc: malloc memory for assoc_req or not 645 * 646 * Return: None 647 */ 648 void 649 lim_fill_sme_assoc_ind_params( 650 struct mac_context *mac_ctx, 651 tpLimMlmAssocInd assoc_ind, struct assoc_ind *sme_assoc_ind, 652 struct pe_session *session_entry, bool assoc_req_alloc); 653 654 /** 655 * lim_send_mlm_assoc_ind() - Sends assoc indication to SME 656 * @mac_ctx: Global Mac context 657 * @sta_ds: Station DPH hash entry 658 * @session_entry: PE session entry 659 * 660 * This function sends either LIM_MLM_ASSOC_IND 661 * or LIM_MLM_REASSOC_IND to SME. 662 * 663 * Return: QDF_STATUS 664 */ 665 QDF_STATUS lim_send_mlm_assoc_ind(struct mac_context *mac, 666 tpDphHashNode sta, 667 struct pe_session *pe_session); 668 669 /** 670 * lim_process_assoc_rsp_frame() - Processes assoc response 671 * @mac_ctx: Pointer to Global MAC structure 672 * @rx_packet_info: A pointer to Rx packet info structure 673 * @reassoc_frame_length: Valid frame length if its a reassoc response frame 674 * else 0 675 * @sub_type: Indicates whether it is Association Response (=0) or 676 * Reassociation Response (=1) frame 677 * 678 * This function is called by lim_handle80211_frames() or 679 * pe_roam_synch_callback() upon Re/Association Response frame reception or 680 * roam synch indication with reassociation response frame is received. 681 * 682 * Return: None 683 */ 684 void lim_process_assoc_rsp_frame(struct mac_context *mac, uint8_t *rx_pkt_info, 685 uint32_t reassoc_frame_len, uint8_t subtype, 686 struct pe_session *pe_session); 687 688 void lim_process_disassoc_frame(struct mac_context *, uint8_t *, struct pe_session *); 689 690 /** 691 * lim_get_nss_supported_by_ap() - finds out nss from AP's beacons 692 * @vht_caps: VHT capabilities 693 * @ht_caps: HT capabilities 694 * 695 * Return: nss advertised by AP in beacon 696 */ 697 uint8_t lim_get_nss_supported_by_ap(tDot11fIEVHTCaps *vht_caps, 698 tDot11fIEHTCaps *ht_caps, 699 tDot11fIEhe_cap *he_caps); 700 /* 701 * lim_perform_disassoc() - Actual action taken after receiving disassoc 702 * @mac_ctx: Global MAC context 703 * @frame_rssi: RSSI of the frame 704 * @rc: Reason code of the deauth 705 * @pe_session: PE session entry pointer 706 * @addr: BSSID from which the disassoc is received 707 * 708 * Return: None 709 */ 710 void lim_perform_disassoc(struct mac_context *mac_ctx, int32_t frame_rssi, 711 uint16_t rc, struct pe_session *pe_session, 712 tSirMacAddr addr); 713 /* 714 * lim_disassoc_tdls_peers() - Disassoc action for tdls peers 715 * @mac_ctx: Global MAC context 716 * @pe_session: PE session entry pointer 717 * @addr: BSSID from which the disassoc is received 718 * 719 * Return: None 720 */ 721 #ifdef FEATURE_WLAN_TDLS 722 void lim_disassoc_tdls_peers(struct mac_context *mac_ctx, 723 struct pe_session *pe_session, tSirMacAddr addr); 724 #else 725 static inline void lim_disassoc_tdls_peers(struct mac_context *mac_ctx, 726 struct pe_session *pe_session, tSirMacAddr addr) 727 { 728 } 729 #endif 730 void lim_process_deauth_frame(struct mac_context *, uint8_t *, struct pe_session *); 731 /* 732 * lim_perform_deauth() - Actual action taken after receiving deauth 733 * @mac_ctx: Global MAC context 734 * @pe_session: PE session entry pointer 735 * @rc: Reason code of the deauth 736 * @addr: BSSID from which the deauth is received 737 * @frame_rssi: RSSI of the frame 738 * 739 * Return: None 740 */ 741 void lim_perform_deauth(struct mac_context *mac_ctx, struct pe_session *pe_session, 742 uint16_t rc, tSirMacAddr addr, int32_t frame_rssi); 743 void lim_process_action_frame(struct mac_context *, uint8_t *, struct pe_session *); 744 void lim_process_action_frame_no_session(struct mac_context *mac, uint8_t *pRxMetaInfo); 745 746 void lim_populate_mac_header(struct mac_context *, uint8_t *, uint8_t, uint8_t, 747 tSirMacAddr, tSirMacAddr); 748 QDF_STATUS lim_send_probe_req_mgmt_frame(struct mac_context *, tSirMacSSid *, 749 tSirMacAddr, qdf_freq_t, tSirMacAddr, 750 uint32_t, uint16_t *, uint8_t *); 751 752 /** 753 * lim_send_probe_rsp_mgmt_frame() - Send probe response 754 * @mac_ctx: Handle for mac context 755 * @peer_macaddr: Mac address of requesting peer 756 * @ssid: SSID for response 757 * @pe_session: PE session id 758 * @preq_p2pie: P2P IE in incoming probe request 759 * 760 * Builds and sends probe response frame to the requesting peer 761 * 762 * Return: void 763 */ 764 void 765 lim_send_probe_rsp_mgmt_frame(struct mac_context *mac_ctx, 766 tSirMacAddr peer_macaddr, 767 tpAniSSID ssid, 768 struct pe_session *pe_session, 769 uint8_t preq_p2pie); 770 771 void lim_send_auth_mgmt_frame(struct mac_context *, tSirMacAuthFrameBody *, tSirMacAddr, 772 uint8_t, struct pe_session *); 773 void lim_send_assoc_req_mgmt_frame(struct mac_context *, tLimMlmAssocReq *, struct pe_session *); 774 #ifdef WLAN_FEATURE_HOST_ROAM 775 void lim_send_reassoc_req_with_ft_ies_mgmt_frame(struct mac_context *mac, 776 tLimMlmReassocReq *pMlmReassocReq, struct pe_session *pe_session); 777 void lim_send_reassoc_req_mgmt_frame(struct mac_context *, tLimMlmReassocReq *, 778 struct pe_session *); 779 /** 780 * lim_process_rx_scan_handler() - 781 * process the event for scan which is issued by LIM 782 * @vdev: wlan objmgr vdev pointer 783 * @event: scan event 784 * @arg: global mac context pointer 785 * 786 * Return: void 787 */ 788 void lim_process_rx_scan_handler(struct wlan_objmgr_vdev *vdev, 789 struct scan_event *event, void *arg); 790 #else 791 static inline void lim_send_reassoc_req_with_ft_ies_mgmt_frame( 792 struct mac_context *mac, tLimMlmReassocReq *pMlmReassocReq, 793 struct pe_session *pe_session) 794 {} 795 static inline void lim_send_reassoc_req_mgmt_frame(struct mac_context *mac_ctx, 796 tLimMlmReassocReq *reassoc_req, struct pe_session *pe_session) 797 {} 798 static inline void lim_process_rx_scan_handler(struct wlan_objmgr_vdev *vdev, 799 struct scan_event *event, void *arg) 800 {} 801 #endif 802 #ifdef WLAN_FEATURE_11AX_BSS_COLOR 803 /** 804 * lim_process_set_he_bss_color() - process the set he bss color request 805 * 806 * @mac_ctx: global mac context pointer 807 * @msg_buf: message buffer pointer 808 * 809 * Return: void 810 */ 811 void lim_process_set_he_bss_color(struct mac_context *mac_ctx, uint32_t *msg_buf); 812 813 /** 814 * lim_reconfig_obss_scan_param() - reconfig the obss scan params 815 * 816 * @mac_ctx: global mac context pointer 817 * @msg_buf: message buffer pointer 818 * 819 * Return: void 820 */ 821 void lim_reconfig_obss_scan_param(struct mac_context *mac_ctx, 822 uint32_t *msg_buf); 823 824 /** 825 * lim_process_obss_color_collision_info() - Process the obss color collision 826 * request. 827 * @mac_ctx: global mac context pointer 828 * @msg_buf: message buffer pointer 829 * 830 * Return: void 831 */ 832 void lim_process_obss_color_collision_info(struct mac_context *mac_ctx, 833 uint32_t *msg_buf); 834 835 /** 836 * lim_send_obss_color_collision_cfg() - Send obss color collision cfg. 837 * @mac_ctx: global mac context pointer 838 * @session: Pointer to session 839 * @event_type: obss color collision detection type 840 * 841 * Return: void 842 */ 843 void lim_send_obss_color_collision_cfg(struct mac_context *mac_ctx, 844 struct pe_session *session, 845 enum wmi_obss_color_collision_evt_type 846 event_type); 847 #else 848 static inline void lim_process_set_he_bss_color(struct mac_context *mac_ctx, 849 uint32_t *msg_buf) 850 {} 851 852 static inline void lim_reconfig_obss_scan_param(struct mac_context *mac_ctx, 853 uint32_t *msg_buf) 854 { 855 } 856 static inline void lim_process_obss_color_collision_info(struct mac_context *mac_ctx, 857 uint32_t *msg_buf) 858 {} 859 static inline void lim_send_obss_color_collision_cfg(struct mac_context *mac_ctx, 860 struct pe_session *session, 861 enum wmi_obss_color_collision_evt_type event_type) 862 {} 863 #endif 864 void lim_send_delts_req_action_frame(struct mac_context *mac, tSirMacAddr peer, 865 uint8_t wmmTspecPresent, 866 struct mac_ts_info * pTsinfo, 867 struct mac_tspec_ie * pTspecIe, 868 struct pe_session *pe_session); 869 void lim_send_addts_req_action_frame(struct mac_context *mac, tSirMacAddr peerMacAddr, 870 tSirAddtsReqInfo *addts, struct pe_session *); 871 872 #ifdef WLAN_FEATURE_MSCS 873 /** 874 * lim_send_mscs_req_action_frame() - Send mscs req 875 * @mac_ctx: Handle for mac context 876 * @peer_mac: Mac address of requesting peer 877 * @mscs_req: mscs request buffer 878 * @pe_session: PE session id. 879 * 880 * Builds and sends mscs action frame to the peer. 881 * 882 * Return: void 883 */ 884 void lim_send_mscs_req_action_frame(struct mac_context *mac, 885 struct qdf_mac_addr peer_mac, 886 struct mscs_req_info *mscs_req, 887 struct pe_session *pe_session); 888 #endif 889 890 /** 891 * lim_send_assoc_rsp_mgmt_frame() - Send assoc response 892 * @mac_ctx: Handle for mac context 893 * @status_code: Status code for assoc response frame 894 * @aid: Association ID 895 * @peer_addr: Mac address of requesting peer 896 * @subtype: Assoc/Reassoc 897 * @sta: Pointer to station node 898 * @pe_session: PE session id. 899 * @tx_complete: Need tx complete callback or not 900 * 901 * Builds and sends association response frame to the requesting peer. 902 * 903 * Return: void 904 */ 905 void 906 lim_send_assoc_rsp_mgmt_frame( 907 struct mac_context *mac_ctx, 908 uint16_t status_code, uint16_t aid, tSirMacAddr peer_addr, 909 uint8_t subtype, tpDphHashNode sta, struct pe_session *pe_session, 910 bool tx_complete); 911 912 void lim_send_disassoc_mgmt_frame(struct mac_context *, uint16_t, tSirMacAddr, 913 struct pe_session *, bool waitForAck); 914 void lim_send_deauth_mgmt_frame(struct mac_context *, uint16_t, tSirMacAddr, struct pe_session *, 915 bool waitForAck); 916 917 /** 918 * lim_process_mlm_update_hidden_ssid_rsp() - process hidden ssid response 919 * @mac_ctx: global mac context 920 * @vdev_id: vdev id 921 * 922 * Return: None 923 */ 924 void lim_process_mlm_update_hidden_ssid_rsp(struct mac_context *mac_ctx, 925 uint8_t vdev_id); 926 927 tSirResultCodes lim_mlm_add_bss(struct mac_context *, tLimMlmStartReq *, 928 struct pe_session *pe_session); 929 930 QDF_STATUS lim_send_channel_switch_mgmt_frame(struct mac_context *, tSirMacAddr, 931 uint8_t, uint8_t, uint8_t, 932 struct pe_session *); 933 934 QDF_STATUS lim_send_extended_chan_switch_action_frame(struct mac_context *mac_ctx, 935 tSirMacAddr peer, uint8_t mode, uint8_t new_op_class, 936 uint8_t new_channel, uint8_t count, struct pe_session *session_entry); 937 QDF_STATUS lim_p2p_oper_chan_change_confirm_action_frame( 938 struct mac_context *mac_ctx, tSirMacAddr peer, 939 struct pe_session *session_entry); 940 941 QDF_STATUS lim_send_neighbor_report_request_frame(struct mac_context *, 942 tpSirMacNeighborReportReq, 943 tSirMacAddr, struct pe_session *); 944 945 /** 946 * lim_send_link_report_action_frame() - Send link measurement report action 947 * frame in response for a link measurement request received. 948 * @mac: Pointer to Mac context 949 * @link_report: Pointer to the sSirMacLinkReport struct 950 * @peer: BSSID of the peer 951 * @pe_session: Pointer to the pe_session 952 * 953 * Return: QDF_STATUS 954 * 955 */ 956 QDF_STATUS 957 lim_send_link_report_action_frame(struct mac_context *mac, 958 tpSirMacLinkReport link_report, 959 tSirMacAddr peer, 960 struct pe_session *pe_session); 961 962 /** 963 * lim_send_radio_measure_report_action_frame - Send RRM report action frame 964 * @mac: pointer to global MAC context 965 * @dialog_token: Dialog token to be used in the action frame 966 * @num_report: number of reports in pRRMReport 967 * @is_last_frame: is the current report last or more reports to follow 968 * @pRRMReport: Pointer to the RRM report structure 969 * @peer: MAC address of the peer 970 * @pe_session: Pointer to the PE session entry 971 * 972 * Return: Ret Status 973 */ 974 QDF_STATUS 975 lim_send_radio_measure_report_action_frame(struct mac_context *mac, 976 uint8_t dialog_token, 977 uint8_t num_report, 978 bool is_last_frame, 979 tpSirMacRadioMeasureReport pRRMReport, 980 tSirMacAddr peer, 981 struct pe_session *pe_session); 982 983 #ifdef FEATURE_WLAN_TDLS 984 void lim_init_tdls_data(struct mac_context *, struct pe_session *); 985 986 /** 987 * lim_process_sme_tdls_mgmt_send_req() - send out tdls management frames 988 * @mac_ctx: global mac context 989 * @msg: message buffer received from SME. 990 * 991 * Process Send Mgmt Request from SME and transmit to AP. 992 * 993 * Return: QDF_STATUS_SUCCESS on success, error code otherwise 994 */ 995 QDF_STATUS lim_process_sme_tdls_mgmt_send_req(struct mac_context *mac_ctx, 996 void *msg); 997 998 /** 999 * lim_process_sme_tdls_add_sta_req() - process TDLS Add STA 1000 * @mac_ctx: global mac context 1001 * @msg: message buffer received from SME. 1002 * 1003 * Process TDLS Add Station request 1004 * 1005 * Return: QDF_STATUS_SUCCESS on success, error code otherwise 1006 */ 1007 QDF_STATUS lim_process_sme_tdls_add_sta_req(struct mac_context *mac, 1008 void *msg); 1009 1010 /** 1011 * lim_process_sme_tdls_del_sta_req() - process TDLS Del STA 1012 * @mac_ctx: global mac context 1013 * @msg: message buffer received from SME. 1014 * 1015 * Process TDLS Delete Station request 1016 * 1017 * Return: QDF_STATUS_SUCCESS on success, error code otherwise 1018 */ 1019 QDF_STATUS lim_process_sme_tdls_del_sta_req(struct mac_context *mac, 1020 void *msg); 1021 1022 void lim_send_sme_mgmt_tx_completion(struct mac_context *mac, uint32_t vdev_id, 1023 uint32_t txCompleteStatus); 1024 QDF_STATUS lim_delete_tdls_peers(struct mac_context *mac_ctx, 1025 struct pe_session *session_entry); 1026 QDF_STATUS lim_process_tdls_add_sta_rsp(struct mac_context *mac, void *msg, struct pe_session *); 1027 void lim_process_tdls_del_sta_rsp(struct mac_context *mac_ctx, 1028 struct scheduler_msg *lim_msg, 1029 struct pe_session *session_entry); 1030 1031 /** 1032 * lim_update_tdls_state_in_fw() - Update TDLS state in FW 1033 * 1034 * @session_entry - PE sessions 1035 * @value -value to be updated 1036 * 1037 * 1038 * Return: void 1039 */ 1040 void lim_update_tdls_set_state_for_fw(struct pe_session *session_entry, 1041 bool value); 1042 1043 /** 1044 * lim_update_tdls_2g_bw() - Update TDLS peer bw to fw 1045 * 1046 * @session_entry - PE sessions 1047 * 1048 * Return: void 1049 */ 1050 void lim_update_tdls_2g_bw(struct pe_session *session); 1051 1052 #else 1053 static inline QDF_STATUS lim_delete_tdls_peers(struct mac_context *mac_ctx, 1054 struct pe_session *session_entry) 1055 { 1056 return QDF_STATUS_SUCCESS; 1057 } 1058 static inline void lim_init_tdls_data(struct mac_context *mac, 1059 struct pe_session *pe_session) 1060 { 1061 1062 } 1063 1064 static inline void lim_update_tdls_set_state_for_fw(struct pe_session 1065 *session_entry, bool value) 1066 { 1067 } 1068 1069 static inline void lim_update_tdls_2g_bw(struct pe_session *session) 1070 { 1071 } 1072 #endif 1073 1074 /* Algorithms & Link Monitoring related functions */ 1075 /* / Function that handles heartbeat failure */ 1076 void lim_handle_heart_beat_failure(struct mac_context *, struct pe_session *); 1077 1078 /** 1079 * lim_tear_down_link_with_ap() - Tear down link with AP 1080 * @mac: mac context 1081 * @session_id: PE session id 1082 * @reason_code: Disconnect reason code as per emun wlan_reason_code 1083 * @trigger: Disconnect trigger as per enum eLimDisassocTrigger 1084 * 1085 * Function that triggers link tear down with AP upon HB failure 1086 * 1087 * Return: None 1088 */ 1089 void lim_tear_down_link_with_ap(struct mac_context *mac, 1090 uint8_t session_id, 1091 enum wlan_reason_code reason_code, 1092 enum eLimDisassocTrigger trigger); 1093 1094 /* / Function that defers the messages received */ 1095 uint32_t lim_defer_msg(struct mac_context *, struct scheduler_msg *); 1096 1097 #ifdef ANI_SUPPORT_11H 1098 /* / Function that sends Measurement Report action frame */ 1099 QDF_STATUS lim_send_meas_report_frame(struct mac_context *, tpSirMacMeasReqActionFrame, 1100 tSirMacAddr, struct pe_session *pe_session); 1101 1102 /* / Function that sends TPC Report action frame */ 1103 QDF_STATUS lim_send_tpc_report_frame(struct mac_context *, tpSirMacTpcReqActionFrame, 1104 tSirMacAddr, struct pe_session *pe_session); 1105 #endif 1106 1107 /** 1108 * lim_handle_add_bss_rsp() - Handle add bss response 1109 * @mac_ctx: mac context 1110 * @add_bss_rsp: add bss rsp 1111 * 1112 * This function is called to handle all types of add bss rsp 1113 * It will free memory of add_bss_rsp in the end after rsp is handled. 1114 * 1115 * Return: None 1116 */ 1117 void lim_handle_add_bss_rsp(struct mac_context *mac_ctx, 1118 struct add_bss_rsp *add_bss_rsp); 1119 1120 void lim_process_mlm_add_sta_rsp(struct mac_context *mac, 1121 struct scheduler_msg *limMsgQt, 1122 struct pe_session *pe_session); 1123 void lim_process_mlm_del_sta_rsp(struct mac_context *mac, 1124 struct scheduler_msg *limMsgQ); 1125 1126 QDF_STATUS 1127 lim_process_mlm_del_all_sta_rsp(struct vdev_mlme_obj *vdev_mlme, 1128 struct peer_delete_all_response *rsp); 1129 /** 1130 * lim_process_mlm_del_bss_rsp () - API to process delete bss response 1131 * @mac: Pointer to Global MAC structure 1132 * @vdev_stop_rsp: pointer to vdev stop response 1133 * @pe_session: pointer to pe_session 1134 * 1135 * Return: None 1136 */ 1137 void lim_process_mlm_del_bss_rsp(struct mac_context *mac, 1138 struct del_bss_resp *vdev_stop_rsp, 1139 struct pe_session *pe_session); 1140 1141 void lim_process_sta_mlm_add_sta_rsp(struct mac_context *mac, 1142 struct scheduler_msg *limMsgQ, 1143 struct pe_session *pe_session); 1144 void lim_process_sta_mlm_del_sta_rsp(struct mac_context *mac, 1145 struct scheduler_msg *limMsgQ, 1146 struct pe_session *pe_session); 1147 1148 /** 1149 * lim_process_sta_mlm_del_bss_rsp() - handle del bss response of STA 1150 * @mac: Pointer to Global MAC structure 1151 * @vdev_stop_rsp: pointer to vdev stop response 1152 * @pe_session: pointer to pe_session 1153 * 1154 * Return: none 1155 */ 1156 void lim_process_sta_mlm_del_bss_rsp(struct mac_context *mac, 1157 struct del_bss_resp *vdev_stop_rsp, 1158 struct pe_session *pe_session); 1159 1160 void lim_process_mlm_set_sta_key_rsp(struct mac_context *mac, 1161 struct scheduler_msg *limMsgQ); 1162 void lim_process_mlm_set_bss_key_rsp(struct mac_context *mac, 1163 struct scheduler_msg *limMsgQ); 1164 1165 /* Function to process WMA_SWITCH_CHANNEL_RSP message */ 1166 void lim_process_switch_channel_rsp(struct mac_context *mac, 1167 struct vdev_start_response *rsp); 1168 1169 /** 1170 * lim_sta_handle_connect_fail() - handle connect failure of STA 1171 * @param - join params 1172 * 1173 * Return: QDF_STATUS 1174 */ 1175 QDF_STATUS lim_sta_handle_connect_fail(join_params *param); 1176 1177 /** 1178 * lim_join_result_callback() - Callback to handle join rsp 1179 * @mac: Pointer to Global MAC structure 1180 * @vdev_id: vdev id 1181 * 1182 * This callback function is used to delete PE session 1183 * entry and send join response to sme. 1184 * 1185 * Return: None 1186 */ 1187 void lim_join_result_callback(struct mac_context *mac, 1188 uint8_t vdev_id); 1189 1190 /** 1191 * lim_update_lost_link_rssi() - API to update lost link rssi in lim session 1192 * @mac: Pointer to Global MAC structure 1193 * @rssi: rssi at disconnect time 1194 * 1195 * Return: None 1196 */ 1197 void lim_update_lost_link_rssi(struct mac_context *mac, uint32_t rssi); 1198 1199 #ifdef WLAN_FEATURE_HOST_ROAM 1200 QDF_STATUS lim_sta_reassoc_error_handler(struct reassoc_params *param); 1201 #else 1202 static inline 1203 QDF_STATUS lim_sta_reassoc_error_handler(struct reassoc_params *param) 1204 { 1205 return QDF_STATUS_E_NOSUPPORT; 1206 } 1207 #endif 1208 1209 /* 11w send SA query request action frame */ 1210 QDF_STATUS lim_send_sa_query_request_frame(struct mac_context *mac, uint8_t *transId, 1211 tSirMacAddr peer, 1212 struct pe_session *pe_session); 1213 /* 11w SA query request action frame handler */ 1214 QDF_STATUS lim_send_sa_query_response_frame(struct mac_context *mac, 1215 uint8_t *transId, tSirMacAddr peer, 1216 struct pe_session *pe_session); 1217 /* Inline functions */ 1218 1219 /** 1220 * lim_post_sme_message() 1221 * 1222 ***FUNCTION: 1223 * This function is called by limProcessMlmMessages(). In this 1224 * function MLM sub-module invokes MLM ind/cnf primitives. 1225 * 1226 ***LOGIC: 1227 * Initially MLM makes an SME function call to invoke MLM ind/cnf 1228 * primitive. In future this can be enhanced to 'post' messages to SME. 1229 * 1230 ***ASSUMPTIONS: 1231 * NA 1232 * 1233 ***NOTE: 1234 * NA 1235 * 1236 * @param mac Pointer to Global MAC structure 1237 * @param msgType Indicates the MLM primitive message type 1238 * @param *msg_buf A pointer to the MLM message buffer 1239 * 1240 * @return None 1241 */ 1242 static inline void 1243 lim_post_sme_message(struct mac_context *mac, uint32_t msgType, 1244 uint32_t *msg_buf) 1245 { 1246 struct scheduler_msg msg = {0}; 1247 1248 if (!msg_buf) { 1249 pe_err("Buffer is Pointing to NULL"); 1250 return; 1251 } 1252 1253 msg.type = (uint16_t) msgType; 1254 msg.bodyptr = msg_buf; 1255 msg.bodyval = 0; 1256 if (msgType > eWNI_SME_MSG_TYPES_BEGIN) { 1257 MTRACE(mac_trace(mac, TRACE_CODE_TX_SME_MSG, NO_SESSION, 1258 msg.type)); 1259 lim_process_sme_req_messages(mac, &msg); 1260 } else { 1261 lim_process_mlm_rsp_messages(mac, msgType, msg_buf); 1262 } 1263 } /*** end lim_post_sme_message() ***/ 1264 1265 /** 1266 * lim_post_mlm_message() 1267 * 1268 ***FUNCTION: 1269 * This function is called by limProcessSmeMessages(). In this 1270 * function SME invokes MLME primitives. 1271 * 1272 ***PARAMS: 1273 * 1274 ***LOGIC: 1275 * Initially SME makes an MLM function call to invoke MLM primitive. 1276 * In future this can be enhanced to 'post' messages to MLM. 1277 * 1278 ***ASSUMPTIONS: 1279 * NA 1280 * 1281 ***NOTE: 1282 * NA 1283 * 1284 * @param mac Pointer to Global MAC structure 1285 * @param msgType Indicates the MLM primitive message type 1286 * @param *msg_buf A pointer to the MLM message buffer 1287 * 1288 * @return None 1289 */ 1290 static inline void 1291 lim_post_mlm_message(struct mac_context *mac, uint32_t msgType, 1292 uint32_t *msg_buf) 1293 { 1294 struct scheduler_msg msg = {0}; 1295 1296 if (!msg_buf) { 1297 pe_err("Buffer is Pointing to NULL"); 1298 return; 1299 } 1300 msg.type = (uint16_t) msgType; 1301 msg.bodyptr = msg_buf; 1302 msg.bodyval = 0; 1303 MTRACE(mac_trace_msg_rx(mac, NO_SESSION, msg.type)); 1304 lim_process_mlm_req_messages(mac, &msg); 1305 } /*** end lim_post_mlm_message() ***/ 1306 1307 /** 1308 * lim_get_ielen_from_bss_description() 1309 * 1310 ***FUNCTION: 1311 * This function is called in various places to get IE length 1312 * from struct bss_description structure 1313 * number being scanned. 1314 * 1315 ***PARAMS: 1316 * 1317 ***LOGIC: 1318 * 1319 ***ASSUMPTIONS: 1320 * NA 1321 * 1322 ***NOTE: 1323 * NA 1324 * 1325 * @param pBssDescr 1326 * @return Total IE length 1327 */ 1328 1329 static inline uint16_t 1330 lim_get_ielen_from_bss_description(struct bss_description *pBssDescr) 1331 { 1332 return wlan_get_ielen_from_bss_description(pBssDescr); 1333 } /*** end lim_get_ielen_from_bss_description() ***/ 1334 1335 /** 1336 * lim_send_beacon_ind() - send the beacon indication 1337 * @mac_ctx: pointer to mac structure 1338 * @session: pe session 1339 * @reason: beacon update reason 1340 * 1341 * return: success: QDF_STATUS_SUCCESS failure: QDF_STATUS_E_FAILURE 1342 */ 1343 QDF_STATUS lim_send_beacon_ind(struct mac_context *mac_ctx, struct pe_session *session, 1344 enum sir_bcn_update_reason reason); 1345 1346 void 1347 lim_send_vdev_restart(struct mac_context *mac, struct pe_session *pe_session, 1348 uint8_t sessionId); 1349 1350 void lim_wpspbc_close(struct mac_context *mac, struct pe_session *pe_session); 1351 1352 #define LIM_WPS_OVERLAP_TIMER_MS 10000 1353 1354 void lim_process_disassoc_ack_timeout(struct mac_context *mac); 1355 void lim_process_deauth_ack_timeout(struct mac_context *mac); 1356 QDF_STATUS lim_send_disassoc_cnf(struct mac_context *mac); 1357 QDF_STATUS lim_send_deauth_cnf(struct mac_context *mac); 1358 1359 /** 1360 * lim_disassoc_tx_complete_cnf() - callback to indicate Tx completion 1361 * @context: pointer to mac structure 1362 * @txCompleteSuccess: indicates tx success/failure 1363 * @params: tx completion params 1364 * 1365 * function will be invoked on receiving tx completion indication 1366 * 1367 * return: success: QDF_STATUS_SUCCESS failure: QDF_STATUS_E_FAILURE 1368 */ 1369 QDF_STATUS lim_disassoc_tx_complete_cnf(void *context, 1370 uint32_t txCompleteSuccess, 1371 void *params); 1372 1373 /** 1374 * lim_deauth_tx_complete_cnf() - callback to indicate Tx completion 1375 * @context: pointer to mac structure 1376 * @txCompleteSuccess: indicates tx success/failure 1377 * @params: tx completion params 1378 * 1379 * function will be invoked on receiving tx completion indication 1380 * 1381 * return: success: QDF_STATUS_SUCCESS failure: QDF_STATUS_E_FAILURE 1382 */ 1383 QDF_STATUS lim_deauth_tx_complete_cnf(void *context, 1384 uint32_t txCompleteSuccess, 1385 void *params); 1386 1387 /** 1388 * lim_cm_send_disconnect_rsp() - To send disconnect rsp to CM 1389 * @ctx: pointer to mac structure 1390 * @vdev_id: vdev id 1391 * 1392 * return: None 1393 */ 1394 void lim_cm_send_disconnect_rsp(struct mac_context *mac_ctx, uint8_t vdev_id); 1395 1396 void lim_send_sme_disassoc_deauth_ntf(struct mac_context *mac_ctx, 1397 QDF_STATUS status, uint32_t *ctx); 1398 1399 #ifdef FEATURE_WLAN_TDLS 1400 QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac, 1401 uint32_t *msg_buf); 1402 #else 1403 static inline 1404 QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac, 1405 uint32_t *msg_buf) 1406 { 1407 return QDF_STATUS_SUCCESS; 1408 } 1409 #endif 1410 1411 /** 1412 * lim_send_bcn_rsp() - handle beacon send response 1413 * @mac_ctx Pointer to Global MAC structure 1414 * @rsp: beacon send response 1415 * 1416 * Return: None 1417 */ 1418 void lim_send_bcn_rsp(struct mac_context *mac_ctx, tpSendbeaconParams rsp); 1419 1420 /* / Bit value data structure */ 1421 typedef enum sHalBitVal /* For Bit operations */ 1422 { 1423 eHAL_CLEAR, 1424 eHAL_SET 1425 } tHalBitVal; 1426 1427 /** 1428 * lim_send_addba_response_frame(): Send ADDBA response action frame to peer 1429 * @mac_ctx: mac context 1430 * @peer_mac: Peer MAC address 1431 * @tid: TID for which addba response is being sent 1432 * @session: PE session entry 1433 * @addba_extn_present: ADDBA extension present flag 1434 * @amsdu_support: amsdu in ampdu support 1435 * @is_wep: protected bit in fc 1436 * @calc_buff_size: Calculated buf size from peer and self capabilities 1437 * 1438 * This function is called when ADDBA request is successful. ADDBA response is 1439 * setup by calling addba_response_setup API and frame is then sent out OTA. 1440 * 1441 * Return: QDF_STATUS 1442 */ 1443 QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx, 1444 tSirMacAddr peer_mac, uint16_t tid, 1445 struct pe_session *session, 1446 uint8_t addba_extn_present, 1447 uint8_t amsdu_support, uint8_t is_wep, 1448 uint16_t calc_buff_size); 1449 1450 /** 1451 * lim_send_delba_action_frame() - Send delba to peer 1452 * @mac_ctx: mac context 1453 * @vdev_id: vdev id 1454 * @peer_macaddr: Peer mac addr 1455 * @tid: Tid number 1456 * @reason_code: reason code 1457 * 1458 * Return: 0 for success, non-zero for failure 1459 */ 1460 QDF_STATUS lim_send_delba_action_frame(struct mac_context *mac_ctx, 1461 uint8_t vdev_id, 1462 uint8_t *peer_macaddr, uint8_t tid, 1463 uint8_t reason_code); 1464 1465 #ifdef WLAN_FEATURE_11BE_MLO 1466 /** 1467 * lim_send_t2lm_action_req_frame() - Send T2LM negotiation request to peer 1468 * @vdev: vdev pointer 1469 * @peer_mac: Peer mac addr 1470 * @args: Pointer to action frame args 1471 * @ongoing_t2lm_neg: T2LM negotiation request 1472 * @token: Dialog token 1473 * 1474 * Return: 0 for success, non-zero for failure 1475 */ 1476 QDF_STATUS 1477 lim_send_t2lm_action_req_frame(struct wlan_objmgr_vdev *vdev, 1478 uint8_t *peer_mac, 1479 struct wlan_action_frame_args *args, 1480 struct wlan_t2lm_onging_negotiation_info *t2lm_neg, 1481 uint8_t token); 1482 1483 /** 1484 * lim_send_t2lm_action_rsp_frame() - Send T2LM negotiation response to peer 1485 * @mac_ctx: mac context 1486 * @peer_mac: Peer mac addr 1487 * @session: PE session entry 1488 * @token: Dialog token 1489 * @status_code: T2LM negotiation response status code 1490 * 1491 * Return: 0 for success, non-zero for failure 1492 */ 1493 QDF_STATUS 1494 lim_send_t2lm_action_rsp_frame(struct mac_context *mac_ctx, 1495 tSirMacAddr peer_mac, 1496 struct pe_session *session, 1497 uint8_t token, 1498 enum wlan_t2lm_resp_frm_type status_code); 1499 1500 /** 1501 * lim_send_epcs_update_edca_params() - Wrapper for EPCS update edca 1502 * @vdev: vdev object 1503 * @edca: the pointer of edca parameters 1504 * @mu_edca: the flag of mu edca 1505 * 1506 * Return: 0 for success, non-zero for failure 1507 */ 1508 QDF_STATUS 1509 lim_send_epcs_update_edca_params(struct wlan_objmgr_vdev *vdev, 1510 tSirMacEdcaParamRecord *edca, bool mu_edca); 1511 1512 /** 1513 * lim_send_epcs_restore_edca_params() - Restore edca parameters 1514 * @vdev: vdev object 1515 * 1516 * Return: 0 for success, non-zero for failure 1517 */ 1518 QDF_STATUS 1519 lim_send_epcs_restore_edca_params(struct wlan_objmgr_vdev *vdev); 1520 1521 /** 1522 * lim_send_epcs_action_rsp_frame() - Send EPCS action response frame 1523 * @vdev: vdev object 1524 * @peer_mac: peer mac address pointer 1525 * @args: the pointer of action frame args 1526 * 1527 * Return: 0 for success, non-zero for failure 1528 */ 1529 QDF_STATUS 1530 lim_send_epcs_action_rsp_frame(struct wlan_objmgr_vdev *vdev, 1531 uint8_t *peer_mac, 1532 struct wlan_action_frame_args *args); 1533 1534 /** 1535 * lim_send_epcs_action_req_frame() - Send EPCS action request frame 1536 * @vdev: vdev object 1537 * @peer_mac: peer mac address pointer 1538 * @args: the pointer of action frame args 1539 * 1540 * Return: 0 for success, non-zero for failure 1541 */ 1542 QDF_STATUS 1543 lim_send_epcs_action_req_frame(struct wlan_objmgr_vdev *vdev, 1544 uint8_t *peer_mac, 1545 struct wlan_action_frame_args *args); 1546 1547 /** 1548 * lim_send_epcs_action_teardown_frame() - Send EPCS action teardown frame 1549 * @vdev: vdev object 1550 * @peer_mac: peer mac address pointer 1551 * @args: the pointer of action frame args 1552 * 1553 * Return: 0 for success, non-zero for failure 1554 */ 1555 QDF_STATUS 1556 lim_send_epcs_action_teardown_frame(struct wlan_objmgr_vdev *vdev, 1557 uint8_t *peer_mac, 1558 struct wlan_action_frame_args *args); 1559 #else 1560 static inline QDF_STATUS 1561 lim_send_t2lm_action_rsp_frame(struct mac_context *mac_ctx, 1562 tSirMacAddr peer_mac, 1563 struct pe_session *session, uint8_t token, 1564 enum wlan_t2lm_resp_frm_type status_code) 1565 { 1566 return QDF_STATUS_SUCCESS; 1567 } 1568 1569 static inline QDF_STATUS 1570 lim_send_t2lm_action_req_frame(struct wlan_objmgr_vdev *vdev, 1571 uint8_t *peer_mac, 1572 struct wlan_action_frame_args *args, 1573 struct wlan_t2lm_onging_negotiation_info *t2lm_neg, 1574 uint8_t token) 1575 { 1576 return QDF_STATUS_SUCCESS; 1577 } 1578 #endif 1579 1580 /** 1581 * lim_process_join_failure_timeout() - This function is called to process 1582 * JoinFailureTimeout 1583 * 1584 * @mac_ctx: Pointer to Global MAC structure 1585 * 1586 * This function is called to process JoinFailureTimeout 1587 * 1588 * @Return None 1589 */ 1590 void lim_process_join_failure_timeout(struct mac_context *mac_ctx); 1591 1592 /** 1593 * lim_process_auth_failure_timeout() - This function is called to process Min 1594 * Channel Timeout during channel scan. 1595 * 1596 * @mac_ctx: Pointer to Global MAC structure 1597 * 1598 * This function is called to process Min Channel Timeout during channel scan. 1599 * 1600 * @Return: None 1601 */ 1602 void lim_process_auth_failure_timeout(struct mac_context *mac_ctx); 1603 1604 /** 1605 * lim_process_assoc_failure_timeout() - This function is called to process Min 1606 * Channel Timeout during channel scan. 1607 * 1608 * @mac_ctx: Pointer to Global MAC structure 1609 * @msg_type: Assoc or reassoc 1610 * 1611 * This function is called to process Min Channel Timeout during channel scan. 1612 * 1613 * @Return: None 1614 */ 1615 void lim_process_assoc_failure_timeout(struct mac_context *mac_ctx, 1616 uint32_t msg_type); 1617 1618 /** 1619 * lim_process_sae_auth_timeout() - This function is called to process sae 1620 * auth timeout 1621 * @mac_ctx: Pointer to Global MAC structure 1622 * 1623 * @Return: None 1624 */ 1625 void lim_process_sae_auth_timeout(struct mac_context *mac_ctx); 1626 1627 /** 1628 * lim_send_frame() - API to send frame 1629 * @mac_ctx Pointer to Global MAC structure 1630 * @vdev_id: vdev id 1631 * @buf: Pointer to SAE auth retry frame 1632 * @buf_len: length of frame 1633 * 1634 * Return: None 1635 */ 1636 void lim_send_frame(struct mac_context *mac_ctx, uint8_t vdev_id, uint8_t *buf, 1637 uint16_t buf_len); 1638 1639 /** 1640 * lim_send_mgmt_frame_tx() - Sends mgmt frame 1641 * @mac_ctx Pointer to Global MAC structure 1642 * @msg: Received message info 1643 * 1644 * Return: None 1645 */ 1646 void lim_send_mgmt_frame_tx(struct mac_context *mac_ctx, 1647 struct scheduler_msg *msg); 1648 1649 /** 1650 * lim_send_csa_restart_req() - send csa restart req 1651 * @mac_ctx Pointer to Global MAC structure 1652 * @vdev_id: vdev id 1653 * 1654 * Return: None 1655 */ 1656 void lim_send_csa_restart_req(struct mac_context *mac_ctx, uint8_t vdev_id); 1657 1658 /** 1659 * lim_continue_sta_csa_req() - continue with CSA req after HW mode change 1660 * @mac_ctx Pointer to Global MAC structure 1661 * @vdev_id: vdev id 1662 * 1663 * Return: None 1664 */ 1665 void lim_continue_sta_csa_req(struct mac_context *mac_ctx, uint8_t vdev_id); 1666 1667 /** 1668 * lim_process_mlm_start_req() - process MLM_START_REQ message 1669 * 1670 * @mac_ctx: global MAC context 1671 * @mlm_start_req: Pointer to start req 1672 * 1673 * This function is called to process MLM_START_REQ message 1674 * from SME. MLME now waits for HAL to send WMA_ADD_BSS_RSP. 1675 * 1676 * Return: None 1677 */ 1678 void lim_process_mlm_start_req(struct mac_context *mac_ctx, 1679 tLimMlmStartReq *mlm_start_req); 1680 1681 /** 1682 * lim_process_mlm_join_req() - process mlm join request. 1683 * 1684 * @mac_ctx: Pointer to Global MAC structure 1685 * @msg: Pointer to the MLM message buffer 1686 * 1687 * This function is called to process MLM_JOIN_REQ message 1688 * from SME. It does following: 1689 * 1) Initialize LIM, HAL, DPH 1690 * 2) Configure the BSS for which the JOIN REQ was received 1691 * a) Send WMA_ADD_BSS_REQ to HAL - 1692 * This will identify the BSS that we are interested in 1693 * --AND-- 1694 * Add a STA entry for the AP (in a STA context) 1695 * b) Wait for WMA_ADD_BSS_RSP 1696 * c) Send WMA_ADD_STA_REQ to HAL 1697 * This will add the "local STA" entry to the STA table 1698 * 3) Continue as before, i.e, 1699 * a) Send a PROBE REQ 1700 * b) Wait for PROBE RSP/BEACON containing the SSID that 1701 * we are interested in 1702 * c) Then start an AUTH seq 1703 * d) Followed by the ASSOC seq 1704 * 1705 * @Return: None 1706 */ 1707 void lim_process_mlm_join_req(struct mac_context *mac_ctx, 1708 tLimMlmJoinReq *mlm_join_req); 1709 1710 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT) 1711 /** 1712 * lim_pasn_peer_del_all_resp_vdev_delete_resume() - Delete all PASN peers is 1713 * complete resume vdev delete. 1714 * @mac: Mac context pointer 1715 * @vdev: Vdev object pointer 1716 * 1717 * Return: None 1718 */ 1719 void 1720 lim_pasn_peer_del_all_resp_vdev_delete_resume(struct mac_context *mac, 1721 struct wlan_objmgr_vdev *vdev); 1722 #else 1723 static inline void 1724 lim_pasn_peer_del_all_resp_vdev_delete_resume(struct mac_context *mac, 1725 struct wlan_objmgr_vdev *vdev) 1726 {} 1727 #endif 1728 1729 /** 1730 * lim_send_peer_create_resp() - Send peer create response 1731 * @mac: Pointer to MAC context 1732 * @vdev_id: vdev id 1733 * @status: Status of peer create 1734 * @peer_mac: Peer mac address 1735 */ 1736 void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id, 1737 QDF_STATUS status, uint8_t *peer_mac); 1738 1739 /* 1740 * lim_process_mlm_deauth_req() - This function is called to process 1741 * MLM_DEAUTH_REQ message from SME 1742 * 1743 * @mac_ctx: Pointer to Global MAC structure 1744 * @msg_buf: A pointer to the MLM message buffer 1745 * 1746 * This function is called to process MLM_DEAUTH_REQ message from SME 1747 * 1748 * @Return: None 1749 */ 1750 void lim_process_mlm_deauth_req(struct mac_context *mac_ctx, uint32_t *msg_buf); 1751 1752 /** 1753 * lim_sta_mlme_vdev_disconnect_bss() - Disconnect from BSS 1754 * @vdev_mlme_obj: VDEV MLME comp object 1755 * @data_len: data size 1756 * @data: event data 1757 * 1758 * API invokes BSS disconnection 1759 * 1760 * Return: SUCCESS on successful completion of disconnection 1761 * FAILURE, if it fails due to any 1762 */ 1763 QDF_STATUS lim_sta_mlme_vdev_disconnect_bss(struct vdev_mlme_obj *vdev_mlme, 1764 uint16_t data_len, void *data); 1765 1766 /** 1767 * lim_process_assoc_cleanup() - frees up resources used in function 1768 * lim_process_assoc_req_frame() 1769 * @mac_ctx: pointer to Global MAC structure 1770 * @session: pointer to pe session entry 1771 * @assoc_req: pointer to ASSOC/REASSOC Request frame 1772 * @sta_ds: station dph entry 1773 * @assoc_req_copied: boolean to indicate if assoc req was copied to tmp above 1774 * 1775 * Frees up resources used in function lim_process_assoc_req_frame 1776 * 1777 * Return: void 1778 */ 1779 void lim_process_assoc_cleanup(struct mac_context *mac_ctx, 1780 struct pe_session *session, 1781 tpSirAssocReq assoc_req, 1782 tpDphHashNode sta_ds, 1783 bool assoc_req_copied); 1784 1785 /** 1786 * lim_send_assoc_ind_to_sme() - Initialize PE data structures and send assoc 1787 * indication to SME. 1788 * @mac_ctx: Pointer to Global MAC structure 1789 * @session: pe session entry 1790 * @sub_type: Indicates whether it is Association Request(=0) or Reassociation 1791 * Request(=1) frame 1792 * @sa: Mac address of requesting peer 1793 * @assoc_req: pointer to ASSOC/REASSOC Request frame 1794 * @akm_type: AKM type 1795 * @pmf_connection: flag indicating pmf connection 1796 * @assoc_req_copied: boolean to indicate if assoc req was copied to tmp above 1797 * @dup_entry: flag indicating if duplicate entry found 1798 * @force_1x1: flag to indicate if the STA nss needs to be downgraded to 1x1 1799 * @partner_peer_idx: peer_idx which is already allocated by partner link 1800 * 1801 * Return: void 1802 */ 1803 bool lim_send_assoc_ind_to_sme(struct mac_context *mac_ctx, 1804 struct pe_session *session, 1805 uint8_t sub_type, 1806 tSirMacAddr sa, 1807 tpSirAssocReq assoc_req, 1808 enum ani_akm_type akm_type, 1809 bool pmf_connection, 1810 bool *assoc_req_copied, 1811 bool dup_entry, bool force_1x1, 1812 uint16_t partner_peer_idx); 1813 1814 /** 1815 * lim_process_sta_add_bss_rsp_pre_assoc - Processes handoff request 1816 * @mac_ctx: Pointer to mac context 1817 * @pAddBssParams: Bss params including rsp data 1818 * @session_entry: PE session handle 1819 * @status: Qdf status 1820 * 1821 * This function is called to process a WMA_ADD_BSS_RSP from HAL. 1822 * Upon receipt of this message from HAL if the state is pre assoc. 1823 * 1824 * Return: Null 1825 */ 1826 void lim_process_sta_add_bss_rsp_pre_assoc(struct mac_context *mac_ctx, 1827 struct bss_params *add_bss_params, 1828 struct pe_session *session_entry, 1829 QDF_STATUS status); 1830 #endif /* __LIM_TYPES_H */ 1831