xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h (revision 47c1ec75a2e606767763f42064f3828d5072ef6f)
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