1  /*
2   * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3   * Copyright (c) 2021-2024 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  #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
42  /* Max bridge vdevs supported */
43  #define WLAN_UMAC_MLO_MAX_BRIDGE_VDEVS 2
44  /* Max number of PSOC taking part in topology decision at a time*/
45  #define WLAN_UMAC_MLO_MAX_PSOC_TOPOLOGY 3
46  #endif
47  
48  #include <wlan_mlo_epcs.h>
49  
50  /* MAX instances of ML devices */
51  #ifndef WLAN_UMAC_MLO_MAX_DEV
52  #define WLAN_UMAC_MLO_MAX_DEV 2
53  #endif
54  
55  /* MAX MLO Assoc Links per MLD */
56  #ifndef WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS
57  #ifdef SAP_MULTI_LINK_EMULATION
58  #define WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 2
59  #else
60  #define WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 1
61  #endif
62  #endif
63  
64  
65  /* Default Initialization value for Max Recommended Simultaneous Links */
66  #ifndef WLAN_UMAC_MLO_RECOM_MAX_SIMULT_LINKS_DEFAULT
67  #define WLAN_UMAC_MLO_RECOM_MAX_SIMULT_LINKS_DEFAULT 2
68  #endif
69  
70  /* Max PEER support */
71  #define MAX_MLO_PEER 512
72  
73  struct mlo_mlme_ext_ops;
74  struct mlo_osif_ext_ops;
75  struct vdev_mlme_obj;
76  struct wlan_t2lm_context;
77  struct mlo_link_switch_context;
78  struct wlan_mlo_link_switch_req;
79  
80  /* Max LINK PEER support */
81  #define MAX_MLO_LINK_PEERS WLAN_UMAC_MLO_MAX_VDEVS
82  
83  /* MAX MLO peer_id supported by FW is 128 */
84  #define MAX_MLO_PEER_ID 128
85  #define MLO_INVALID_PEER_ID 0xFFFF
86  
87  /* IE nomenclature */
88  #define ID_POS 0
89  #define TAG_LEN_POS 1
90  #define IDEXT_POS 2
91  #define MIN_IE_LEN 2
92  #define MULTI_LINK_CTRL_1 3
93  #define MULTI_LINK_CTRL_2 4
94  #define STA_CTRL_1 2
95  #define STA_CTRL_2 3
96  #define STA_PROFILE_SUB_ELEM_ID 0
97  #define PER_STA_PROF_MAC_ADDR_START 4
98  
99  /* MLO link id max value */
100  #define MAX_MLO_LINK_ID 15
101  
102  #ifdef WLAN_MLO_MULTI_CHIP
103  
104  #ifndef WLAN_MAX_MLO_GROUPS
105  #define WLAN_MAX_MLO_GROUPS 2
106  #endif
107  
108  /**
109   * enum MLO_LINK_STATE - MLO link state enums
110   * @MLO_LINK_SETUP_INIT: MLO link SETUP exchange not yet done
111   * @MLO_LINK_SETUP_DONE: MLO link SETUP exchange started
112   * @MLO_LINK_READY: MLO link SETUP done and READY sent
113   * @MLO_LINK_TEARDOWN: MLO teardown done.
114   * @MLO_LINK_UNINITIALIZED: MLO link in blank state
115   */
116  enum MLO_LINK_STATE {
117  	MLO_LINK_SETUP_INIT,
118  	MLO_LINK_SETUP_DONE,
119  	MLO_LINK_READY,
120  	MLO_LINK_TEARDOWN,
121  	MLO_LINK_UNINITIALIZED,
122  };
123  
124  /**
125   * enum MLO_SOC_LIST - MLO SOC LIST
126   * @WLAN_MLO_GROUP_DEFAULT_SOC_LIST:  All MLO SoCs that are part of this MLO
127   *                                    group, (inclusive of both setup sequence
128   *                                    completed, not yet completed)
129   * @WLAN_MLO_GROUP_CURRENT_SOC_LIST:  Current MLO SoCs that are probed for which
130   *                                    the setup sequence has been completed
131   */
132  enum MLO_SOC_LIST {
133  	WLAN_MLO_GROUP_DEFAULT_SOC_LIST,
134  	WLAN_MLO_GROUP_CURRENT_SOC_LIST,
135  };
136  
137  /*
138   * Maximum number of MLO LINKS across the system,
139   * this is not the MLO links within and AP-MLD.
140   */
141  
142  #define MAX_MLO_LINKS 6
143  #define MAX_MLO_CHIPS 5
144  #define MAX_ADJ_CHIPS 2
145  
146  /* MLO Bridge link */
147  #define MLO_NUM_CHIPS_FOR_BRIDGE_LINK 4
148  #define MLO_MAX_BRIDGE_LINKS_PER_MLD 2
149  #define MLO_MAX_BRIDGE_LINKS_PER_RADIO 8
150  
151  /**
152   * struct mlo_chip_info: MLO chip info per link
153   * @info_valid: If the info here is valid or not
154   * @chip_id: Chip ID as assigned by platform
155   * @adj_chip_ids: Chip IDs of Adjacent chips
156   */
157  struct mlo_chip_info {
158  	uint8_t info_valid;
159  	uint8_t chip_id[MAX_MLO_CHIPS];
160  	uint8_t adj_chip_ids[MAX_MLO_CHIPS][MAX_ADJ_CHIPS];
161  };
162  
163  #define START_STOP_INPROGRESS_BIT 0
164  
165  /**
166   * struct mlo_setup_info: MLO setup status per link
167   * @ml_grp_id: Unique id for ML grouping of Pdevs/links
168   * @tot_socs: Total number of soc participating in ML group
169   * @num_soc: Number of soc ready or probed
170   * @tot_links: Total links in ML group
171   * @num_links: Number of links probed in ML group
172   * @pdev_list: current pdev pointers belonging to this group
173   * @curr_soc_list: current psoc pointers belonging to this group
174   * @soc_list: Actual psoc pointers part of this group
175   * @soc_id_list: list of soc ids part of this mlo group
176   * @state: MLO link state
177   * @valid_link_bitmap: valid MLO link bitmap
178   * @trigger_umac_reset: teardown require umac reset, for mode1 SSR
179   * @state_lock: lock to protect access to link state
180   * @event: event for teardown completion
181   * @start_stop_inprogress: MLO group start/stop in progress
182   * @dp_handle: pointer to DP ML context
183   * @chip_info: chip specific info of the soc
184   * @tsf_sync_enabled: MLO TSF sync is enabled at FW or not
185   * @wsi_stats_info_support: WSI stats support at FW or not
186   */
187  struct mlo_setup_info {
188  	uint8_t ml_grp_id;
189  	uint8_t tot_socs;
190  	uint8_t num_soc;
191  	uint8_t tot_links;
192  	uint8_t num_links;
193  	struct wlan_objmgr_pdev *pdev_list[MAX_MLO_LINKS];
194  	struct wlan_objmgr_psoc *curr_soc_list[MAX_MLO_CHIPS];
195  	struct wlan_objmgr_psoc *soc_list[MAX_MLO_CHIPS];
196  	uint8_t soc_id_list[MAX_MLO_CHIPS];
197  	enum MLO_LINK_STATE state[MAX_MLO_LINKS];
198  	uint16_t valid_link_bitmap;
199  	bool trigger_umac_reset;
200  	qdf_spinlock_t state_lock;
201  	qdf_event_t event;
202  	unsigned long start_stop_inprogress;
203  	struct cdp_mlo_ctxt *dp_handle;
204  	struct mlo_chip_info chip_info;
205  	bool tsf_sync_enabled;
206  	uint8_t wsi_stats_info_support;
207  };
208  
209  /**
210   * struct mlo_state_params: MLO state params for pdev iteration
211   * @link_state_fail: Flag to check when pdev not in expected state
212   * @check_state: State on against which pdev is to be expected
213   * @grp_id: Id of the required MLO Group
214   */
215  struct mlo_state_params {
216  	bool link_state_fail;
217  	enum MLO_LINK_STATE check_state;
218  	uint8_t grp_id;
219  };
220  
221  #endif
222  
223  /**
224   * enum wlan_mlo_link_switch_notify_reason - Enum for link switch notifier
225   *                                           callback trigger reason.
226   * @MLO_LINK_SWITCH_NOTIFY_REASON_PRE_START_PRE_SER: Prior to start of
227   *                                                   link switch and prior to
228   *                                                   serializing link switch.
229   * @MLO_LINK_SWITCH_NOTIFY_REASON_PRE_START_POST_SER: Prior to link switch start
230   *                                                    but link switch is
231   *                                                    serialized
232   * @MLO_LINK_SWITCH_NOTIFY_REASON_STOP_FAILURE: Link switch failure notify
233   * @MLO_LINK_SWITCH_NOTIFY_REASON_STOP_SUCCESS: Link switch success notify
234   */
235  enum wlan_mlo_link_switch_notify_reason {
236  	MLO_LINK_SWITCH_NOTIFY_REASON_PRE_START_PRE_SER,
237  	MLO_LINK_SWITCH_NOTIFY_REASON_PRE_START_POST_SER,
238  	MLO_LINK_SWITCH_NOTIFY_REASON_STOP_FAILURE,
239  	MLO_LINK_SWITCH_NOTIFY_REASON_STOP_SUCCESS,
240  };
241  
242  typedef QDF_STATUS
243  (*mlo_mgr_link_switch_notifier_cb)(struct wlan_objmgr_vdev *vdev,
244  				   struct wlan_mlo_link_switch_req *lswitch_req,
245  				   enum wlan_mlo_link_switch_notify_reason notify_reason);
246  
247  #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
248  /*
249   * struct wlan_mlo_link_switch_notifier - Link switch notifier callbacks
250   * @in_use: Set to true on successful notifier callback registration
251   * @cb: Callback to notify link switch start
252   */
253  struct wlan_mlo_link_switch_notifier {
254  	bool in_use;
255  	mlo_mgr_link_switch_notifier_cb cb;
256  };
257  
258  /**
259   * mlo_mgr_register_link_switch_notifier() - API to register link switch
260   * start notifier callback
261   * @comp_id: Component requesting notification on link switch start
262   * @cb: Callback to register.
263   *
264   * The @cb will be triggered on start of link switch with params of the
265   * link switch.
266   *
267   * Return: QDF_STATUS
268   */
269  QDF_STATUS
270  mlo_mgr_register_link_switch_notifier(enum wlan_umac_comp_id comp_id,
271  				      mlo_mgr_link_switch_notifier_cb cb);
272  
273  /**
274   * mlo_mgr_unregister_link_switch_notifier() - API to unregister link switch
275   * notifier callback.
276   * @comp_id: Component to deregister.
277   *
278   * The API will cleanup the notification callback registered for link switch.
279   *
280   * Return: QDF_STATUS
281   */
282  QDF_STATUS
283  mlo_mgr_unregister_link_switch_notifier(enum wlan_umac_comp_id comp_id);
284  #else
285  static inline QDF_STATUS
mlo_mgr_register_link_switch_notifier(enum wlan_umac_comp_id comp_id,mlo_mgr_link_switch_notifier_cb cb)286  mlo_mgr_register_link_switch_notifier(enum wlan_umac_comp_id comp_id,
287  				      mlo_mgr_link_switch_notifier_cb cb)
288  {
289  	return QDF_STATUS_E_NOSUPPORT;
290  }
291  
292  static inline QDF_STATUS
mlo_mgr_unregister_link_switch_notifier(enum wlan_umac_comp_id comp_id)293  mlo_mgr_unregister_link_switch_notifier(enum wlan_umac_comp_id comp_id)
294  {
295  	return QDF_STATUS_E_NOSUPPORT;
296  }
297  #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
298  
299  /*
300   * struct mlo_wsi_link_stats - MLO ingress/egress counters of PSOC
301   * @ingress_cnt:  Ingress counter
302   * @egress_cnt:  Egress counter
303   * @send_wmi_cmd: To indicate whether WMI command to be sent or not
304   */
305  struct mlo_wsi_link_stats {
306  	uint32_t ingress_cnt;
307  	uint32_t egress_cnt;
308  	bool  send_wmi_cmd;
309  };
310  
311  /*
312   * struct mlo_wsi_psoc_grp - MLO WSI PSOC group
313   * @psoc_order:  PSOC list in WSI loop order
314   * @num_psoc: num psoc in the group
315   */
316  struct mlo_wsi_psoc_grp {
317  	uint32_t psoc_order[WLAN_OBJMGR_MAX_DEVICES];
318  	uint32_t num_psoc;
319  };
320  
321  #define MLO_WSI_MAX_MLO_GRPS 2
322  #define MLO_WSI_PSOC_ID_MAX 0xFF
323  
324  /*
325   * struct mlo_wsi_info - MLO ingress/egress link context per-PSOC
326   * @mlo_psoc_grp: PSOC IDs for different MLO groups
327   * @num_psoc: Total num psoc
328   * @link_stats: Ingress and Egress counts for PSOCs
329   * @block_wmi_cmd: Blocks WMI command
330   */
331  struct mlo_wsi_info {
332  	struct mlo_wsi_psoc_grp mlo_psoc_grp[MLO_WSI_MAX_MLO_GRPS];
333  	uint32_t num_psoc;
334  	struct mlo_wsi_link_stats link_stats[WLAN_OBJMGR_MAX_DEVICES];
335  	uint8_t block_wmi_cmd;
336  };
337  
338  /**
339   * struct mlo_mgr_context - MLO manager context
340   * @ml_dev_list_lock: ML DEV list lock
341   * @aid_lock: AID global lock
342   * @ml_peerid_lock: ML peer ID global lock
343   * @ml_dev_list: Array of MLO device context
344   * @mlo_peer_id_bmap: bitmap to allocate MLO Peer ID
345   * @max_mlo_peer_id: Max MLO Peer ID
346   * @last_mlo_peer_id: Previously allocated ML peer ID
347   * @setup_info: Pointer to MLO setup_info of all groups
348   * @total_grp: Total number of MLO groups
349   * @mlme_ops: MLO MLME callback function pointers
350   * @osif_ops: MLO to OSIF callback function pointers
351   * @msgq_ctx: Context switch mgr
352   * @mlo_is_force_primary_umac: Force Primary UMAC enable
353   * @mlo_forced_primary_umac_id: Force Primary UMAC ID
354   * @force_non_assoc_prim_umac: Force non-assoc link to be primary umac
355   * @lswitch_notifier: Link switch notifier callbacks
356   * @wsi_info: WSI stats info
357   * @disable_eml: Disable Enhanced Multi Link features(eMLSR and eMLMR).
358   */
359  struct mlo_mgr_context {
360  #ifdef WLAN_MLO_USE_SPINLOCK
361  	qdf_spinlock_t ml_dev_list_lock;
362  	qdf_spinlock_t aid_lock;
363  	qdf_spinlock_t ml_peerid_lock;
364  #else
365  	qdf_mutex_t ml_dev_list_lock;
366  	qdf_mutex_t aid_lock;
367  	qdf_mutex_t ml_peerid_lock;
368  #endif
369  	qdf_list_t ml_dev_list;
370  	qdf_bitmap(mlo_peer_id_bmap, MAX_MLO_PEER_ID);
371  	uint16_t max_mlo_peer_id;
372  	uint16_t last_mlo_peer_id;
373  #ifdef WLAN_MLO_MULTI_CHIP
374  	struct mlo_setup_info *setup_info;
375  	uint8_t total_grp;
376  #endif
377  	struct mlo_mlme_ext_ops *mlme_ops;
378  #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
379  	struct mlo_osif_ext_ops *osif_ops;
380  #endif
381  	struct ctxt_switch_mgr *msgq_ctx;
382  	bool mlo_is_force_primary_umac;
383  	uint8_t mlo_forced_primary_umac_id;
384  	bool force_non_assoc_prim_umac;
385  #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
386  	struct wlan_mlo_link_switch_notifier lswitch_notifier[WLAN_UMAC_COMP_ID_MAX];
387  #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
388  	struct mlo_wsi_info *wsi_info;
389  	bool disable_eml;
390  };
391  
392  /**
393   * struct wlan_ml_vdev_aid_mgr - ML AID manager
394   * @aid_bitmap: AID bitmap array
395   * @start_aid: start of AID index
396   * @max_aid: Max allowed AID
397   * @aid_mgr:  Array of link vdev aid mgr
398   */
399  struct wlan_ml_vdev_aid_mgr {
400  	qdf_bitmap(aid_bitmap, WLAN_UMAC_MAX_AID);
401  	uint16_t start_aid;
402  	uint16_t max_aid;
403  	struct wlan_vdev_aid_mgr *aid_mgr[WLAN_UMAC_MLO_MAX_VDEVS];
404  };
405  
406  /**
407   * struct wlan_mlo_key_mgmt - MLO key management
408   * @keys_saved: keys saved bool
409   * @link_id: link id
410   */
411  struct wlan_mlo_key_mgmt {
412  	bool keys_saved;
413  	uint8_t link_id;
414  };
415  
416  /**
417   * struct mlo_link_bss_params - link bss param
418   * @link_id: link id
419   * @ap_mld_mac: mld mac address
420   * @chan: channel
421   */
422  struct mlo_link_bss_params {
423  	int8_t link_id;
424  	int8_t ap_mld_mac[QDF_MAC_ADDR_SIZE];
425  	struct wlan_channel *chan;
426  };
427  
428  #ifdef WLAN_FEATURE_11BE_MLO
429  
430  /**
431   * enum mlo_link_info_event_status - link info event status
432   * @WLAN_LINK_INFO_EVENT_SUCCESS: success
433   * @WLAN_LINK_INFO_EVENT_REJECT_FAILURE: reject due to common failure reason
434   * @WLAN_LINK_INFO_EVENT_REJECT_VDEV_NOT_UP: reject as vdev is not up
435   * @WLAN_LINK_INFO_EVENT_REJECT_ROAMING_IN_PROGRESS: reject as roaming
436   *						     is in progress
437   * @WLAN_LINK_INFO_EVENT_REJECT_NON_MLO_CONNECTION: reject as it's not
438   *						    MLO connection
439   */
440  enum mlo_link_info_event_status {
441  	WLAN_LINK_INFO_EVENT_SUCCESS,
442  	WLAN_LINK_INFO_EVENT_REJECT_FAILURE,
443  	WLAN_LINK_INFO_EVENT_REJECT_VDEV_NOT_UP,
444  	WLAN_LINK_INFO_EVENT_REJECT_ROAMING_IN_PROGRESS,
445  	WLAN_LINK_INFO_EVENT_REJECT_NON_MLO_CONNECTION,
446  };
447  
448  /**
449   * struct mlo_link_state_cmd_params - MLO link state params
450   * @vdev_id: Vdev id
451   * @mld_mac: mld mac address
452   */
453  struct mlo_link_state_cmd_params {
454  	uint8_t vdev_id;
455  	uint8_t mld_mac[QDF_MAC_ADDR_SIZE];
456  };
457  
458  /**
459   * struct ml_link_info - ml link information
460   * @vdev_id: vdev id for this link
461   * @link_id: link id defined as in 802.11 BE spec.
462   * @link_status: inactive 0, active 1
463   * @reserved: reserved bits
464   * @chan_freq: Channel frequency in MHz
465   */
466  struct ml_link_info {
467  	uint32_t vdev_id:8,
468  		 link_id:8,
469  		 link_status:2,
470  		 reserved:14;
471  	uint32_t chan_freq;
472  };
473  
474  /**
475   * struct ml_link_state_info_event - ML link state info response
476   * @status: to indicate the status for ml link info
477   * @hw_mode_index: current hardware mode index
478   * @link_info: link information
479   * @num_mlo_vdev_link_info: number of mlo vdev link info
480   * @vdev_id: vdev_id
481   * @mldaddr: mld addr
482   */
483  struct ml_link_state_info_event {
484  	uint32_t status;
485  	uint32_t hw_mode_index;
486  	struct ml_link_info link_info[WLAN_MAX_ML_BSS_LINKS];
487  	uint16_t num_mlo_vdev_link_info;
488  	uint8_t vdev_id;
489  	struct qdf_mac_addr mldaddr;
490  };
491  
492  /**
493   * struct ml_link_state_cmd_info - ml link state command info
494   * @request_cookie: request cookie
495   * @ml_link_state_resp_cb: callback function to handle response
496   * @ml_link_state_req_context: request context
497   */
498  struct ml_link_state_cmd_info {
499  	void *request_cookie;
500  	void (*ml_link_state_resp_cb)(struct ml_link_state_info_event *ev,
501  				      void *cookie);
502  	void *ml_link_state_req_context;
503  };
504  #endif
505  /**
506   * struct mlo_sta_csa_params - CSA request parameters in mlo mgr
507   * @csa_param: csa parameters
508   * @link_id: the link index of AP which triggers CSA
509   * @mlo_csa_synced: Before vdev is up, csa information is only saved but not
510   *                  handled, and this value is false. Once vdev is up, the saved
511   *                  csa information is handled, and this value is changed to
512   *                  true. Note this value will be true if the vdev is doing
513   *                  restart.
514   * @csa_offload_event_recvd: True if WMI_CSA_HANDLING_EVENTID is already
515   *                           received. False if this is the first
516   *                           WMI_CSA_HANDLING_EVENTID.
517   * @valid_csa_param: True once csa_param is filled.
518   */
519  struct mlo_sta_csa_params {
520  	struct csa_offload_params csa_param;
521  	uint8_t link_id;
522  	bool mlo_csa_synced;
523  	bool csa_offload_event_recvd;
524  	bool valid_csa_param;
525  };
526  
527  /**
528   * struct mlo_sta_cu_params - critical update parameters in mlo mgr
529   * @vdev_id: vdev id
530   * @bpcc: bss parameter change count
531   * @initialized: flag about the parameter is valid or not
532   */
533  struct mlo_sta_cu_params {
534  	uint8_t vdev_id;
535  	uint8_t bpcc;
536  	bool initialized;
537  };
538  
539  /**
540   * struct mlo_sta_quiet_status - MLO sta quiet status
541   * @link_id: link id
542   * @quiet_status: true if corresponding ap in quiet status
543   * @valid_status: true if mlo_sta_quiet_status is filled
544   */
545  struct mlo_sta_quiet_status {
546  	uint8_t link_id;
547  	bool quiet_status;
548  	bool valid_status;
549  };
550  
551  /**
552   * enum mlo_link_force_mode: MLO link force modes
553   * @MLO_LINK_FORCE_MODE_ACTIVE:
554   *  Force specific links active
555   * @MLO_LINK_FORCE_MODE_INACTIVE:
556   *  Force specific links inactive
557   * @MLO_LINK_FORCE_MODE_ACTIVE_NUM:
558   *  Force active a number of links, firmware to decide which links to inactive
559   * @MLO_LINK_FORCE_MODE_INACTIVE_NUM:
560   *  Force inactive a number of links, firmware to decide which links to inactive
561   * @MLO_LINK_FORCE_MODE_NO_FORCE:
562   *  Cancel the force operation of specific links, allow firmware to decide
563   * @MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE: Force specific links active and
564   *  force specific links inactive
565   */
566  enum mlo_link_force_mode {
567  	MLO_LINK_FORCE_MODE_ACTIVE       = 1,
568  	MLO_LINK_FORCE_MODE_INACTIVE     = 2,
569  	MLO_LINK_FORCE_MODE_ACTIVE_NUM   = 3,
570  	MLO_LINK_FORCE_MODE_INACTIVE_NUM = 4,
571  	MLO_LINK_FORCE_MODE_NO_FORCE     = 5,
572  	MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE = 6,
573  };
574  
575  /**
576   * enum mlo_link_force_reason: MLO link force reasons
577   * @MLO_LINK_FORCE_REASON_CONNECT:
578   *  Set force specific links because of new connection
579   * @MLO_LINK_FORCE_REASON_DISCONNECT:
580   *  Set force specific links because of new dis-connection
581   * @MLO_LINK_FORCE_REASON_LINK_REMOVAL:
582   *  Set force specific links because of AP side link removal
583   * @MLO_LINK_FORCE_REASON_TDLS:
584   *  Set force specific links because of TDLS operation
585   */
586  enum mlo_link_force_reason {
587  	MLO_LINK_FORCE_REASON_CONNECT    = 1,
588  	MLO_LINK_FORCE_REASON_DISCONNECT = 2,
589  	MLO_LINK_FORCE_REASON_LINK_REMOVAL = 3,
590  	MLO_LINK_FORCE_REASON_TDLS = 4,
591  };
592  
593  /**
594   * enum set_link_source - set link source
595   * @SET_LINK_FROM_CONCURRENCY: concurrent connection request
596   * @SET_LINK_FROM_VENDOR_CMD: vendor command request
597   * @SET_LINK_FROM_TDLS: tdls command request
598   * @SET_LINK_SOURCE_MAX: max num of source
599   */
600  enum set_link_source {
601  	SET_LINK_FROM_CONCURRENCY = 0,
602  	SET_LINK_FROM_VENDOR_CMD = 1,
603  	SET_LINK_FROM_TDLS = 2,
604  	SET_LINK_SOURCE_MAX,
605  };
606  
607  /**
608   * struct set_link_req - set link request
609   * @mode: set link mode
610   * @reason: reason of set link
611   * @force_active_bitmap: force active link bitmap
612   * @force_inactive_bitmap: force inactive link bitmap
613   * @force_active_num: force active link num
614   * @force_active_num_bitmap: force active num link bitmap
615   * @force_inactive_num: force inactive link num
616   * @force_inactive_num_bitmap: force inactive num link bitmap
617   */
618  struct set_link_req {
619  	enum mlo_link_force_mode mode;
620  	enum mlo_link_force_reason reason;
621  	uint16_t force_active_bitmap;
622  	uint16_t force_inactive_bitmap;
623  	uint8_t force_active_num;
624  	uint16_t force_active_num_bitmap;
625  	uint8_t force_inactive_num;
626  	uint16_t force_inactive_num_bitmap;
627  };
628  
629  /**
630   * struct ml_link_force_state - link force state.
631   * @force_active_bitmap: force active link bitmap
632   * @force_inactive_bitmap: force inactive link bitmap
633   * @force_active_num: force active link num
634   * @force_active_num_bitmap: force active num link bitmap
635   * @force_inactive_num: force inactive link num
636   * @force_inactive_num_bitmap: force inactive num link bitmap
637   * @curr_dynamic_inactive_bitmap: dynamic inactive link bitmap
638   * @curr_active_bitmap: current active link bitmap
639   * @curr_inactive_bitmap: current inactive link bitmap
640   */
641  struct ml_link_force_state {
642  	uint16_t force_active_bitmap;
643  	uint16_t force_inactive_bitmap;
644  	uint8_t force_active_num;
645  	uint16_t force_active_num_bitmap;
646  	uint8_t force_inactive_num;
647  	uint16_t force_inactive_num_bitmap;
648  	uint16_t curr_dynamic_inactive_bitmap;
649  	uint16_t curr_active_bitmap;
650  	uint16_t curr_inactive_bitmap;
651  };
652  
653  /**
654   * struct wlan_link_force_context - link force ctx.
655   * @force_state: current force active/inactive states which
656   * have been sent to target
657   * @reqs: request of set link
658   */
659  struct wlan_link_force_context {
660  	struct ml_link_force_state force_state;
661  	struct set_link_req reqs[SET_LINK_SOURCE_MAX];
662  };
663  
664  #if defined(UMAC_SUPPORT_MLNAWDS) || defined(MESH_MODE_SUPPORT)
665  /**
666   * struct mlnawds_config - MLO NAWDS configuration
667   * @caps: Bandwidth & NSS capabilities to be configured on NAWDS peer
668   * @puncture_bitmap: puncture bitmap to be configured on NAWDS peer
669   * @mac: MAC address of the NAWDS peer to which the caps & puncture bitmap is
670   * to be configured.
671   */
672  struct mlnawds_config {
673  	uint64_t caps;
674  	uint16_t puncture_bitmap;
675  	uint8_t  mac[QDF_MAC_ADDR_SIZE];
676  };
677  #endif
678  
679  /* AP removed link flag bit position for link_status_flags in
680   * struct mlo_link_info
681   */
682  #define LS_F_AP_REMOVAL_BIT 0
683  
684  /**
685   * struct mlo_link_info - ML link info
686   * @link_addr: link mac address
687   * @link_id: link index
688   * @is_bridge : Bridge peer or not
689   * @chan_freq: Operating channel frequency
690   * @nawds_config: peer's NAWDS configurarion
691   * @vdev_id: VDEV ID
692   * @mesh_config: peer's MESH configurarion
693   * @link_status_flags: Current status of link
694   * @ap_link_addr: Associated link BSSID
695   * @link_chan_info: Associated link channel info
696   * @is_link_active: link state
697   */
698  struct mlo_link_info {
699  	struct qdf_mac_addr link_addr;
700  	uint8_t link_id;
701  	bool is_bridge;
702  	uint16_t chan_freq;
703  #ifdef UMAC_SUPPORT_MLNAWDS
704  	struct mlnawds_config nawds_config;
705  #endif
706  	uint8_t vdev_id;
707  #ifdef MESH_MODE_SUPPORT
708  	struct mlnawds_config mesh_config;
709  #endif
710  #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
711  	unsigned long link_status_flags;
712  	struct qdf_mac_addr ap_link_addr;
713  	struct wlan_channel *link_chan_info;
714  #endif
715  	bool is_link_active;
716  };
717  
718  /**
719   * struct mlo_nstr_info - MLO NSTR capability info
720   * @link_id: Lind Id
721   * @nstr_lp_present: Flag for NSTR link pair presence
722   * @nstr_bmp_size: NSTR Bitmap Size
723   * @nstr_lp_bitmap: NSTR link pair bitmap of link_id
724   */
725  struct mlo_nstr_info {
726  	uint8_t link_id;
727  	bool nstr_lp_present;
728  	uint8_t nstr_bmp_size;
729  	uint16_t nstr_lp_bitmap;
730  };
731  
732  #ifndef WLAN_MAX_ML_BSS_LINKS
733  #define WLAN_MAX_ML_BSS_LINKS WLAN_UMAC_MLO_MAX_VDEVS
734  #endif
735  
736  /**
737   * struct mlo_partner_info - mlo partner link info
738   * @num_partner_links: no. of partner links
739   * @partner_link_info: per partner link info
740   * @t2lm_enable_val: enum wlan_t2lm_enable
741   * @nstr_info: NSTR Capability info
742   * @num_nstr_info_links: No. of links for which NSTR info is present
743   */
744  struct mlo_partner_info {
745  	uint8_t num_partner_links;
746  	struct mlo_link_info partner_link_info[WLAN_MAX_ML_BSS_LINKS];
747  #ifdef WLAN_FEATURE_11BE
748  	enum wlan_t2lm_enable t2lm_enable_val;
749  	struct mlo_nstr_info nstr_info[WLAN_UMAC_MLO_MAX_VDEVS];
750  	uint8_t num_nstr_info_links;
751  #endif
752  };
753  
754  #ifdef WLAN_FEATURE_11BE_MLO
755  /**
756   * struct emlsr_capability - EMLSR capabilities info
757   * @emlsr_supp: EMLSR support is present or not.
758   * @trans_timeout: transition timeout
759   */
760  struct emlsr_capability {
761  	bool emlsr_supp;
762  	uint8_t trans_timeout;
763  };
764  #endif
765  
766  /**
767   * struct wlan_mlo_sta_assoc_pending_list - MLO sta assoc pending list entry
768   * @peer_list: MLO peer list
769   * @list_lock: lock to access members of structure
770   */
771  struct wlan_mlo_sta_assoc_pending_list {
772  	qdf_list_t peer_list;
773  	qdf_spinlock_t list_lock;
774  };
775  
776  /**
777   * struct wlan_mlo_sta - MLO sta additional info
778   * @wlan_connect_req_links: list of vdevs selected for connection with the MLAP
779   * @wlan_connected_links: list of vdevs associated with this MLO connection
780   * @key_mgmt:
781   * @connect_req: connect params
782   * @copied_conn_req: original connect req
783   * @copied_conn_req_lock: lock for the original connect request
784   * @assoc_rsp: Raw assoc response frame
785   * @mlo_quiet_status:
786   * @mlo_csa_param: CSA request parameters for mlo sta
787   * @mlo_cu_param: critical update parameters for mlo sta
788   * @disconn_req: disconnect req params
789   * @copied_reassoc_rsp: Reassoc response copied from assoc link roam handling
790   *                      to re-use while link connect in case of deferred/need
791   *                      basis link connect (e.g. MLO OWE roaming).
792   * @ml_link_state: ml link state command info param
793   * @copied_t2lm_ie_assoc_rsp: copy of t2lm ie received in assoc response
794   * @ml_partner_info: mlo partner link info
795   * @emlsr_cap: EMLSR capabilities info
796   * @link_force_ctx: set link force mode context
797   * @ml_link_control_mode: link control mode configured via user space
798   * @ml_chan_switch_in_progress: Flag to track CSA at MLD level
799   */
800  struct wlan_mlo_sta {
801  	qdf_bitmap(wlan_connect_req_links, WLAN_UMAC_MLO_MAX_VDEVS);
802  	qdf_bitmap(wlan_connected_links, WLAN_UMAC_MLO_MAX_VDEVS);
803  	struct wlan_mlo_key_mgmt key_mgmt[WLAN_MAX_ML_BSS_LINKS];
804  	struct wlan_cm_connect_req *connect_req;
805  	struct wlan_cm_connect_req *copied_conn_req;
806  #ifdef WLAN_MLO_USE_SPINLOCK
807  	qdf_spinlock_t copied_conn_req_lock;
808  #else
809  	qdf_mutex_t copied_conn_req_lock;
810  #endif
811  	struct element_info assoc_rsp;
812  	struct mlo_sta_quiet_status mlo_quiet_status[WLAN_UMAC_MLO_MAX_VDEVS];
813  	struct mlo_sta_csa_params mlo_csa_param[WLAN_UMAC_MLO_MAX_VDEVS];
814  	struct mlo_sta_cu_params mlo_cu_param[WLAN_UMAC_MLO_MAX_VDEVS];
815  	struct wlan_cm_disconnect_req *disconn_req;
816  #ifdef WLAN_FEATURE_ROAM_OFFLOAD
817  	struct wlan_cm_connect_resp *copied_reassoc_rsp;
818  #endif
819  #ifdef WLAN_FEATURE_11BE_MLO
820  	struct ml_link_state_cmd_info ml_link_state;
821  	struct wlan_t2lm_context copied_t2lm_ie_assoc_rsp;
822  	struct mlo_partner_info ml_partner_info;
823  	struct emlsr_capability emlsr_cap;
824  #endif
825  #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
826  	struct wlan_link_force_context link_force_ctx;
827  #endif
828  	uint8_t ml_link_control_mode;
829  	bool ml_chan_switch_in_progress;
830  };
831  
832  /**
833   * struct wlan_mlo_ap - MLO AP related info
834   * @num_ml_vdevs: number of vdevs to form MLD
835   * @ml_aid_mgr: ML AID mgr
836   * @mlo_ap_lock: lock to sync VDEV SM event
837   * @mlo_vdev_quiet_bmap: Bitmap of vdevs for which quiet ie needs to enabled
838   * @mlo_vdev_up_bmap: Bitmap of vdevs for which sync complete can be dispatched
839   * @assoc_list: MLO sta assoc pending list entry (for FT-over-DS)
840   */
841  struct wlan_mlo_ap {
842  	uint8_t num_ml_vdevs;
843  	struct wlan_ml_vdev_aid_mgr *ml_aid_mgr;
844  #ifdef WLAN_MLO_USE_SPINLOCK
845  	qdf_spinlock_t mlo_ap_lock;
846  #else
847  	qdf_mutex_t mlo_ap_lock;
848  #endif
849  	qdf_bitmap(mlo_vdev_quiet_bmap, WLAN_UMAC_MLO_MAX_VDEVS);
850  	qdf_bitmap(mlo_vdev_up_bmap, WLAN_UMAC_MLO_MAX_VDEVS);
851  	struct wlan_mlo_sta_assoc_pending_list assoc_list;
852  };
853  
854  /**
855   * struct wlan_mlo_peer_list - MLO peer list entry
856   * @peer_hash: MLO peer hash code
857   * @peer_list_lock: lock to access members of structure
858   */
859  struct wlan_mlo_peer_list {
860  	qdf_list_t peer_hash[WLAN_PEER_HASHSIZE];
861  #ifdef WLAN_MLO_USE_SPINLOCK
862  	qdf_spinlock_t peer_list_lock;
863  #else
864  	qdf_mutex_t peer_list_lock;
865  #endif
866  };
867  
868  /**
869   * struct mlo_vdev_link_mac_info - VDEV to link address map
870   * @vdev_id: Vdev Id with which this link mac address is associated:
871   * @link_mac_addr: link specific mac address
872   */
873  struct mlo_vdev_link_mac_info {
874  	uint8_t vdev_id;
875  	struct qdf_mac_addr link_mac_addr;
876  };
877  
878  /**
879   * struct wlan_mlo_link_mac_update: VDEV to link MAC address list
880   * @num_mac_update: Number of mac address
881   * @link_mac_info: Each VDEV to link mac address mapping
882   */
883  struct wlan_mlo_link_mac_update {
884  	int num_mac_update;
885  	struct mlo_vdev_link_mac_info link_mac_info[3];
886  };
887  
888  /**
889   * struct wlan_mlo_dev_context - MLO device context
890   * @node: QDF list node member
891   * @mld_id: MLD id
892   * @mld_addr: MLO device MAC address
893   * @wlan_vdev_list: list of vdevs associated with this MLO connection
894   * @wlan_bridge_vdev_list: list of bridge vdevs associated with this MLO
895   * @wlan_bridge_vdev_count: number of elements in the bridge vdev list
896   * @bridge_sta_ctx: bridge sta context
897   * @wlan_vdev_count: number of elements in the vdev list
898   * @mlo_peer_list: list peers in this MLO connection
899   * @wlan_max_mlo_peer_count: peer count across the links of specific MLO
900   * @mlo_dev_lock: lock to access struct
901   * @tsf_recalculation_lock: Lock to protect TSF (re)calculation
902   * @ref_cnt: reference count
903   * @ref_id_dbg: Reference count debug information
904   * @sta_ctx: MLO STA related information
905   * @ap_ctx: AP related information
906   * @t2lm_ctx: T2LM related information
907   * @epcs_ctx: EPCS related information
908   * @ptqm_migrate_timer: timer for ptqm migration
909   * @mlo_peer_id_bmap: mlo_peer_id bitmap for ptqm migration
910   * @link_ctx: link related information
911   * @mlo_max_recom_simult_links: Max Recommended Simultaneous Links
912   */
913  struct wlan_mlo_dev_context {
914  	qdf_list_node_t node;
915  	uint8_t mld_id;
916  	struct qdf_mac_addr mld_addr;
917  	struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS];
918  #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
919  	struct wlan_objmgr_vdev *wlan_bridge_vdev_list[WLAN_UMAC_MLO_MAX_BRIDGE_VDEVS];
920  	struct wlan_mlo_bridge_sta *bridge_sta_ctx;
921  #endif
922  	uint16_t wlan_vdev_count;
923  	uint16_t wlan_bridge_vdev_count;
924  	struct wlan_mlo_peer_list mlo_peer_list;
925  	uint16_t wlan_max_mlo_peer_count;
926  #ifdef WLAN_MLO_USE_SPINLOCK
927  	qdf_spinlock_t mlo_dev_lock;
928  	qdf_spinlock_t tsf_recalculation_lock;
929  #else
930  	qdf_mutex_t mlo_dev_lock;
931  	qdf_mutex_t tsf_recalculation_lock;
932  #endif
933  	qdf_atomic_t ref_cnt;
934  	qdf_atomic_t ref_id_dbg[WLAN_REF_ID_MAX];
935  	struct wlan_mlo_sta *sta_ctx;
936  	struct wlan_mlo_ap *ap_ctx;
937  	struct wlan_t2lm_context t2lm_ctx;
938  	struct wlan_epcs_context epcs_ctx;
939  #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
940  	qdf_timer_t ptqm_migrate_timer;
941  	qdf_bitmap(mlo_peer_id_bmap, MAX_MLO_PEER_ID);
942  #endif
943  	struct mlo_link_switch_context *link_ctx;
944  	uint8_t mlo_max_recom_simult_links;
945  };
946  
947  /**
948   * struct wlan_mlo_link_peer_entry - Link peer entry
949   * @link_peer: Object manager peer
950   * @link_addr: MAC address of link peer
951   * @link_ix: Link index
952   * @is_primary: sets true if the peer is primary UMAC’s peer
953   * @hw_link_id: HW Link id of peer
954   * @assoc_rsp_buf: Assoc resp buffer
955   * @peer_assoc_sent: flag to indicate peer assoc sent to FW
956   */
957  struct wlan_mlo_link_peer_entry {
958  	struct wlan_objmgr_peer *link_peer;
959  	struct qdf_mac_addr link_addr;
960  	uint8_t link_ix;
961  	bool is_primary;
962  	uint8_t hw_link_id;
963  	qdf_nbuf_t assoc_rsp_buf;
964  	bool peer_assoc_sent;
965  };
966  
967  /**
968   * enum mlo_peer_state - MLO peer state
969   * @ML_PEER_CREATED:     Initial state
970   * @ML_PEER_ASSOC_DONE:  ASSOC sent on assoc link
971   * @ML_PEER_DISCONN_INITIATED: Disconnect initiated on one of the links
972   */
973  enum mlo_peer_state {
974  	ML_PEER_CREATED,
975  	ML_PEER_ASSOC_DONE,
976  	ML_PEER_DISCONN_INITIATED,
977  };
978  
979  /**
980   * struct mlpeer_auth_params - Deferred Auth params
981   * @vdev_id:  VDEV ID
982   * @psoc_id:  PSOC ID
983   * @link_addr: MAC address
984   * @mldaddr: MLD MAC address
985   * @algo:  Auth algorithm
986   * @seq: Auth sequence number
987   * @status_code: Auth status
988   * @challenge: Auth Challenge
989   * @challenge_length: Auth Challenge length
990   * @wbuf:  Auth wbuf
991   * @rs: Rx stats
992   */
993  struct mlpeer_auth_params {
994  	uint8_t vdev_id;
995  	uint8_t psoc_id;
996  	struct qdf_mac_addr link_addr;
997  	struct qdf_mac_addr mldaddr;
998  	uint16_t algo;
999  	uint16_t seq;
1000  	uint16_t status_code;
1001  	uint8_t *challenge;
1002  	uint8_t challenge_length;
1003  	qdf_nbuf_t wbuf;
1004  	void *rs;
1005  };
1006  
1007  /**
1008   * struct wlan_mlo_eml_cap - EML capabilities of MLD
1009   * @emlsr_supp: eMLSR Support
1010   * @emlsr_pad_delay: eMLSR Padding Delay
1011   * @emlsr_trans_delay: eMLSR transition delay
1012   * @emlmr_supp: eMLMR Support
1013   * @emlmr_delay: eMLMR Delay
1014   * @trans_timeout: Transition Timeout
1015   * @reserved: Reserved
1016   */
1017  struct wlan_mlo_eml_cap {
1018  	uint16_t emlsr_supp:1,
1019  		 emlsr_pad_delay:3,
1020  		 emlsr_trans_delay:3,
1021  		 emlmr_supp:1,
1022  		 emlmr_delay:3,
1023  		 trans_timeout:4,
1024  		 reserved:1;
1025  };
1026  
1027  /**
1028   * struct wlan_mlo_msd_cap - MSD capabilities of MLD
1029   * @medium_sync_duration: Medium Sync Duration
1030   * @medium_sync_ofdm_ed_thresh: MSD threshold value
1031   * @medium_sync_max_txop_num: Max number of TXOP
1032   */
1033  struct wlan_mlo_msd_cap {
1034  	uint16_t medium_sync_duration:8,
1035  		 medium_sync_ofdm_ed_thresh:4,
1036  		 medium_sync_max_txop_num:4;
1037  };
1038  
1039  /**
1040   * struct wlan_mlo_mld_cap - MLD capabilities of MLD
1041   * @max_simult_link: Maximum number of simultaneous links
1042   * @srs_support: SRS support
1043   * @tid2link_neg_support: TID to Link Negotiation Support
1044   * @str_freq_sep: Frequency separation suggested by STR non-AP MLD
1045   *                OR Type of AP-MLD
1046   * @aar_support: AAR Support
1047   * @reserved: Reserved
1048   */
1049  struct wlan_mlo_mld_cap {
1050  	uint16_t max_simult_link:4,
1051  		 srs_support:1,
1052  		 tid2link_neg_support:2,
1053  		 str_freq_sep:5,
1054  		 aar_support:1,
1055  		 reserved:3;
1056  };
1057  
1058  /**
1059   * struct wlan_mlo_peer_context - MLO peer context
1060   *
1061   * @peer_node:     peer list node for ml_dev qdf list
1062   * @peer_list: list of peers on the MLO link
1063   * @link_peer_cnt: Number of link peers attached
1064   * @max_links: Max links for this ML peer
1065   * @link_asresp_cnt: Number of reassoc resp generated
1066   * @mlo_peer_id: unique ID for the peer
1067   * @peer_mld_addr: MAC address of MLD link
1068   * @mlo_ie: MLO IE struct
1069   * @mlo_peer_lock: lock to access peer structure
1070   * @assoc_id: Assoc ID derived by MLO manager
1071   * @primary_umac_psoc_id:
1072   * @ref_cnt: Reference counter to avoid use after free
1073   * @ml_dev: MLO dev context
1074   * @mlpeer_state: MLO peer state
1075   * @avg_link_rssi: avg RSSI of ML peer
1076   * @is_nawds_ml_peer: flag to indicate if ml_peer is NAWDS configured
1077   * @nawds_config: eack link peer's NAWDS configuration
1078   * @pending_auth: Holds pending auth request
1079   * @t2lm_policy: TID-to-link mapping information
1080   * @epcs_info: EPCS information
1081   * @msd_cap_present: Medium Sync Capability present bit
1082   * @mlpeer_emlcap: EML capability information for ML peer
1083   * @mlpeer_msdcap: Medium Sync Delay capability information for ML peer
1084   * @is_mesh_ml_peer: flag to indicate if ml_peer is MESH configured
1085   * @mesh_config: eack link peer's MESH configuration
1086   * @mlpeer_mldcap: MLD Capability information for ML peer
1087   * @mlpeer_nstrinfo: NSTR Capability info
1088   * @migrate_primary_umac_psoc_id: primary umac psoc id selected for umac
1089   * migration
1090   * @primary_umac_migration_in_progress: flag to indicate primary umac migration
1091   * in progress
1092   */
1093  struct wlan_mlo_peer_context {
1094  	qdf_list_node_t peer_node;
1095  	struct wlan_mlo_link_peer_entry peer_list[MAX_MLO_LINK_PEERS];
1096  	uint8_t link_peer_cnt;
1097  	uint8_t max_links;
1098  	uint8_t link_asresp_cnt;
1099  	uint32_t mlo_peer_id;
1100  	struct qdf_mac_addr peer_mld_addr;
1101  	uint8_t *mlo_ie;
1102  #ifdef WLAN_MLO_USE_SPINLOCK
1103  	qdf_spinlock_t mlo_peer_lock;
1104  #else
1105  	qdf_mutex_t mlo_peer_lock;
1106  #endif
1107  	uint16_t assoc_id;
1108  	uint8_t primary_umac_psoc_id;
1109  	qdf_atomic_t ref_cnt;
1110  	struct wlan_mlo_dev_context *ml_dev;
1111  	enum mlo_peer_state mlpeer_state;
1112  	int8_t avg_link_rssi;
1113  #ifdef UMAC_SUPPORT_MLNAWDS
1114  	bool is_nawds_ml_peer;
1115  	struct mlnawds_config nawds_config[MAX_MLO_LINK_PEERS];
1116  #endif
1117  #ifdef UMAC_MLO_AUTH_DEFER
1118  	struct mlpeer_auth_params *pending_auth[MAX_MLO_LINK_PEERS];
1119  #endif
1120  #ifdef WLAN_FEATURE_11BE
1121  	struct wlan_mlo_peer_t2lm_policy t2lm_policy;
1122  	struct wlan_mlo_peer_epcs_info epcs_info;
1123  #endif
1124  	bool msd_cap_present;
1125  	struct wlan_mlo_eml_cap mlpeer_emlcap;
1126  	struct wlan_mlo_msd_cap mlpeer_msdcap;
1127  #ifdef MESH_MODE_SUPPORT
1128  	bool is_mesh_ml_peer;
1129  	struct mlnawds_config mesh_config[MAX_MLO_LINK_PEERS];
1130  #endif
1131  	struct wlan_mlo_mld_cap mlpeer_mldcap;
1132  	struct mlo_nstr_info mlpeer_nstrinfo[WLAN_UMAC_MLO_MAX_VDEVS];
1133  	uint8_t migrate_primary_umac_psoc_id;
1134  	bool primary_umac_migration_in_progress;
1135  };
1136  
1137  /**
1138   * struct mlo_probereq_info - mlo probe req link info
1139   * @mlid: MLID requested in the probe req
1140   * @num_links: no. of link info in probe req
1141   * @link_id: target link id of APs
1142   * @is_mld_id_valid: Indicates if mld_id is valid for a given request
1143   * @skip_mbssid: Skip mbssid IE
1144   */
1145  struct mlo_probereq_info {
1146  	uint8_t mlid;
1147  	uint8_t num_links;
1148  	uint8_t link_id[WLAN_UMAC_MLO_MAX_VDEVS];
1149  	bool is_mld_id_valid;
1150  	bool skip_mbssid;
1151  };
1152  
1153  /**
1154   * struct ml_rv_partner_link_info: Partner link information of an ML reconfig IE
1155   * @link_id: Link id advertised by the AP
1156   * @link_mac_addr: Link mac address
1157   * @is_ap_removal_timer_p: AP removal timer is present or not
1158   * @ap_removal_timer: number of TBTTs of the AP removal timer
1159   */
1160  struct ml_rv_partner_link_info {
1161  	uint8_t link_id;
1162  	struct qdf_mac_addr link_mac_addr;
1163  	uint8_t is_ap_removal_timer_p;
1164  	uint16_t ap_removal_timer;
1165  };
1166  
1167  /**
1168   * struct ml_rv_info: Reconfig Multi link information of a 11be beacon
1169   * @mld_mac_addr: MLD mac address
1170   * @num_links: Number of links supported by ML AP
1171   * @link_info: Array containing partner links information
1172   */
1173  struct ml_rv_info {
1174  	struct qdf_mac_addr mld_mac_addr;
1175  	uint8_t num_links;
1176  	struct ml_rv_partner_link_info link_info[WLAN_UMAC_MLO_MAX_VDEVS];
1177  };
1178  
1179  /**
1180   * struct mlo_tgt_link_info - ML target link info
1181   * @vdev_id: link peer vdev id
1182   * @hw_mld_link_id: HW link id
1183   * @mlo_enabled: indicate is MLO enabled
1184   * @mlo_assoc_link: indicate is the link used to initialize the association
1185   *                  of mlo connection
1186   * @mlo_primary_umac: indicate is the link on primary UMAC, WIN only flag
1187   * @mlo_logical_link_index_valid: indicate if the logial link index in is valid
1188   * @mlo_peer_id_valid: indicate if the mlo peer id is valid
1189   * @mlo_force_link_inactive: force the peer inactive
1190   * @emlsr_support: indicate if eMLSR supported
1191   * @emlmr_support: indicate if eMLMR supported
1192   * @msd_cap_support: indicate if MSD supported
1193   * @mlo_bridge_peer: indicate if it is bridge peer
1194   * @unused: spare bits
1195   * @logical_link_index: Unique index for links of the mlo. Starts with Zero
1196   */
1197  struct mlo_tgt_link_info {
1198  	uint8_t vdev_id;
1199  	uint8_t hw_mld_link_id;
1200  	uint32_t mlo_enabled:1,
1201  		 mlo_assoc_link:1,
1202  		 mlo_primary_umac:1,
1203  		 mlo_logical_link_index_valid:1,
1204  		 mlo_peer_id_valid:1,
1205  		 mlo_force_link_inactive:1,
1206  		 emlsr_support:1,
1207  		 emlmr_support:1,
1208  		 msd_cap_support:1,
1209  		 mlo_bridge_peer:1,
1210  		 unused:22;
1211  	uint32_t logical_link_index;
1212  
1213  };
1214  
1215  /**
1216   * struct mlo_tgt_partner_info - mlo target partner link info
1217   * @num_partner_links: no. of partner links
1218   * @link_info: per partner link info
1219   */
1220  struct mlo_tgt_partner_info {
1221  	uint8_t num_partner_links;
1222  	struct mlo_tgt_link_info link_info[WLAN_UMAC_MLO_MAX_VDEVS];
1223  };
1224  
1225  /**
1226   * struct wlan_mlo_bridge_sta - MLO bridge sta context
1227   * @bridge_partners: mlo_partner_info of partners of a bridge
1228   * @bridge_ml_links: mlo_tgt_partner_info of partners of bridge
1229   * @bridge_umac_id: umac id for bridge
1230   * @bridge_link_id: link id used by bridge vdev
1231   * @is_force_central_primary: Flag to tell if bridge should be primary umac
1232   * @bridge_vap_exists: If there is bridge vap
1233   * @bridge_node_auth: Is bridge node auth done
1234   * @bss_mld_addr: MLD address of the BSS
1235   */
1236  struct wlan_mlo_bridge_sta {
1237  	struct mlo_partner_info bridge_partners;
1238  	struct mlo_tgt_partner_info bridge_ml_links;
1239  	uint8_t bridge_umac_id;
1240  	uint8_t bridge_link_id;
1241  	bool is_force_central_primary;
1242  	bool bridge_vap_exists;
1243  	bool bridge_node_auth;
1244  	struct qdf_mac_addr bss_mld_addr;
1245  };
1246  
1247  /**
1248   * struct mlo_mlme_ext_ops - MLME callback functions
1249   * @mlo_mlme_ext_validate_conn_req: Callback to validate connect request
1250   * @mlo_mlme_ext_create_link_vdev: Callback to create link vdev for ML STA
1251   * @mlo_mlme_ext_peer_create: Callback to create link peer
1252   * @mlo_mlme_ext_bridge_peer_create: Callback to create bridge peer
1253   * @mlo_mlme_ext_peer_assoc: Callback to initiate peer assoc
1254   * @mlo_mlme_ext_peer_assoc_fail: Callback to notify peer assoc failure
1255   * @mlo_mlme_ext_peer_delete: Callback to initiate link peer delete
1256   * @mlo_mlme_ext_assoc_resp: Callback to initiate assoc resp
1257   * @mlo_mlme_get_link_assoc_req: Callback to get link assoc req buffer
1258   * @mlo_mlme_ext_deauth: Callback to initiate deauth
1259   * @mlo_mlme_ext_clone_security_param: Callback to clone mlo security params
1260   * @mlo_mlme_ext_peer_process_auth: Callback to process pending auth
1261   * @mlo_mlme_ext_handle_sta_csa_param: Callback to handle sta csa param
1262   * @mlo_mlme_ext_sta_op_class:
1263   * @mlo_mlme_ext_peer_reassoc: Callback to process reassoc
1264   */
1265  struct mlo_mlme_ext_ops {
1266  	QDF_STATUS (*mlo_mlme_ext_validate_conn_req)(
1267  		    struct vdev_mlme_obj *vdev_mlme, void *ext_data);
1268  	QDF_STATUS (*mlo_mlme_ext_create_link_vdev)(
1269  		    struct vdev_mlme_obj *vdev_mlme, void *ext_data);
1270  	QDF_STATUS (*mlo_mlme_ext_peer_create)(struct wlan_objmgr_vdev *vdev,
1271  					struct wlan_mlo_peer_context *ml_peer,
1272  					struct qdf_mac_addr *addr,
1273  					qdf_nbuf_t frm_buf);
1274  	QDF_STATUS (*mlo_mlme_ext_bridge_peer_create)(struct wlan_objmgr_vdev *vdev,
1275  					struct wlan_mlo_peer_context *ml_peer,
1276  					struct qdf_mac_addr *addr,
1277  					qdf_nbuf_t frm_buf);
1278  	void (*mlo_mlme_ext_peer_assoc)(struct wlan_objmgr_peer *peer);
1279  	void (*mlo_mlme_ext_peer_assoc_fail)(struct wlan_objmgr_peer *peer);
1280  	void (*mlo_mlme_ext_peer_delete)(struct wlan_objmgr_peer *peer);
1281  	void (*mlo_mlme_ext_assoc_resp)(struct wlan_objmgr_peer *peer);
1282  	qdf_nbuf_t (*mlo_mlme_get_link_assoc_req)(struct wlan_objmgr_peer *peer,
1283  						  uint8_t link_ix);
1284  	void (*mlo_mlme_ext_deauth)(struct wlan_objmgr_peer *peer,
1285  				    uint8_t is_disassoc);
1286  	QDF_STATUS (*mlo_mlme_ext_clone_security_param)(
1287  		    struct vdev_mlme_obj *vdev_mlme,
1288  		    struct wlan_cm_connect_req *req);
1289  #ifdef UMAC_MLO_AUTH_DEFER
1290  	void (*mlo_mlme_ext_peer_process_auth)(
1291  	      struct mlpeer_auth_params *auth_param);
1292  #endif
1293  	void (*mlo_mlme_ext_handle_sta_csa_param)(
1294  				struct wlan_objmgr_vdev *vdev,
1295  				struct csa_offload_params *csa_param);
1296  	QDF_STATUS (*mlo_mlme_ext_sta_op_class)(
1297  			struct vdev_mlme_obj *vdev_mlme,
1298  			uint8_t *ml_ie);
1299  	QDF_STATUS (*mlo_mlme_ext_peer_reassoc)(struct wlan_objmgr_vdev *vdev,
1300  					struct wlan_mlo_peer_context *ml_peer,
1301  					struct qdf_mac_addr *addr,
1302  					qdf_nbuf_t frm_buf);
1303  };
1304  
1305  /*
1306   * struct mlo_osif_ext_ops - MLO manager to OSIF callback functions
1307   * @mlo_mgr_osif_update_bss_info: Callback to update each link connection info.
1308   * @mlo_mgr_osif_update_mac_addr: Callback to notify MAC addr update complete
1309   *                                from old link id to new link id for the vdev.
1310   * @mlo_mgr_osif_link_switch_notification: Notify OSIF on start of link switch
1311   */
1312  struct mlo_osif_ext_ops {
1313  	QDF_STATUS
1314  	(*mlo_mgr_osif_update_bss_info)(struct qdf_mac_addr *self_mac,
1315  					struct qdf_mac_addr *bssid,
1316  					int32_t link_id);
1317  
1318  	QDF_STATUS (*mlo_mgr_osif_update_mac_addr)(int32_t ieee_old_link_id,
1319  						   int32_t ieee_new_link_id,
1320  						   uint8_t vdev_id);
1321  
1322  	QDF_STATUS
1323  	(*mlo_mgr_osif_link_switch_notification)(struct wlan_objmgr_vdev *vdev,
1324  						 uint8_t non_trans_vdev_id);
1325  };
1326  
1327  /* maximum size of vdev bitmap array for MLO link set active command */
1328  #define MLO_VDEV_BITMAP_SZ 2
1329  
1330  /* maximum size of link number param array for MLO link set active command */
1331  #define MLO_LINK_NUM_SZ 2
1332  
1333  /**
1334   * struct mlo_link_set_active_resp: MLO link set active response structure
1335   * @status: Return status, 0 for success, non-zero otherwise
1336   * @evt_handled: response event is handled
1337   * @active_sz: size of current active vdev bitmap array
1338   * @active: current active vdev bitmap array
1339   * @inactive_sz: size of current inactive vdev bitmap array
1340   * @inactive: current inactive vdev bitmap array
1341   * @use_ieee_link_id: link id is valid in active_linkid_bitmap or
1342   *	inactive_linkid_bitmap
1343   * @ap_mld_mac_addr: AP MLD mac address
1344   * @active_linkid_bitmap: current forced active link id bitmap
1345   * @inactive_linkid_bitmap: current forced inactive link id bitmap
1346   * @curr_inactive_linkid_bitmap: current inactive link id bitmap
1347   * @curr_active_linkid_bitmap: current active link id bitmap
1348   */
1349  struct mlo_link_set_active_resp {
1350  	uint32_t status;
1351  	bool evt_handled;
1352  	uint32_t active_sz;
1353  	uint32_t active[MLO_VDEV_BITMAP_SZ];
1354  	uint32_t inactive_sz;
1355  	uint32_t inactive[MLO_VDEV_BITMAP_SZ];
1356  	bool use_ieee_link_id;
1357  	struct qdf_mac_addr  ap_mld_mac_addr;
1358  	uint32_t active_linkid_bitmap;
1359  	uint32_t inactive_linkid_bitmap;
1360  	uint32_t curr_inactive_linkid_bitmap;
1361  	uint32_t curr_active_linkid_bitmap;
1362  };
1363  
1364  /**
1365   * struct mlo_link_num_param: MLO link set active number params
1366   * @num_of_link: number of links to active/inactive
1367   * @vdev_type: type of vdev
1368   * @vdev_subtype: subtype of vdev
1369   * @home_freq: home frequency of the link
1370   */
1371  struct mlo_link_num_param {
1372  	uint32_t num_of_link;
1373  	uint32_t vdev_type;
1374  	uint32_t vdev_subtype;
1375  	uint32_t home_freq;
1376  };
1377  
1378  /*
1379   * struct mlo_control_flags: This structure is used for setting
1380   * wmi_mlo_control_flags.
1381   * @overwrite_force_active_bitmap: indicate overwrite all earlier force_active
1382   * bitmaps
1383   * @overwrite_force_inactive_bitmap: indicate overwrite all earlier
1384   * force_inactive bitmaps
1385   * @dynamic_force_link_num: indicate fw to use force link number instead of
1386   * force link bitmaps
1387   * @post_re_evaluate: run link state check again after command response event
1388   * handled
1389   */
1390  struct mlo_control_flags {
1391  	bool overwrite_force_active_bitmap;
1392  	bool overwrite_force_inactive_bitmap;
1393  	bool dynamic_force_link_num;
1394  	bool post_re_evaluate;
1395  };
1396  
1397  /* struct ml_link_force_cmd - force command for links
1398   * @ap_mld_mac_addr: AP mld mac address
1399   * @ieee_link_id_bitmap: link id bitmap
1400   * valid for WMI_MLO_LINK_FORCE_ACTIVE, WMI_MLO_LINK_FORCE_INACTIVE,
1401   * WMI_MLO_LINK_NO_FORCE, WMI_MLO_LINK_FORCE_ACTIVE_LINK_NUM,
1402   * WMI_MLO_LINK_FORCE_INACTIVE_LINK_NUM.
1403   * @ieee_link_id_bitmap2: link id bitmap, only valid for
1404   * WMI_MLO_LINK_FORCE_ACTIVE_INACTIVE carry the inactive linkid bitmap
1405   * @link_num: link num
1406   * only valid on WMI_MLO_LINK_FORCE_ACTIVE_LINK_NUM or
1407   * WMI_MLO_LINK_FORCE_INACTIVE_LINK_NUM
1408   */
1409  struct ml_link_force_cmd {
1410  	struct qdf_mac_addr ap_mld_mac_addr;
1411  	uint16_t ieee_link_id_bitmap;
1412  	uint16_t ieee_link_id_bitmap2;
1413  	uint8_t link_num;
1414  };
1415  
1416  /**
1417   * struct mlo_link_set_active_param: MLO link set active params
1418   * @force_mode: operation to take (enum mlo_link_force_mode)
1419   * @reason: reason for the operation (enum mlo_link_force_reason)
1420   * @num_link_entry: number of the valid entries for link_num
1421   * @num_vdev_bitmap: number of the valid entries for vdev_bitmap
1422   * @num_inactive_vdev_bitmap: number of the valid entries for
1423   *  inactive_vdev_bitmap
1424   * @link_num: link number param array
1425   *  It's present only when force_mode is MLO_LINK_FORCE_MODE_ACTIVE_NUM or
1426   *  MLO_LINK_FORCE_MODE_INACTIVE_NUM
1427   * @vdev_bitmap: active/inactive vdev bitmap array
1428   *  It will be present when force_mode is MLO_LINK_FORCE_MODE_ACTIVE,
1429   *  MLO_LINK_FORCE_MODE_INACTIVE, MLO_LINK_FORCE_MODE_NO_FORCE,
1430   *  MLO_LINK_FORCE_MODE_ACTIVE_NUM or MLO_LINK_FORCE_MODE_INACTIVE_NUM,
1431   *  and MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE.
1432   *  For MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE, it includes the active vdev
1433   *  bitmaps
1434   * @inactive_vdev_bitmap: inactive vdev bitmap array
1435   *  It will be present when force_mode is MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE,
1436   *  it includes the inactive vdev bitmaps
1437   * @control_flags: This structure is used for setting wmi_mlo_control_flags.
1438   * @use_ieee_link_id: send link id bitmap to target.
1439   *  If this value is true, the "force_cmd" field should be provided and
1440   *  that will be sent to target
1441   * @force_cmd: force command which includes link id bitmap
1442   */
1443  struct mlo_link_set_active_param {
1444  	uint32_t force_mode;
1445  	uint32_t reason;
1446  	uint32_t num_link_entry;
1447  	uint32_t num_vdev_bitmap;
1448  	uint32_t num_inactive_vdev_bitmap;
1449  	struct mlo_link_num_param link_num[MLO_LINK_NUM_SZ];
1450  	uint32_t vdev_bitmap[MLO_VDEV_BITMAP_SZ];
1451  	uint32_t inactive_vdev_bitmap[MLO_VDEV_BITMAP_SZ];
1452  	struct mlo_control_flags control_flags;
1453  	bool use_ieee_link_id;
1454  	struct ml_link_force_cmd force_cmd;
1455  };
1456  
1457  /**
1458   * struct mlo_link_set_active_ctx - Context for MLO link set active request
1459   * @vdev: pointer to vdev on which the request issued
1460   * @set_mlo_link_cb: callback function for MLO link set active request
1461   * @validate_set_mlo_link_cb: callback to validate set link request
1462   * @cb_arg: callback context
1463   */
1464  struct mlo_link_set_active_ctx {
1465  	struct wlan_objmgr_vdev *vdev;
1466  	void (*set_mlo_link_cb)(struct wlan_objmgr_vdev *vdev, void *arg,
1467  				struct mlo_link_set_active_resp *evt);
1468  	QDF_STATUS (*validate_set_mlo_link_cb)(
1469  			struct wlan_objmgr_psoc *psoc,
1470  			struct mlo_link_set_active_param *param);
1471  	void *cb_arg;
1472  };
1473  
1474  /**
1475   * struct mlo_link_set_active_req - MLO link set active request
1476   * @ctx: context for MLO link set active request
1477   * @param: MLO link set active params
1478   */
1479  struct mlo_link_set_active_req {
1480  	struct mlo_link_set_active_ctx ctx;
1481  	struct mlo_link_set_active_param param;
1482  };
1483  
1484  /**
1485   * enum mlo_chip_recovery_type - MLO chip recovery types
1486   * @MLO_RECOVERY_MODE_0: CRASH_PARTNER_CHIPS & recover all chips
1487   * @MLO_RECOVERY_MODE_1: Crash & recover asserted chip alone
1488   * @MLO_RECOVERY_MODE_MAX: Max limit for recovery types
1489   */
1490  enum mlo_chip_recovery_type {
1491  	MLO_RECOVERY_MODE_0 = 1,
1492  	MLO_RECOVERY_MODE_1 = 2,
1493  
1494  	/* Add new types above */
1495  	MLO_RECOVERY_MODE_MAX = 0xf
1496  };
1497  
1498  /**
1499   * enum wlan_t2lm_status - Target status codes in event of t2lm
1500   * @WLAN_MAP_SWITCH_TIMER_TSF: Mapping switch time value in TSF to be included
1501   * in probe response frames
1502   * @WLAN_MAP_SWITCH_TIMER_EXPIRED: Indication that the new proposed T2LM has
1503   * been applied, Update the required data structures and other modules.
1504   * @WLAN_EXPECTED_DUR_EXPIRED: Indication that the proposed T2LM ineffective
1505   * after this duration and all TIDs fall back to default mode.
1506   */
1507  enum wlan_t2lm_status {
1508  	WLAN_MAP_SWITCH_TIMER_TSF,
1509  	WLAN_MAP_SWITCH_TIMER_EXPIRED,
1510  	WLAN_EXPECTED_DUR_EXPIRED,
1511  };
1512  
1513  /**
1514   * struct mlo_vdev_host_tid_to_link_map_resp - TID-to-link mapping response
1515   * @vdev_id: Vdev id
1516   * @status: Target status for t2lm ie info
1517   * @mapping_switch_tsf: Mapping switch time in tsf for probe response frames
1518   */
1519  struct mlo_vdev_host_tid_to_link_map_resp {
1520  	uint8_t vdev_id;
1521  	enum wlan_t2lm_status status;
1522  	uint32_t mapping_switch_tsf;
1523  };
1524  
1525  /**
1526   * struct mlo_link_removal_cmd_params - MLO link removal command parameters
1527   * @vdev_id: vdev ID of the link to be removed
1528   * @reconfig_ml_ie: Entire ML reconfiguration element
1529   * @reconfig_ml_ie_size: size of the field @reconfig_ml_ie
1530   */
1531  struct mlo_link_removal_cmd_params {
1532  	uint8_t vdev_id;
1533  	uint8_t *reconfig_ml_ie;
1534  	uint32_t reconfig_ml_ie_size;
1535  };
1536  
1537  /**
1538   * struct mlo_link_removal_tbtt_info - MLO link removal TBTT info. This
1539   * information will be in correspondence with an outgoing beacon instance.
1540   * @tbtt_count: AP removal timer TBTT count in the reported beacon
1541   * @qtimer_reading: Q-timer reading when the reported beacon is sent out
1542   * @tsf: TSF of the reported beacon
1543   */
1544  struct mlo_link_removal_tbtt_info {
1545  	uint32_t tbtt_count;
1546  	uint64_t qtimer_reading;
1547  	uint64_t tsf;
1548  };
1549  
1550  /**
1551   * struct mlo_link_removal_evt_params - MLO link removal event parameters
1552   * @vdev_id: vdev ID of the link undergoing removal
1553   * @tbtt_info: TBTT information of the link undergoing removal
1554   */
1555  struct mlo_link_removal_evt_params {
1556  	uint8_t vdev_id;
1557  	struct mlo_link_removal_tbtt_info tbtt_info;
1558  };
1559  
1560  /**
1561   * struct mgmt_rx_mlo_link_removal_info - Information, sent in MGMT Rx event, of
1562   * a link undergoing removal from its MLD
1563   * @vdev_id: Vdev ID of the link undergoing removal
1564   * @hw_link_id: HW link ID of the link undergoing removal
1565   * @tbtt_count: AP removal timer TBTT count of the link undergoing removal
1566   */
1567  struct mgmt_rx_mlo_link_removal_info {
1568  	uint8_t vdev_id;
1569  	uint8_t hw_link_id;
1570  	uint16_t tbtt_count;
1571  };
1572  
1573  /**
1574   * struct mlo_link_disable_request_evt_params - MLO link disable
1575   * request params
1576   * @mld_addr: disable mld address
1577   * @link_id_bitmap: Disable Link id bitmap
1578   */
1579  struct mlo_link_disable_request_evt_params {
1580  	struct qdf_mac_addr mld_addr;
1581  	uint32_t link_id_bitmap;
1582  };
1583  
1584  #define MAX_LINK_SWITCH_TLV 5
1585  /**
1586   * struct mlo_link_switch_params - Structure to hold link State switch
1587   * related parameters
1588   * @mld_addr: MLD address
1589   * @active_link_bitmap: Bitmap of ieee link id for active links
1590   * @prev_link_bitmap: Bitmap of ieee link id for previous active links
1591   * @fw_timestamp: Firmware timestamp in milliseconds
1592   * @reason_code: Reason code for the switch
1593   */
1594  struct mlo_link_switch_params {
1595  	struct qdf_mac_addr mld_addr;
1596  	uint32_t active_link_bitmap;
1597  	uint32_t prev_link_bitmap;
1598  	uint32_t fw_timestamp;
1599  	uint32_t reason_code;
1600  };
1601  
1602  /**
1603   * struct mlo_link_switch_state_info  - Structure to hold the link switch
1604   * related parameters corresponding to all the TLV received in link state switch
1605   * event.
1606   * @num_params: Number of the link switch parameters
1607   * @link_switch_param: Link switch parameters
1608   */
1609  struct mlo_link_switch_state_info {
1610  	uint8_t num_params;
1611  	struct mlo_link_switch_params link_switch_param[MAX_LINK_SWITCH_TLV];
1612  };
1613  
1614  #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
1615  /**
1616   * struct peer_ptqm_migrate_entry - peer ptqm migrate entry
1617   * @ml_peer_id: ML peer id
1618   * @hw_link_id: HW link id
1619   */
1620  struct peer_ptqm_migrate_entry {
1621  	uint16_t ml_peer_id;
1622  	uint16_t hw_link_id;
1623  };
1624  
1625  /**
1626   * struct peer_ptqm_migrate_params - peer ptqm migrate request parameter
1627   * @vdev_id: vdev id
1628   * @num_peers: peer count
1629   * @num_peers_failed: number of peers for which wmi cmd is failed.
1630   * This value is expected to be used only in case failure is returned by WMI
1631   * @peer_list: list of peers to be migrated
1632   */
1633  struct peer_ptqm_migrate_params {
1634  	uint8_t vdev_id;
1635  	uint16_t num_peers;
1636  	uint16_t num_peers_failed;
1637  	struct peer_ptqm_migrate_entry *peer_list;
1638  };
1639  
1640  /**
1641   * struct peer_ptqm_migrate_list_entry - peer ptqm migrate list
1642   * @node: QDF list node member
1643   * @peer: objmgr peer object
1644   * @mlo_peer_id: mlo peer id
1645   * @new_hw_link_id: hw link id of new primary
1646   */
1647  struct peer_ptqm_migrate_list_entry {
1648  	qdf_list_node_t node;
1649  	struct wlan_objmgr_peer *peer;
1650  	uint32_t mlo_peer_id;
1651  	uint8_t new_hw_link_id;
1652  };
1653  
1654  /**
1655   * struct peer_migrate_ptqm_multi_entries - multi ptqm migrate peer entry params
1656   * @num_entries: Number of entries in the peer_list list
1657   * @peer_list: List to hold the peer entries to be migrated
1658   *
1659   */
1660  struct peer_migrate_ptqm_multi_entries {
1661  	uint16_t num_entries;
1662  	qdf_list_t peer_list;
1663  };
1664  
1665  enum primary_link_peer_migration_evenr_status {
1666  	PRIMARY_LINK_PEER_MIGRATION_SUCCESS,
1667  	PRIMARY_LINK_PEER_MIGRATION_IN_PROGRESS,
1668  	PRIMARY_LINK_PEER_MIGRATION_DELETE_IN_PROGRESS,
1669  	PRIMARY_LINK_PEER_MIGRATION_DELETED,
1670  	PRIMARY_LINK_PEER_MIGRATION_TX_PIPES_FAILED,
1671  	PRIMARY_LINK_PEER_MIGRATION_RX_PIPES_FAILED,
1672  
1673  	/* Add any new status above this line */
1674  	PRIMARY_LINK_PEER_MIGRATION_FAIL = 255,
1675  };
1676  
1677  /**
1678   * struct peer_ptqm_migrate_event_params - peer ptqm migrate event parameter
1679   * @vdev_id: vdev id
1680   * @num_peers: peer count
1681   */
1682  struct peer_ptqm_migrate_event_params {
1683  	uint8_t vdev_id;
1684  	uint16_t num_peers;
1685  };
1686  
1687  /**
1688   * struct peer_entry_ptqm_migrate_event_params - peer entry ptqm migrate
1689   * event parameter
1690   * @ml_peer_id: ML peer id
1691   * @status: migration status
1692   */
1693  struct peer_entry_ptqm_migrate_event_params {
1694  	uint16_t ml_peer_id;
1695  	enum primary_link_peer_migration_evenr_status status;
1696  };
1697  #endif /* QCA_SUPPORT_PRIMARY_LINK_MIGRATE */
1698  
1699  /**
1700   * struct wlan_mlo_sta_entry - MLO sta entry
1701   * @mac_node: QDF list mac_node member
1702   * @peer_mld_addr: MLO peer MAC address
1703   */
1704  
1705  struct wlan_mlo_sta_entry {
1706  	qdf_list_node_t mac_node;
1707  	struct qdf_mac_addr peer_mld_addr;
1708  };
1709  
1710  #endif
1711