1 /* 2 * Copyright (c) 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 any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: contains mlo manager structure definitions 20 */ 21 #ifndef __MLO_MGR_PUBLIC_STRUCTS_H 22 #define __MLO_MGR_PUBLIC_STRUCTS_H 23 24 #include <wlan_objmgr_cmn.h> 25 #include <qdf_list.h> 26 #include <qdf_atomic.h> 27 #include <qdf_nbuf.h> 28 #include <wlan_cmn_ieee80211.h> 29 #include <wlan_cmn.h> 30 #include <wlan_objmgr_global_obj.h> 31 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) 32 #include <qdf_event.h> 33 #endif 34 #include <wlan_mlo_t2lm.h> 35 36 /* MAX MLO dev support */ 37 #ifndef WLAN_UMAC_MLO_MAX_VDEVS 38 #define WLAN_UMAC_MLO_MAX_VDEVS 2 39 #endif 40 41 #include <wlan_mlo_epcs.h> 42 43 /* MAX instances of ML devices */ 44 #ifndef WLAN_UMAC_MLO_MAX_DEV 45 #define WLAN_UMAC_MLO_MAX_DEV 2 46 #endif 47 48 /* MAX MLO Assoc Links per MLD */ 49 #ifndef WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 50 #define WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 1 51 #endif 52 53 /* Max PEER support */ 54 #define MAX_MLO_PEER 512 55 56 struct mlo_mlme_ext_ops; 57 struct vdev_mlme_obj; 58 struct wlan_t2lm_context; 59 60 /* Max LINK PEER support */ 61 #define MAX_MLO_LINK_PEERS WLAN_UMAC_MLO_MAX_VDEVS 62 63 /* MAX MLO peer_id supported by FW is 128 */ 64 #define MAX_MLO_PEER_ID 128 65 #define MLO_INVALID_PEER_ID 0xFFFF 66 67 /* IE nomenclature */ 68 #define ID_POS 0 69 #define TAG_LEN_POS 1 70 #define IDEXT_POS 2 71 #define MIN_IE_LEN 2 72 #define MULTI_LINK_CTRL_1 3 73 #define MULTI_LINK_CTRL_2 4 74 #define STA_CTRL_1 2 75 #define STA_CTRL_2 3 76 #define STA_PROFILE_SUB_ELEM_ID 0 77 #define PER_STA_PROF_MAC_ADDR_START 4 78 79 #ifdef WLAN_MLO_MULTI_CHIP 80 81 #ifndef WLAN_MAX_MLO_GROUPS 82 #define WLAN_MAX_MLO_GROUPS 2 83 #endif 84 85 /** 86 * enum MLO_LINK_STATE - MLO link state enums 87 * @MLO_LINK_SETUP_INIT: MLO link SETUP exchange not yet done 88 * @MLO_LINK_SETUP_DONE: MLO link SETUP exchange started 89 * @MLO_LINK_READY: MLO link SETUP done and READY sent 90 * @MLO_LINK_TEARDOWN: MLO teardown done. 91 * @MLO_LINK_UNINITIALIZED: MLO link in blank state 92 */ 93 enum MLO_LINK_STATE { 94 MLO_LINK_SETUP_INIT, 95 MLO_LINK_SETUP_DONE, 96 MLO_LINK_READY, 97 MLO_LINK_TEARDOWN, 98 MLO_LINK_UNINITIALIZED, 99 }; 100 101 /** 102 * enum MLO_SOC_LIST - MLO SOC LIST 103 * @WLAN_MLO_GROUP_DEFAULT_SOC_LIST: All MLO SoCs that are part of this MLO 104 * group, (inclusive of both setup sequence 105 * completed, not yet completed) 106 * @WLAN_MLO_GROUP_CURRENT_SOC_LIST: Current MLO SoCs that are probed for which 107 * the setup sequence has been completed 108 */ 109 enum MLO_SOC_LIST { 110 WLAN_MLO_GROUP_DEFAULT_SOC_LIST, 111 WLAN_MLO_GROUP_CURRENT_SOC_LIST, 112 }; 113 114 /* 115 * Maximum number of MLO LINKS across the system, 116 * this is not the MLO links within and AP-MLD. 117 */ 118 119 #define MAX_MLO_LINKS 6 120 #define MAX_MLO_CHIPS 5 121 #define MAX_ADJ_CHIPS 2 122 123 /** 124 * struct mlo_chip_info: MLO chip info per link 125 * @info_valid: If the info here is valid or not 126 * @chip_id: Chip ID as assigned by platform 127 * @adj_chip_ids: Chip IDs of Adjacent chips 128 */ 129 struct mlo_chip_info { 130 uint8_t info_valid; 131 uint8_t chip_id[MAX_MLO_CHIPS]; 132 uint8_t adj_chip_ids[MAX_MLO_CHIPS][MAX_ADJ_CHIPS]; 133 }; 134 135 #define START_STOP_INPROGRESS_BIT 0 136 137 /** 138 * struct mlo_setup_info: MLO setup status per link 139 * @ml_grp_id: Unique id for ML grouping of Pdevs/links 140 * @tot_socs: Total number of soc participating in ML group 141 * @num_soc: Number of soc ready or probed 142 * @tot_links: Total links in ML group 143 * @num_links: Number of links probed in ML group 144 * @pdev_list: current pdev pointers belonging to this group 145 * @curr_soc_list: current psoc pointers belonging to this group 146 * @soc_list: Actual psoc pointers part of this group 147 * @soc_id_list: list of soc ids part of this mlo group 148 * @state: MLO link state 149 * @valid_link_bitmap: valid MLO link bitmap 150 * @trigger_umac_reset: teardown require umac reset, for mode1 SSR 151 * @state_lock: lock to protect access to link state 152 * @event: event for teardown completion 153 * @start_stop_inprogress: MLO group start/stop in progress 154 * @dp_handle: pointer to DP ML context 155 * @chip_info: chip specific info of the soc 156 * @tsf_sync_enabled: MLO TSF sync is enabled at FW or not 157 */ 158 struct mlo_setup_info { 159 uint8_t ml_grp_id; 160 uint8_t tot_socs; 161 uint8_t num_soc; 162 uint8_t tot_links; 163 uint8_t num_links; 164 struct wlan_objmgr_pdev *pdev_list[MAX_MLO_LINKS]; 165 struct wlan_objmgr_psoc *curr_soc_list[MAX_MLO_CHIPS]; 166 struct wlan_objmgr_psoc *soc_list[MAX_MLO_CHIPS]; 167 uint8_t soc_id_list[MAX_MLO_CHIPS]; 168 enum MLO_LINK_STATE state[MAX_MLO_LINKS]; 169 uint16_t valid_link_bitmap; 170 bool trigger_umac_reset; 171 qdf_spinlock_t state_lock; 172 qdf_event_t event; 173 unsigned long start_stop_inprogress; 174 struct cdp_mlo_ctxt *dp_handle; 175 struct mlo_chip_info chip_info; 176 bool tsf_sync_enabled; 177 }; 178 179 /** 180 * struct mlo_state_params: MLO state params for pdev iteration 181 * @link_state_fail: Flag to check when pdev not in expected state 182 * @check_state: State on against which pdev is to be expected 183 * @grp_id: Id of the required MLO Group 184 */ 185 struct mlo_state_params { 186 bool link_state_fail; 187 enum MLO_LINK_STATE check_state; 188 uint8_t grp_id; 189 }; 190 191 #endif 192 193 /* 194 * struct mlo_mgr_context - MLO manager context 195 * @ml_dev_list_lock: ML DEV list lock 196 * @aid_lock: AID global lock 197 * @ml_peerid_lock: ML peer ID global lock 198 * @ml_dev_list: Array of MLO device context 199 * @mlo_peer_id_bmap: bitmap to allocate MLO Peer ID 200 * @max_mlo_peer_id: Max MLO Peer ID 201 * @last_mlo_peer_id: Previously allocated ML peer ID 202 * @setup_info: Pointer to MLO setup_info of all groups 203 * @total_grp: Total number of MLO groups 204 * @mlme_ops: MLO MLME callback function pointers 205 * @msgq_ctx: Context switch mgr 206 * @mlo_is_force_primary_umac: Force Primary UMAC enable 207 * @mlo_forced_primary_umac_id: Force Primary UMAC ID 208 * @force_non_assoc_prim_umac: Force non-assoc link to be primary umac 209 * 210 * NB: not using kernel-doc format since the kernel-doc script doesn't 211 * handle the qdf_bitmap() macro 212 */ 213 struct mlo_mgr_context { 214 #ifdef WLAN_MLO_USE_SPINLOCK 215 qdf_spinlock_t ml_dev_list_lock; 216 qdf_spinlock_t aid_lock; 217 qdf_spinlock_t ml_peerid_lock; 218 #else 219 qdf_mutex_t ml_dev_list_lock; 220 qdf_mutex_t aid_lock; 221 qdf_mutex_t ml_peerid_lock; 222 #endif 223 qdf_list_t ml_dev_list; 224 qdf_bitmap(mlo_peer_id_bmap, MAX_MLO_PEER_ID); 225 uint16_t max_mlo_peer_id; 226 uint16_t last_mlo_peer_id; 227 #ifdef WLAN_MLO_MULTI_CHIP 228 struct mlo_setup_info *setup_info; 229 uint8_t total_grp; 230 #endif 231 struct mlo_mlme_ext_ops *mlme_ops; 232 struct ctxt_switch_mgr *msgq_ctx; 233 bool mlo_is_force_primary_umac; 234 uint8_t mlo_forced_primary_umac_id; 235 bool force_non_assoc_prim_umac; 236 }; 237 238 /* 239 * struct wlan_ml_vdev_aid_mgr - ML AID manager 240 * @aid_bitmap: AID bitmap array 241 * @start_aid: start of AID index 242 * @max_aid: Max allowed AID 243 * @aid_mgr: Array of link vdev aid mgr 244 * 245 * NB: not using kernel-doc format since the kernel-doc script doesn't 246 * handle the qdf_bitmap() macro 247 */ 248 struct wlan_ml_vdev_aid_mgr { 249 qdf_bitmap(aid_bitmap, WLAN_UMAC_MAX_AID); 250 uint16_t start_aid; 251 uint16_t max_aid; 252 struct wlan_vdev_aid_mgr *aid_mgr[WLAN_UMAC_MLO_MAX_VDEVS]; 253 }; 254 255 /** 256 * struct wlan_mlo_key_mgmt - MLO key management 257 * @link_mac_address: list of vdevs selected for connection with the MLAP 258 * @vdev_id: vdev id value 259 * @keys_saved: keys saved bool 260 */ 261 struct wlan_mlo_key_mgmt { 262 struct qdf_mac_addr link_mac_address; 263 uint8_t vdev_id; 264 bool keys_saved; 265 }; 266 267 #ifdef WLAN_FEATURE_11BE_MLO 268 /** 269 * struct mlo_link_state_cmd_params - MLO link state params 270 * @vdev_id: Vdev id 271 * @mld_mac: mld mac address 272 */ 273 struct mlo_link_state_cmd_params { 274 uint8_t vdev_id; 275 uint8_t mld_mac[QDF_MAC_ADDR_SIZE]; 276 }; 277 278 /** 279 * struct ml_link_info - ml link information 280 * @vdev_id: vdev id for this link 281 * @link_id: link id defined as in 802.11 BE spec. 282 * @link_status: active 0, inactive 1 283 * @reserved: reserved bits 284 * @chan_freq: Channel frequency in MHz 285 */ 286 struct ml_link_info { 287 uint32_t vdev_id:8, 288 link_id:8, 289 link_status:2, 290 reserved:14; 291 uint32_t chan_freq; 292 }; 293 294 /** 295 * struct ml_link_state_info_event - ML link state info response 296 * @status: to indicate the status for ml link info 297 * @hw_mode_index: current hardware mode index 298 * @link_info: link information 299 * @num_mlo_vdev_link_info: number of mlo vdev link info 300 * @vdev_id: vdev_id 301 * @mldaddr: mld addr 302 */ 303 struct ml_link_state_info_event { 304 uint32_t status; 305 uint32_t hw_mode_index; 306 struct ml_link_info link_info[WLAN_MLO_MAX_VDEVS]; 307 uint16_t num_mlo_vdev_link_info; 308 uint8_t vdev_id; 309 struct qdf_mac_addr mldaddr; 310 }; 311 312 /** 313 * struct ml_link_state_cmd_info - ml link state command info 314 * @request_cookie: request cookie 315 * @ml_link_state_resp_cb: callback function to handle response 316 * @ml_link_state_req_context: request context 317 */ 318 struct ml_link_state_cmd_info { 319 void *request_cookie; 320 void (*ml_link_state_resp_cb)(struct ml_link_state_info_event *ev, 321 void *cookie); 322 void *ml_link_state_req_context; 323 }; 324 #endif 325 /** 326 * struct mlo_sta_csa_params - CSA request parameters in mlo mgr 327 * @csa_param: csa parameters 328 * @link_id: the link index of AP which triggers CSA 329 * @mlo_csa_synced: Before vdev is up, csa information is only saved but not 330 * handled, and this value is false. Once vdev is up, the saved 331 * csa information is handled, and this value is changed to 332 * true. Note this value will be true if the vdev is doing 333 * restart. 334 * @csa_offload_event_recvd: True if WMI_CSA_HANDLING_EVENTID is already 335 * received. False if this is the first 336 * WMI_CSA_HANDLING_EVENTID. 337 * @valid_csa_param: True once csa_param is filled. 338 */ 339 struct mlo_sta_csa_params { 340 struct csa_offload_params csa_param; 341 uint8_t link_id; 342 bool mlo_csa_synced; 343 bool csa_offload_event_recvd; 344 bool valid_csa_param; 345 }; 346 347 /** 348 * struct mlo_sta_cu_params - critical update parameters in mlo mgr 349 * @vdev_id: vdev id 350 * @bpcc: bss parameter change count 351 * @initialized: flag about the parameter is valid or not 352 */ 353 struct mlo_sta_cu_params { 354 uint8_t vdev_id; 355 uint8_t bpcc; 356 bool initialized; 357 }; 358 359 /** 360 * struct mlo_sta_quiet_status - MLO sta quiet status 361 * @link_id: link id 362 * @quiet_status: true if corresponding ap in quiet status 363 * @valid_status: true if mlo_sta_quiet_status is filled 364 */ 365 struct mlo_sta_quiet_status { 366 uint8_t link_id; 367 bool quiet_status; 368 bool valid_status; 369 }; 370 371 /* 372 * struct wlan_mlo_sta - MLO sta additional info 373 * @wlan_connect_req_links: list of vdevs selected for connection with the MLAP 374 * @wlan_connected_links: list of vdevs associated with this MLO connection 375 * @key_mgmt: 376 * @connect_req: connect params 377 * @copied_conn_req: original connect req 378 * @copied_conn_req_lock: lock for the original connect request 379 * @assoc_rsp: Raw assoc response frame 380 * @mlo_quiet_status: 381 * @mlo_csa_param: CSA request parameters for mlo sta 382 * @mlo_cu_param: critical update parameters for mlo sta 383 * @disconn_req: disconnect req params 384 * @copied_reassoc_rsp: Reassoc response copied from assoc link roam handling 385 * to re-use while link connect in case of deferred/need 386 * basis link connect (e.g. MLO OWE roaming). 387 * @ml_link_state: ml link state command info param 388 * NB: not using kernel-doc format since the kernel-doc script doesn't 389 * handle the qdf_bitmap() macro 390 * @copied_t2lm_ie_assoc_rsp: copy of t2lm ie received in assoc response 391 */ 392 struct wlan_mlo_sta { 393 qdf_bitmap(wlan_connect_req_links, WLAN_UMAC_MLO_MAX_VDEVS); 394 qdf_bitmap(wlan_connected_links, WLAN_UMAC_MLO_MAX_VDEVS); 395 struct wlan_mlo_key_mgmt key_mgmt[WLAN_UMAC_MLO_MAX_VDEVS - 1]; 396 struct wlan_cm_connect_req *connect_req; 397 struct wlan_cm_connect_req *copied_conn_req; 398 #ifdef WLAN_MLO_USE_SPINLOCK 399 qdf_spinlock_t copied_conn_req_lock; 400 #else 401 qdf_mutex_t copied_conn_req_lock; 402 #endif 403 struct element_info assoc_rsp; 404 struct mlo_sta_quiet_status mlo_quiet_status[WLAN_UMAC_MLO_MAX_VDEVS]; 405 struct mlo_sta_csa_params mlo_csa_param[WLAN_UMAC_MLO_MAX_VDEVS]; 406 struct mlo_sta_cu_params mlo_cu_param[WLAN_UMAC_MLO_MAX_VDEVS]; 407 struct wlan_cm_disconnect_req *disconn_req; 408 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 409 struct wlan_cm_connect_resp *copied_reassoc_rsp; 410 #endif 411 #ifdef WLAN_FEATURE_11BE_MLO 412 struct ml_link_state_cmd_info ml_link_state; 413 struct wlan_t2lm_context copied_t2lm_ie_assoc_rsp; 414 #endif 415 }; 416 417 /* 418 * struct wlan_mlo_ap - MLO AP related info 419 * @num_ml_vdevs: number of vdevs to form MLD 420 * @ml_aid_mgr: ML AID mgr 421 * @mlo_ap_lock: lock to sync VDEV SM event 422 * @mlo_vdev_quiet_bmap: Bitmap of vdevs for which quiet ie needs to enabled 423 * @mlo_vdev_up_bmap: Bitmap of vdevs for which sync complete can be dispatched 424 * 425 * NB: not using kernel-doc format since the kernel-doc script doesn't 426 * handle the qdf_bitmap() macro 427 */ 428 struct wlan_mlo_ap { 429 uint8_t num_ml_vdevs; 430 struct wlan_ml_vdev_aid_mgr *ml_aid_mgr; 431 #ifdef WLAN_MLO_USE_SPINLOCK 432 qdf_spinlock_t mlo_ap_lock; 433 #else 434 qdf_mutex_t mlo_ap_lock; 435 #endif 436 qdf_bitmap(mlo_vdev_quiet_bmap, WLAN_UMAC_MLO_MAX_VDEVS); 437 qdf_bitmap(mlo_vdev_up_bmap, WLAN_UMAC_MLO_MAX_VDEVS); 438 }; 439 440 /** 441 * struct wlan_mlo_peer_list - MLO peer list entry 442 * @peer_hash: MLO peer hash code 443 * @peer_list_lock: lock to access members of structure 444 */ 445 struct wlan_mlo_peer_list { 446 qdf_list_t peer_hash[WLAN_PEER_HASHSIZE]; 447 #ifdef WLAN_MLO_USE_SPINLOCK 448 qdf_spinlock_t peer_list_lock; 449 #else 450 qdf_mutex_t peer_list_lock; 451 #endif 452 }; 453 454 /** 455 * struct wlan_mlo_dev_context - MLO device context 456 * @node: QDF list node member 457 * @mld_id: MLD id 458 * @mld_addr: MLO device MAC address 459 * @wlan_vdev_list: list of vdevs associated with this MLO connection 460 * @wlan_vdev_count: number of elements in the vdev list 461 * @mlo_peer_list: list peers in this MLO connection 462 * @wlan_max_mlo_peer_count: peer count across the links of specific MLO 463 * @mlo_dev_lock: lock to access struct 464 * @tsf_recalculation_lock: Lock to protect TSF (re)calculation 465 * @ref_cnt: reference count 466 * @ref_id_dbg: Reference count debug information 467 * @sta_ctx: MLO STA related information 468 * @ap_ctx: AP related information 469 * @t2lm_ctx: T2LM related information 470 * @epcs_ctx: EPCS related information 471 */ 472 struct wlan_mlo_dev_context { 473 qdf_list_node_t node; 474 uint8_t mld_id; 475 struct qdf_mac_addr mld_addr; 476 struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS]; 477 uint16_t wlan_vdev_count; 478 struct wlan_mlo_peer_list mlo_peer_list; 479 uint16_t wlan_max_mlo_peer_count; 480 #ifdef WLAN_MLO_USE_SPINLOCK 481 qdf_spinlock_t mlo_dev_lock; 482 qdf_spinlock_t tsf_recalculation_lock; 483 #else 484 qdf_mutex_t mlo_dev_lock; 485 qdf_mutex_t tsf_recalculation_lock; 486 #endif 487 qdf_atomic_t ref_cnt; 488 qdf_atomic_t ref_id_dbg[WLAN_REF_ID_MAX]; 489 struct wlan_mlo_sta *sta_ctx; 490 struct wlan_mlo_ap *ap_ctx; 491 struct wlan_t2lm_context t2lm_ctx; 492 struct wlan_epcs_context epcs_ctx; 493 }; 494 495 /** 496 * struct wlan_mlo_link_peer_entry - Link peer entry 497 * @link_peer: Object manager peer 498 * @link_addr: MAC address of link peer 499 * @link_ix: Link index 500 * @is_primary: sets true if the peer is primary UMAC’s peer 501 * @hw_link_id: HW Link id of peer 502 * @assoc_rsp_buf: Assoc resp buffer 503 * @peer_assoc_sent: flag to indicate peer assoc sent to FW 504 */ 505 struct wlan_mlo_link_peer_entry { 506 struct wlan_objmgr_peer *link_peer; 507 struct qdf_mac_addr link_addr; 508 uint8_t link_ix; 509 bool is_primary; 510 uint8_t hw_link_id; 511 qdf_nbuf_t assoc_rsp_buf; 512 bool peer_assoc_sent; 513 }; 514 515 /** 516 * enum mlo_peer_state - MLO peer state 517 * @ML_PEER_CREATED: Initial state 518 * @ML_PEER_ASSOC_DONE: ASSOC sent on assoc link 519 * @ML_PEER_DISCONN_INITIATED: Disconnect initiated on one of the links 520 */ 521 enum mlo_peer_state { 522 ML_PEER_CREATED, 523 ML_PEER_ASSOC_DONE, 524 ML_PEER_DISCONN_INITIATED, 525 }; 526 527 #if defined(UMAC_SUPPORT_MLNAWDS) || defined(MESH_MODE_SUPPORT) 528 /** 529 * struct mlnawds_config - MLO NAWDS configuration 530 * @caps: Bandwidth & NSS capabilities to be configured on NAWDS peer 531 * @puncture_bitmap: puncture bitmap to be configured on NAWDS peer 532 * @mac: MAC address of the NAWDS peer to which the caps & puncture bitmap is 533 * to be configured. 534 */ 535 struct mlnawds_config { 536 uint64_t caps; 537 uint16_t puncture_bitmap; 538 uint8_t mac[QDF_MAC_ADDR_SIZE]; 539 }; 540 #endif 541 542 /** 543 * struct mlpeer_auth_params - Deferred Auth params 544 * @vdev_id: VDEV ID 545 * @psoc_id: PSOC ID 546 * @link_addr: MAC address 547 * @mldaddr: MLD MAC address 548 * @algo: Auth algorithm 549 * @seq: Auth sequence number 550 * @status_code: Auth status 551 * @challenge: Auth Challenge 552 * @challenge_length: Auth Challenge length 553 * @wbuf: Auth wbuf 554 * @rs: Rx stats 555 */ 556 struct mlpeer_auth_params { 557 uint8_t vdev_id; 558 uint8_t psoc_id; 559 struct qdf_mac_addr link_addr; 560 struct qdf_mac_addr mldaddr; 561 uint16_t algo; 562 uint16_t seq; 563 uint16_t status_code; 564 uint8_t *challenge; 565 uint8_t challenge_length; 566 qdf_nbuf_t wbuf; 567 void *rs; 568 }; 569 570 /** 571 * struct wlan_mlo_eml_cap - EML capabilities of MLD 572 * @emlsr_supp: eMLSR Support 573 * @emlsr_pad_delay: eMLSR Padding Delay 574 * @emlsr_trans_delay: eMLSR transition delay 575 * @emlmr_supp: eMLMR Support 576 * @emlmr_delay: eMLMR Delay 577 * @trans_timeout: Transition Timeout 578 * @reserved: Reserved 579 */ 580 struct wlan_mlo_eml_cap { 581 uint16_t emlsr_supp:1, 582 emlsr_pad_delay:3, 583 emlsr_trans_delay:3, 584 emlmr_supp:1, 585 emlmr_delay:3, 586 trans_timeout:4, 587 reserved:1; 588 }; 589 590 /** 591 * struct wlan_mlo_msd_cap - MSD capabilities of MLD 592 * @medium_sync_duration: Medium Sync Duration 593 * @medium_sync_ofdm_ed_thresh: MSD threshold value 594 * @medium_sync_max_txop_num: Max number of TXOP 595 */ 596 struct wlan_mlo_msd_cap { 597 uint16_t medium_sync_duration:8, 598 medium_sync_ofdm_ed_thresh:4, 599 medium_sync_max_txop_num:4; 600 }; 601 602 /** 603 * struct wlan_mlo_mld_cap - MLD capabilities of MLD 604 * @max_simult_link: Maximum number of simultaneous links 605 * @srs_support: SRS support 606 * @tid2link_neg_support: TID to Link Negotiation Support 607 * @str_freq_sep: Frequency separation suggested by STR non-AP MLD 608 * OR Type of AP-MLD 609 * @aar_support: AAR Support 610 * @reserved: Reserved 611 */ 612 struct wlan_mlo_mld_cap { 613 uint16_t max_simult_link:4, 614 srs_support:1, 615 tid2link_neg_support:2, 616 str_freq_sep:5, 617 aar_support:1, 618 reserved:3; 619 }; 620 621 /** 622 * struct mlo_nstr_info - MLO NSTR capability info 623 * @link_id: Lind Id 624 * @nstr_lp_present: Flag for NSTR link pair presence 625 * @nstr_bmp_size: NSTR Bitmap Size 626 * @nstr_lp_bitmap: NSTR link pair bitmap of link_id 627 */ 628 struct mlo_nstr_info { 629 uint8_t link_id; 630 bool nstr_lp_present; 631 uint8_t nstr_bmp_size; 632 uint16_t nstr_lp_bitmap; 633 }; 634 635 /** 636 * struct wlan_mlo_peer_context - MLO peer context 637 * 638 * @peer_node: peer list node for ml_dev qdf list 639 * @peer_list: list of peers on the MLO link 640 * @link_peer_cnt: Number of link peers attached 641 * @max_links: Max links for this ML peer 642 * @link_asresp_cnt: Number of reassoc resp generated 643 * @mlo_peer_id: unique ID for the peer 644 * @peer_mld_addr: MAC address of MLD link 645 * @mlo_ie: MLO IE struct 646 * @mlo_peer_lock: lock to access peer structure 647 * @assoc_id: Assoc ID derived by MLO manager 648 * @primary_umac_psoc_id: 649 * @ref_cnt: Reference counter to avoid use after free 650 * @ml_dev: MLO dev context 651 * @mlpeer_state: MLO peer state 652 * @avg_link_rssi: avg RSSI of ML peer 653 * @is_nawds_ml_peer: flag to indicate if ml_peer is NAWDS configured 654 * @nawds_config: eack link peer's NAWDS configuration 655 * @pending_auth: Holds pending auth request 656 * @t2lm_policy: TID-to-link mapping information 657 * @epcs_info: EPCS information 658 * @msd_cap_present: Medium Sync Capability present bit 659 * @mlpeer_emlcap: EML capability information for ML peer 660 * @mlpeer_msdcap: Medium Sync Delay capability information for ML peer 661 * @is_mesh_ml_peer: flag to indicate if ml_peer is MESH configured 662 * @mesh_config: eack link peer's MESH configuration 663 * @mlpeer_mldcap: MLD Capability information for ML peer 664 * @mlpeer_nstrinfo: NSTR Capability info 665 */ 666 struct wlan_mlo_peer_context { 667 qdf_list_node_t peer_node; 668 struct wlan_mlo_link_peer_entry peer_list[MAX_MLO_LINK_PEERS]; 669 uint8_t link_peer_cnt; 670 uint8_t max_links; 671 uint8_t link_asresp_cnt; 672 uint32_t mlo_peer_id; 673 struct qdf_mac_addr peer_mld_addr; 674 uint8_t *mlo_ie; 675 #ifdef WLAN_MLO_USE_SPINLOCK 676 qdf_spinlock_t mlo_peer_lock; 677 #else 678 qdf_mutex_t mlo_peer_lock; 679 #endif 680 uint16_t assoc_id; 681 uint8_t primary_umac_psoc_id; 682 qdf_atomic_t ref_cnt; 683 struct wlan_mlo_dev_context *ml_dev; 684 enum mlo_peer_state mlpeer_state; 685 int8_t avg_link_rssi; 686 #ifdef UMAC_SUPPORT_MLNAWDS 687 bool is_nawds_ml_peer; 688 struct mlnawds_config nawds_config[MAX_MLO_LINK_PEERS]; 689 #endif 690 #ifdef UMAC_MLO_AUTH_DEFER 691 struct mlpeer_auth_params *pending_auth[MAX_MLO_LINK_PEERS]; 692 #endif 693 #ifdef WLAN_FEATURE_11BE 694 struct wlan_mlo_peer_t2lm_policy t2lm_policy; 695 struct wlan_mlo_peer_epcs_info epcs_info; 696 #endif 697 bool msd_cap_present; 698 struct wlan_mlo_eml_cap mlpeer_emlcap; 699 struct wlan_mlo_msd_cap mlpeer_msdcap; 700 #ifdef MESH_MODE_SUPPORT 701 bool is_mesh_ml_peer; 702 struct mlnawds_config mesh_config[MAX_MLO_LINK_PEERS]; 703 #endif 704 struct wlan_mlo_mld_cap mlpeer_mldcap; 705 struct mlo_nstr_info mlpeer_nstrinfo[WLAN_UMAC_MLO_MAX_VDEVS]; 706 }; 707 708 /** 709 * struct mlo_link_info - ML link info 710 * @link_addr: link mac address 711 * @link_id: link index 712 * @is_bridge : Bridge peer or not 713 * @chan_freq: Operating channel frequency 714 * @nawds_config: peer's NAWDS configurarion 715 * @vdev_id: VDEV ID 716 * @mesh_config: peer's MESH configurarion 717 */ 718 struct mlo_link_info { 719 struct qdf_mac_addr link_addr; 720 uint8_t link_id; 721 bool is_bridge; 722 uint16_t chan_freq; 723 #ifdef UMAC_SUPPORT_MLNAWDS 724 struct mlnawds_config nawds_config; 725 #endif 726 uint8_t vdev_id; 727 #ifdef MESH_MODE_SUPPORT 728 struct mlnawds_config mesh_config; 729 #endif 730 }; 731 732 /** 733 * struct mlo_partner_info - mlo partner link info 734 * @num_partner_links: no. of partner links 735 * @partner_link_info: per partner link info 736 * @t2lm_enable_val: enum wlan_t2lm_enable 737 * @nstr_info: NSTR Capability info 738 * @num_nstr_info_links: No. of links for which NSTR info is present 739 */ 740 struct mlo_partner_info { 741 uint8_t num_partner_links; 742 struct mlo_link_info partner_link_info[WLAN_UMAC_MLO_MAX_VDEVS]; 743 #ifdef WLAN_FEATURE_11BE 744 enum wlan_t2lm_enable t2lm_enable_val; 745 struct mlo_nstr_info nstr_info[WLAN_UMAC_MLO_MAX_VDEVS]; 746 uint8_t num_nstr_info_links; 747 #endif 748 }; 749 750 /** 751 * struct mlo_probereq_info - mlo probe req link info 752 * @mlid: MLID requested in the probe req 753 * @num_links: no. of link info in probe req 754 * @link_id: target link id of APs 755 * @is_mld_id_valid: Indicates if mld_id is valid for a given request 756 * @skip_mbssid: Skip mbssid IE 757 */ 758 struct mlo_probereq_info { 759 uint8_t mlid; 760 uint8_t num_links; 761 uint8_t link_id[WLAN_UMAC_MLO_MAX_VDEVS]; 762 bool is_mld_id_valid; 763 bool skip_mbssid; 764 }; 765 766 /** 767 * struct ml_rv_partner_link_info: Partner link information of an ML reconfig IE 768 * @link_id: Link id advertised by the AP 769 * @link_mac_addr: Link mac address 770 * @is_ap_removal_timer_p: AP removal timer is present or not 771 * @ap_removal_timer: number of TBTTs of the AP removal timer 772 */ 773 struct ml_rv_partner_link_info { 774 uint8_t link_id; 775 struct qdf_mac_addr link_mac_addr; 776 uint8_t is_ap_removal_timer_p; 777 uint16_t ap_removal_timer; 778 }; 779 780 /** 781 * struct ml_rv_info: Reconfig Multi link information of a 11be beacon 782 * @mld_mac_addr: MLD mac address 783 * @num_links: Number of links supported by ML AP 784 * @link_info: Array containing partner links information 785 */ 786 struct ml_rv_info { 787 struct qdf_mac_addr mld_mac_addr; 788 uint8_t num_links; 789 struct ml_rv_partner_link_info link_info[WLAN_UMAC_MLO_MAX_VDEVS]; 790 }; 791 792 /** 793 * struct mlo_tgt_link_info - ML target link info 794 * @vdev_id: link peer vdev id 795 * @hw_mld_link_id: HW link id 796 * @mlo_enabled: indicate is MLO enabled 797 * @mlo_assoc_link: indicate is the link used to initialize the association 798 * of mlo connection 799 * @mlo_primary_umac: indicate is the link on primary UMAC, WIN only flag 800 * @mlo_logical_link_index_valid: indicate if the logial link index in is valid 801 * @mlo_peer_id_valid: indicate if the mlo peer id is valid 802 * @mlo_force_link_inactive: force the peer inactive 803 * @emlsr_support: indicate if eMLSR supported 804 * @emlmr_support: indicate if eMLMR supported 805 * @msd_cap_support: indicate if MSD supported 806 * @unused: spare bits 807 * @logical_link_index: Unique index for links of the mlo. Starts with Zero 808 */ 809 struct mlo_tgt_link_info { 810 uint8_t vdev_id; 811 uint8_t hw_mld_link_id; 812 uint32_t mlo_enabled:1, 813 mlo_assoc_link:1, 814 mlo_primary_umac:1, 815 mlo_logical_link_index_valid:1, 816 mlo_peer_id_valid:1, 817 mlo_force_link_inactive:1, 818 emlsr_support:1, 819 emlmr_support:1, 820 msd_cap_support:1, 821 unused:23; 822 uint32_t logical_link_index; 823 824 }; 825 826 /** 827 * struct mlo_tgt_partner_info - mlo target partner link info 828 * @num_partner_links: no. of partner links 829 * @link_info: per partner link info 830 */ 831 struct mlo_tgt_partner_info { 832 uint8_t num_partner_links; 833 struct mlo_tgt_link_info link_info[WLAN_UMAC_MLO_MAX_VDEVS]; 834 }; 835 836 /** 837 * struct mlo_mlme_ext_ops - MLME callback functions 838 * @mlo_mlme_ext_validate_conn_req: Callback to validate connect request 839 * @mlo_mlme_ext_create_link_vdev: Callback to create link vdev for ML STA 840 * @mlo_mlme_ext_peer_create: Callback to create link peer 841 * @mlo_mlme_ext_bridge_peer_create: Callback to create bridge peer 842 * @mlo_mlme_ext_peer_assoc: Callback to initiate peer assoc 843 * @mlo_mlme_ext_peer_assoc_fail: Callback to notify peer assoc failure 844 * @mlo_mlme_ext_peer_delete: Callback to initiate link peer delete 845 * @mlo_mlme_ext_assoc_resp: Callback to initiate assoc resp 846 * @mlo_mlme_get_link_assoc_req: Callback to get link assoc req buffer 847 * @mlo_mlme_ext_deauth: Callback to initiate deauth 848 * @mlo_mlme_ext_clone_security_param: Callback to clone mlo security params 849 * @mlo_mlme_ext_peer_process_auth: Callback to process pending auth 850 * @mlo_mlme_ext_handle_sta_csa_param: Callback to handle sta csa param 851 * @mlo_mlme_ext_sta_op_class: 852 * @mlo_mlme_ext_peer_reassoc: Callback to process reassoc 853 */ 854 struct mlo_mlme_ext_ops { 855 QDF_STATUS (*mlo_mlme_ext_validate_conn_req)( 856 struct vdev_mlme_obj *vdev_mlme, void *ext_data); 857 QDF_STATUS (*mlo_mlme_ext_create_link_vdev)( 858 struct vdev_mlme_obj *vdev_mlme, void *ext_data); 859 QDF_STATUS (*mlo_mlme_ext_peer_create)(struct wlan_objmgr_vdev *vdev, 860 struct wlan_mlo_peer_context *ml_peer, 861 struct qdf_mac_addr *addr, 862 qdf_nbuf_t frm_buf); 863 QDF_STATUS (*mlo_mlme_ext_bridge_peer_create)(struct wlan_objmgr_vdev *vdev, 864 struct wlan_mlo_peer_context *ml_peer, 865 struct qdf_mac_addr *addr, 866 qdf_nbuf_t frm_buf); 867 void (*mlo_mlme_ext_peer_assoc)(struct wlan_objmgr_peer *peer); 868 void (*mlo_mlme_ext_peer_assoc_fail)(struct wlan_objmgr_peer *peer); 869 void (*mlo_mlme_ext_peer_delete)(struct wlan_objmgr_peer *peer); 870 void (*mlo_mlme_ext_assoc_resp)(struct wlan_objmgr_peer *peer); 871 qdf_nbuf_t (*mlo_mlme_get_link_assoc_req)(struct wlan_objmgr_peer *peer, 872 uint8_t link_ix); 873 void (*mlo_mlme_ext_deauth)(struct wlan_objmgr_peer *peer, 874 uint8_t is_disassoc); 875 QDF_STATUS (*mlo_mlme_ext_clone_security_param)( 876 struct vdev_mlme_obj *vdev_mlme, 877 struct wlan_cm_connect_req *req); 878 #ifdef UMAC_MLO_AUTH_DEFER 879 void (*mlo_mlme_ext_peer_process_auth)( 880 struct mlpeer_auth_params *auth_param); 881 #endif 882 void (*mlo_mlme_ext_handle_sta_csa_param)( 883 struct wlan_objmgr_vdev *vdev, 884 struct csa_offload_params *csa_param); 885 QDF_STATUS (*mlo_mlme_ext_sta_op_class)( 886 struct vdev_mlme_obj *vdev_mlme, 887 uint8_t *ml_ie); 888 QDF_STATUS (*mlo_mlme_ext_peer_reassoc)(struct wlan_objmgr_vdev *vdev, 889 struct wlan_mlo_peer_context *ml_peer, 890 struct qdf_mac_addr *addr, 891 qdf_nbuf_t frm_buf); 892 }; 893 894 /* maximum size of vdev bitmap array for MLO link set active command */ 895 #define MLO_VDEV_BITMAP_SZ 2 896 897 /* maximum size of link number param array for MLO link set active command */ 898 #define MLO_LINK_NUM_SZ 2 899 900 /** 901 * enum mlo_link_force_mode: MLO link force modes 902 * @MLO_LINK_FORCE_MODE_ACTIVE: 903 * Force specific links active 904 * @MLO_LINK_FORCE_MODE_INACTIVE: 905 * Force specific links inactive 906 * @MLO_LINK_FORCE_MODE_ACTIVE_NUM: 907 * Force active a number of links, firmware to decide which links to inactive 908 * @MLO_LINK_FORCE_MODE_INACTIVE_NUM: 909 * Force inactive a number of links, firmware to decide which links to inactive 910 * @MLO_LINK_FORCE_MODE_NO_FORCE: 911 * Cancel the force operation of specific links, allow firmware to decide 912 * @MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE: Force specific links active and 913 * force specific links inactive 914 */ 915 enum mlo_link_force_mode { 916 MLO_LINK_FORCE_MODE_ACTIVE = 1, 917 MLO_LINK_FORCE_MODE_INACTIVE = 2, 918 MLO_LINK_FORCE_MODE_ACTIVE_NUM = 3, 919 MLO_LINK_FORCE_MODE_INACTIVE_NUM = 4, 920 MLO_LINK_FORCE_MODE_NO_FORCE = 5, 921 MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE = 6, 922 }; 923 924 /** 925 * enum mlo_link_force_reason: MLO link force reasons 926 * @MLO_LINK_FORCE_REASON_CONNECT: 927 * Set force specific links because of new connection 928 * @MLO_LINK_FORCE_REASON_DISCONNECT: 929 * Set force specific links because of new dis-connection 930 * @MLO_LINK_FORCE_REASON_LINK_REMOVAL: 931 * Set force specific links because of AP side link removal 932 * @MLO_LINK_FORCE_REASON_TDLS: 933 * Set force specific links because of TDLS operation 934 */ 935 enum mlo_link_force_reason { 936 MLO_LINK_FORCE_REASON_CONNECT = 1, 937 MLO_LINK_FORCE_REASON_DISCONNECT = 2, 938 MLO_LINK_FORCE_REASON_LINK_REMOVAL = 3, 939 MLO_LINK_FORCE_REASON_TDLS = 4, 940 }; 941 942 /** 943 * struct mlo_link_set_active_resp: MLO link set active response structure 944 * @status: Return status, 0 for success, non-zero otherwise 945 * @active_sz: size of current active vdev bitmap array 946 * @active: current active vdev bitmap array 947 * @inactive_sz: size of current inactive vdev bitmap array 948 * @inactive: current inactive vdev bitmap array 949 */ 950 struct mlo_link_set_active_resp { 951 uint32_t status; 952 uint32_t active_sz; 953 uint32_t active[MLO_VDEV_BITMAP_SZ]; 954 uint32_t inactive_sz; 955 uint32_t inactive[MLO_VDEV_BITMAP_SZ]; 956 }; 957 958 /** 959 * struct mlo_link_num_param: MLO link set active number params 960 * @num_of_link: number of links to active/inactive 961 * @vdev_type: type of vdev 962 * @vdev_subtype: subtype of vdev 963 * @home_freq: home frequency of the link 964 */ 965 struct mlo_link_num_param { 966 uint32_t num_of_link; 967 uint32_t vdev_type; 968 uint32_t vdev_subtype; 969 uint32_t home_freq; 970 }; 971 972 /* 973 * struct mlo_control_flags: This structure is used for setting 974 * wmi_mlo_control_flags. 975 * @overwrite_force_active_bitmap: indicate overwrite all earlier force_active 976 * bitmaps 977 * @overwrite_force_inactive_bitmap: indicate overwrite all earlier 978 * force_inactive bitmaps 979 * @dynamic_force_link_num: indicate fw to use force link number instead of 980 * force link bitmaps 981 */ 982 struct mlo_control_flags { 983 bool overwrite_force_active_bitmap; 984 bool overwrite_force_inactive_bitmap; 985 bool dynamic_force_link_num; 986 }; 987 988 /** 989 * struct mlo_link_set_active_param: MLO link set active params 990 * @force_mode: operation to take (enum mlo_link_force_mode) 991 * @reason: reason for the operation (enum mlo_link_force_reason) 992 * @num_link_entry: number of the valid entries for link_num 993 * @num_vdev_bitmap: number of the valid entries for vdev_bitmap 994 * @num_inactive_vdev_bitmap: number of the valid entries for 995 * inactive_vdev_bitmap 996 * @link_num: link number param array 997 * It's present only when force_mode is MLO_LINK_FORCE_MODE_ACTIVE_NUM or 998 * MLO_LINK_FORCE_MODE_INACTIVE_NUM 999 * @vdev_bitmap: active/inactive vdev bitmap array 1000 * It will be present when force_mode is MLO_LINK_FORCE_MODE_ACTIVE, 1001 * MLO_LINK_FORCE_MODE_INACTIVE, MLO_LINK_FORCE_MODE_NO_FORCE, 1002 * MLO_LINK_FORCE_MODE_ACTIVE_NUM or MLO_LINK_FORCE_MODE_INACTIVE_NUM, 1003 * and MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE. 1004 * For MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE, it includes the active vdev 1005 * bitmaps 1006 * @inactive_vdev_bitmap: inactive vdev bitmap array 1007 * It will be present when force_mode is MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE, 1008 * it includes the inactive vdev bitmaps 1009 * @control_flags: This structure is used for setting wmi_mlo_control_flags. 1010 */ 1011 struct mlo_link_set_active_param { 1012 uint32_t force_mode; 1013 uint32_t reason; 1014 uint32_t num_link_entry; 1015 uint32_t num_vdev_bitmap; 1016 uint32_t num_inactive_vdev_bitmap; 1017 struct mlo_link_num_param link_num[MLO_LINK_NUM_SZ]; 1018 uint32_t vdev_bitmap[MLO_VDEV_BITMAP_SZ]; 1019 uint32_t inactive_vdev_bitmap[MLO_VDEV_BITMAP_SZ]; 1020 struct mlo_control_flags control_flags; 1021 }; 1022 1023 /** 1024 * struct mlo_link_set_active_ctx - Context for MLO link set active request 1025 * @vdev: pointer to vdev on which the request issued 1026 * @set_mlo_link_cb: callback function for MLO link set active request 1027 * @validate_set_mlo_link_cb: callback to validate set link request 1028 * @cb_arg: callback context 1029 */ 1030 struct mlo_link_set_active_ctx { 1031 struct wlan_objmgr_vdev *vdev; 1032 void (*set_mlo_link_cb)(struct wlan_objmgr_vdev *vdev, void *arg, 1033 struct mlo_link_set_active_resp *evt); 1034 QDF_STATUS (*validate_set_mlo_link_cb)( 1035 struct wlan_objmgr_psoc *psoc, 1036 struct mlo_link_set_active_param *param); 1037 void *cb_arg; 1038 }; 1039 1040 /** 1041 * struct mlo_link_set_active_req - MLO link set active request 1042 * @ctx: context for MLO link set active request 1043 * @param: MLO link set active params 1044 */ 1045 struct mlo_link_set_active_req { 1046 struct mlo_link_set_active_ctx ctx; 1047 struct mlo_link_set_active_param param; 1048 }; 1049 1050 /** 1051 * enum mlo_chip_recovery_type - MLO chip recovery types 1052 * @MLO_RECOVERY_MODE_0: CRASH_PARTNER_CHIPS & recover all chips 1053 * @MLO_RECOVERY_MODE_1: Crash & recover asserted chip alone 1054 * @MLO_RECOVERY_MODE_MAX: Max limit for recovery types 1055 */ 1056 enum mlo_chip_recovery_type { 1057 MLO_RECOVERY_MODE_0 = 1, 1058 MLO_RECOVERY_MODE_1 = 2, 1059 1060 /* Add new types above */ 1061 MLO_RECOVERY_MODE_MAX = 0xf 1062 }; 1063 1064 /** 1065 * enum wlan_t2lm_status - Target status codes in event of t2lm 1066 * @WLAN_MAP_SWITCH_TIMER_TSF: Mapping switch time value in TSF to be included 1067 * in probe response frames 1068 * @WLAN_MAP_SWITCH_TIMER_EXPIRED: Indication that the new proposed T2LM has 1069 * been applied, Update the required data structures and other modules. 1070 * @WLAN_EXPECTED_DUR_EXPIRED: Indication that the proposed T2LM ineffective 1071 * after this duration and all TIDs fall back to default mode. 1072 */ 1073 enum wlan_t2lm_status { 1074 WLAN_MAP_SWITCH_TIMER_TSF, 1075 WLAN_MAP_SWITCH_TIMER_EXPIRED, 1076 WLAN_EXPECTED_DUR_EXPIRED, 1077 }; 1078 1079 /** 1080 * struct mlo_vdev_host_tid_to_link_map_resp - TID-to-link mapping response 1081 * @vdev_id: Vdev id 1082 * @status: Target status for t2lm ie info 1083 * @mapping_switch_tsf: Mapping switch time in tsf for probe response frames 1084 */ 1085 struct mlo_vdev_host_tid_to_link_map_resp { 1086 uint8_t vdev_id; 1087 enum wlan_t2lm_status status; 1088 uint32_t mapping_switch_tsf; 1089 }; 1090 1091 /** 1092 * struct mlo_link_removal_cmd_params - MLO link removal command parameters 1093 * @vdev_id: vdev ID of the link to be removed 1094 * @reconfig_ml_ie: Entire ML reconfiguration element 1095 * @reconfig_ml_ie_size: size of the field @reconfig_ml_ie 1096 */ 1097 struct mlo_link_removal_cmd_params { 1098 uint8_t vdev_id; 1099 uint8_t *reconfig_ml_ie; 1100 uint32_t reconfig_ml_ie_size; 1101 }; 1102 1103 /** 1104 * struct mlo_link_removal_tbtt_info - MLO link removal TBTT info. This 1105 * information will be in correspondence with an outgoing beacon instance. 1106 * @tbtt_count: Delete timer TBTT count in the reported beacon 1107 * @qtimer_reading: Q-timer reading when the reported beacon is sent out 1108 * @tsf: TSF of the reported beacon 1109 */ 1110 struct mlo_link_removal_tbtt_info { 1111 uint32_t tbtt_count; 1112 uint64_t qtimer_reading; 1113 uint64_t tsf; 1114 }; 1115 1116 /** 1117 * struct mlo_link_removal_evt_params - MLO link removal event parameters 1118 * @vdev_id: vdev ID of the link undergoing removal 1119 * @tbtt_info: TBTT information of the link undergoing removal 1120 */ 1121 struct mlo_link_removal_evt_params { 1122 uint8_t vdev_id; 1123 struct mlo_link_removal_tbtt_info tbtt_info; 1124 }; 1125 1126 /** 1127 * struct mgmt_rx_mlo_link_removal_info - Information, sent in MGMT Rx event, of 1128 * a link undergoing removal from its MLD 1129 * @vdev_id: Vdev ID of the link undergoing removal 1130 * @hw_link_id: HW link ID of the link undergoing removal 1131 * @tbtt_count: Delete timer TBTT count of the link undergoing removal 1132 */ 1133 struct mgmt_rx_mlo_link_removal_info { 1134 uint8_t vdev_id; 1135 uint8_t hw_link_id; 1136 uint16_t tbtt_count; 1137 }; 1138 1139 /** 1140 * struct mlo_link_disable_request_evt_params - MLO link disable 1141 * request params 1142 * @mld_addr: disable mld address 1143 * @link_id_bitmap: Disable Link id bitmap 1144 */ 1145 struct mlo_link_disable_request_evt_params { 1146 struct qdf_mac_addr mld_addr; 1147 uint32_t link_id_bitmap; 1148 }; 1149 #endif 1150