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