xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_link_switch.h (revision 689990d5df106ae79275687b40b8144dd8fee6ff)
1 /*
2  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /*
18  * DOC: contains MLO manager public file containing link switch functionality
19  */
20 #ifndef _WLAN_MLO_MGR_LINK_SWITCH_H_
21 #define _WLAN_MLO_MGR_LINK_SWITCH_H_
22 
23 #include <wlan_mlo_mgr_public_structs.h>
24 
25 struct wlan_channel;
26 
27 #define WLAN_MLO_LSWITCH_MAX_HISTORY 5
28 #ifndef WLAN_MAX_ML_BSS_LINKS
29 #define WLAN_MAX_ML_BSS_LINKS 1
30 #endif
31 
32 /**
33  * enum wlan_mlo_link_switch_cnf_reason: Link Switch reject reason
34  *
35  * @MLO_LINK_SWITCH_CNF_REASON_BSS_PARAMS_CHANGED: Link's BSS params changed
36  * @MLO_LINK_SWITCH_CNF_REASON_CONCURRECNY_CONFLICT: Rejected because of
37  * Concurrency
38  * @MLO_LINK_SWITCH_CNF_REASON_HOST_INTERNAL_ERROR: Host internal error
39  * @MLO_LINK_SWITCH_CNF_REASON_MAX: Maximum reason for link switch rejection
40  */
41 enum wlan_mlo_link_switch_cnf_reason {
42 	MLO_LINK_SWITCH_CNF_REASON_BSS_PARAMS_CHANGED = 1,
43 	MLO_LINK_SWITCH_CNF_REASON_CONCURRECNY_CONFLICT = 2,
44 	MLO_LINK_SWITCH_CNF_REASON_HOST_INTERNAL_ERROR = 3,
45 	MLO_LINK_SWITCH_CNF_REASON_MAX,
46 };
47 
48 /**
49  * enum wlan_mlo_link_switch_cnf_status: Link Switch Confirmation status
50  *
51  * @MLO_LINK_SWITCH_CNF_STATUS_ACCEPT: Link switch accepted
52  * @MLO_LINK_SWITCH_CNF_STATUS_REJECT: Rejected because link switch cnf reason
53  * @MLO_LINK_SWITCH_CNF_STATUS_MAX: Maximum reason for link status
54  */
55 enum wlan_mlo_link_switch_cnf_status {
56 	MLO_LINK_SWITCH_CNF_STATUS_ACCEPT = 0,
57 	MLO_LINK_SWITCH_CNF_STATUS_REJECT = 1,
58 	MLO_LINK_SWITCH_CNF_STATUS_MAX,
59 };
60 
61 /**
62  * struct wlan_mlo_link_switch_cnf: structure to hold link switch conf info
63  *
64  * @vdev_id: VDEV ID of link switch link
65  * @status: Link Switch Confirmation status
66  * @reason: Link Switch Reject reason
67  */
68 struct wlan_mlo_link_switch_cnf {
69 	uint32_t vdev_id;
70 	enum wlan_mlo_link_switch_cnf_status status;
71 	enum wlan_mlo_link_switch_cnf_reason reason;
72 };
73 
74 /**
75  * enum wlan_mlo_link_switch_reason- Reason for link switch
76  *
77  * @MLO_LINK_SWITCH_REASON_RSSI_CHANGE: Link switch reason is because of RSSI
78  * @MLO_LINK_SWITCH_REASON_LOW_QUALITY: Link switch reason is because of low
79  * quality
80  * @MLO_LINK_SWITCH_REASON_C2_CHANGE: Link switch reason is because of C2 Metric
81  * @MLO_LINK_SWITCH_REASON_HOST_FORCE: Link switch reason is because of host
82  * force active/inactive
83  * @MLO_LINK_SWITCH_REASON_T2LM: Link switch reason is because of T2LM
84  * @MLO_LINK_SWITCH_REASON_MAX: Link switch reason max
85  */
86 enum wlan_mlo_link_switch_reason {
87 	MLO_LINK_SWITCH_REASON_RSSI_CHANGE = 1,
88 	MLO_LINK_SWITCH_REASON_LOW_QUALITY = 2,
89 	MLO_LINK_SWITCH_REASON_C2_CHANGE   = 3,
90 	MLO_LINK_SWITCH_REASON_HOST_FORCE  = 4,
91 	MLO_LINK_SWITCH_REASON_T2LM        = 5,
92 	MLO_LINK_SWITCH_REASON_MAX,
93 };
94 
95 /*
96  * enum mlo_link_switch_req_state - Enum to maintain the current state of
97  * link switch request.
98  * @MLO_LINK_SWITCH_STATE_IDLE: The last link switch request is inactive
99  * @MLO_LINK_SWITCH_STATE_DISCONNECT_CURR_LINK: Current link disconnect
100  *                                              in progress.
101  * @MLO_LINK_SWITCH_STATE_SET_MAC_ADDR: MAC address update in progress
102  * @MLO_LINK_SWITCH_STATE_CONNECT_NEW_LINK: New link connect in progress.
103  * @MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS: Link switch completed successfully
104  */
105 enum mlo_link_switch_req_state {
106 	MLO_LINK_SWITCH_STATE_IDLE,
107 	MLO_LINK_SWITCH_STATE_DISCONNECT_CURR_LINK,
108 	MLO_LINK_SWITCH_STATE_SET_MAC_ADDR,
109 	MLO_LINK_SWITCH_STATE_CONNECT_NEW_LINK,
110 	MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS,
111 };
112 
113 /**
114  * struct wlan_mlo_link_switch_req - Data Structure because of link switch
115  * request
116  * @restore_vdev_flag: VDEV Flag to be restored post link switch.
117  * @vdev_id: VDEV Id of the link which is under link switch
118  * @curr_ieee_link_id: Current link id of the ML link
119  * @new_ieee_link_id: Link id of the link to which going to link switched
120  * @peer_mld_addr: Peer MLD address
121  * @new_primary_freq: primary frequency of link switch link
122  * @new_phymode: Phy mode of link switch link
123  * @state: Current state of link switch
124  * @reason: Link switch reason
125  * @link_switch_ts: Link switch timestamp
126  */
127 struct wlan_mlo_link_switch_req {
128 	bool restore_vdev_flag;
129 	uint8_t vdev_id;
130 	uint8_t curr_ieee_link_id;
131 	uint8_t new_ieee_link_id;
132 	struct qdf_mac_addr peer_mld_addr;
133 	uint32_t new_primary_freq;
134 	uint32_t new_phymode;
135 	enum mlo_link_switch_req_state state;
136 	enum wlan_mlo_link_switch_reason reason;
137 	qdf_time_t link_switch_ts;
138 };
139 
140 /**
141  * struct mlo_link_switch_stats - hold information regarding link switch stats
142  * @total_num_link_switch: Total number of link switch
143  * @req_reason: Reason of link switch received from FW
144  * @cnf_reason: Confirm reason sent to FW
145  * @req_ts: Link switch timestamp
146  * @lswitch_status: structure to hold link switch status
147  */
148 struct mlo_link_switch_stats {
149 	uint32_t total_num_link_switch;
150 	struct {
151 		enum wlan_mlo_link_switch_reason req_reason;
152 		enum wlan_mlo_link_switch_cnf_reason cnf_reason;
153 		qdf_time_t req_ts;
154 	} lswitch_status[WLAN_MLO_LSWITCH_MAX_HISTORY];
155 };
156 
157 /**
158  * struct mlo_link_switch_context - Link switch data structure.
159  * @links_info: Hold information regarding all the links of ml connection
160  * @last_req: Last link switch request received from FW
161  * @lswitch_stats: History of the link switch stats
162  *                 Includes both fail and success stats.
163  */
164 struct mlo_link_switch_context {
165 	struct mlo_link_info links_info[WLAN_MAX_ML_BSS_LINKS];
166 	struct wlan_mlo_link_switch_req last_req;
167 	struct mlo_link_switch_stats lswitch_stats[MLO_LINK_SWITCH_CNF_STATUS_MAX];
168 };
169 
170 /**
171  * mlo_mgr_update_link_info_mac_addr() - MLO mgr update link info mac address
172  * @vdev: Object manager vdev
173  * @mlo_mac_update: ML link mac addresses update.
174  *
175  * Update link mac addresses for the ML links
176  * Return: none
177  */
178 void
179 mlo_mgr_update_link_info_mac_addr(struct wlan_objmgr_vdev *vdev,
180 				  struct wlan_mlo_link_mac_update *mlo_mac_update);
181 
182 /**
183  * mlo_mgr_update_link_info_reset() - Reset link info of ml dev context
184  * @ml_dev: MLO device context
185  *
186  * Reset link info of ml links
187  * Return: QDF_STATUS
188  */
189 void mlo_mgr_update_link_info_reset(struct wlan_mlo_dev_context *ml_dev);
190 
191 /**
192  * mlo_mgr_roam_update_ap_link_info() - Update AP links information
193  * @vdev: Object Manager vdev
194  * @link_id: Link id of the AP MLD link
195  * @ap_link_addr: AP link addresses
196  * @channel: wlan channel information of the link
197  *
198  * Update AP link information for each link of AP MLD
199  * Return: void
200  */
201 void mlo_mgr_roam_update_ap_link_info(struct wlan_objmgr_vdev *vdev,
202 				      uint8_t link_id,
203 				      uint8_t *ap_link_addr,
204 				      struct wlan_channel channel);
205 
206 /**
207  * mlo_mgr_update_ap_link_info() - Update AP links information
208  * @vdev: Object Manager vdev
209  * @link_id: Link id of the AP MLD link
210  * @ap_link_addr: AP link addresses
211  * @channel: wlan channel information of the link
212  *
213  * Update AP link information for each link of AP MLD
214  * Return: void
215  */
216 void mlo_mgr_update_ap_link_info(struct wlan_objmgr_vdev *vdev, uint8_t link_id,
217 				 uint8_t *ap_link_addr,
218 				 struct wlan_channel channel);
219 
220 /**
221  * mlo_mgr_reset_ap_link_info() - Reset AP links information
222  * @vdev: Object Manager vdev
223  *
224  * Reset AP links information in MLD
225  */
226 void mlo_mgr_reset_ap_link_info(struct wlan_objmgr_vdev *vdev);
227 
228 /**
229  * mlo_mgr_update_ap_channel_info() - Update AP channel information
230  * @vdev: Object Manager vdev
231  * @link_id: Link id of the AP MLD link
232  * @ap_link_addr: AP link addresses
233  * @channel: wlan channel information of the link
234  *
235  * Update AP channel information for each link of AP MLD
236  * Return: void
237  */
238 void mlo_mgr_update_ap_channel_info(struct wlan_objmgr_vdev *vdev,
239 				    uint8_t link_id,
240 				    uint8_t *ap_link_addr,
241 				    struct wlan_channel channel);
242 
243 /**
244  * mlo_mgr_get_ap_link_by_link_id() - Get mlo link info from link id
245  * @vdev: Object Manager vdev
246  * @link_id: Link id of the AP MLD link
247  *
248  * Search for the @link_id in the array in link_ctx in mlo_dev_ctx.
249  * Returns the pointer of mlo_link_info element matching the @link_id,
250  * or else NULL.
251  *
252  * Return: Pointer of link info
253  */
254 struct mlo_link_info*
255 mlo_mgr_get_ap_link_by_link_id(struct wlan_objmgr_vdev *vdev, int link_id);
256 
257 /**
258  * mlo_mgr_get_ap_link() - Assoc mlo link info from link id
259  * @vdev: Object Manager vdev
260  *
261  * Get Assoc link info.
262  *
263  * Return: Pointer of link info
264  */
265 struct mlo_link_info *mlo_mgr_get_ap_link(struct wlan_objmgr_vdev *vdev);
266 
267 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
268 /**
269  * mlo_mgr_osif_update_connect_info() - Update connection info to OSIF
270  * layer on successful connection complete.
271  * @vdev: VDEV object manager.
272  * @link_id: IEEE protocol link id.
273  *
274  * The API will call OSIF connection update callback to update IEEE link id
275  * as part of connection to MLO capable BSS. This is specifically needed to
276  * make OSIF aware of all the links part of connection even about the links
277  * for which VDEV doesn't exist.
278  *
279  * Return: void
280  */
281 void mlo_mgr_osif_update_connect_info(struct wlan_objmgr_vdev *vdev,
282 				      int32_t link_id);
283 
284 /**
285  * mlo_mgr_link_switch_disconnect_done() - Notify MLO manager on link switch
286  * disconnect complete.
287  * @vdev: VDEV object manager
288  * @status: Status of disconnect
289  *
290  * The API to decide on next sequence of tasks based on status on disconnect
291  * request send as part of link switch. If the status is error, then abort
292  * link switch or else continue.
293  *
294  * Return: QDF_STATUS
295  */
296 QDF_STATUS mlo_mgr_link_switch_disconnect_done(struct wlan_objmgr_vdev *vdev,
297 					       QDF_STATUS status);
298 
299 /**
300  * mlo_mgr_link_switch_set_mac_addr_resp() - Handle response of set MAC addr
301  * for VDEV under going link switch.
302  * @vdev: VDEV object manager
303  * @resp_status: Status of MAC address set request.
304  *
305  * The function will handle the response for set MAC address request sent to FW
306  * as part of link switch. If the response is error, then abort the link switch
307  * and send the appropirate status to FW
308  *
309  * Return: QDF_STATUS
310  */
311 QDF_STATUS mlo_mgr_link_switch_set_mac_addr_resp(struct wlan_objmgr_vdev *vdev,
312 						 uint8_t resp_status);
313 
314 /**
315  * mlo_mgr_link_switch_start_connect() - Start link switch connect on new link
316  * @vdev: VDEV pointer.
317  *
318  * Call the API to initiate connection for link switch post successful set mac
319  * address on @vdev.
320  *
321  * Return:QDF_STATUS
322  */
323 QDF_STATUS mlo_mgr_link_switch_start_connect(struct wlan_objmgr_vdev *vdev);
324 
325 /**
326  * mlo_mgr_link_switch_connect_done() - Link switch connect done indication.
327  * @vdev: VDEV object manager
328  * @status: Status of connect request.
329  *
330  * The callback from connection manager with connect response.
331  * If the response is failure, don't change the state of link switch.
332  * If the response if success, set link switch state to
333  * MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS.
334  * Finally call remove link switch cmd from serialization.
335  *
336  * Return: void
337  */
338 void mlo_mgr_link_switch_connect_done(struct wlan_objmgr_vdev *vdev,
339 				      QDF_STATUS status);
340 
341 /**
342  * mlo_mgr_link_switch_init_state() - Set the current state of link switch
343  * to init state.
344  * @mlo_dev_ctx: MLO dev context
345  *
346  * Sets the current state of link switch to MLO_LINK_SWITCH_STATE_IDLE with
347  * MLO dev context lock held.
348  *
349  * Return: void
350  */
351 void mlo_mgr_link_switch_init_state(struct wlan_mlo_dev_context *mlo_dev_ctx);
352 
353 /**
354  * mlo_mgr_link_switch_trans_next_state() - Transition to next state based
355  * on current state.
356  * @mlo_dev_ctx: MLO dev context
357  *
358  * Move to next state in link switch process based on current state with
359  * MLO dev context lock held.
360  *
361  * Return: void
362  */
363 void
364 mlo_mgr_link_switch_trans_next_state(struct wlan_mlo_dev_context *mlo_dev_ctx);
365 
366 /**
367  * mlo_mgr_link_switch_get_curr_state() - Get the current state of link switch.
368  * @mlo_dev_ctx: MLO dev context.
369  *
370  * Get the current state of link switch with MLO dev context lock held.
371  *
372  * Return: void
373  */
374 enum mlo_link_switch_req_state
375 mlo_mgr_link_switch_get_curr_state(struct wlan_mlo_dev_context *mlo_dev_ctx);
376 
377 /**
378  * mlo_mgr_is_link_switch_in_progress() - Check in link ctx in MLO dev context
379  * if the last received link switch is in progress.
380  * @vdev: VDEV object manager
381  *
382  * The API is to be called for VDEV which has MLO dev context and link context
383  * initialized. Returns the value of 'is_in_progress' flag in last received
384  * link switch request.
385  *
386  * Return: bool
387  */
388 bool mlo_mgr_is_link_switch_in_progress(struct wlan_objmgr_vdev *vdev);
389 
390 /**
391  * mlo_mgr_link_switch_notification() - Notify MLO manager on start
392  * of link switch
393  * @vdev: VDEV object manager
394  * @lswitch_req: Link switch request params from FW
395  *
396  * The link switch notifier callback to MLO manager invoked before starting
397  * link switch disconnect
398  *
399  * Return: QDF_STATUS
400  */
401 QDF_STATUS mlo_mgr_link_switch_notification(struct wlan_objmgr_vdev *vdev,
402 					    struct wlan_mlo_link_switch_req *lswitch_req);
403 
404 /**
405  * mlo_mgr_is_link_switch_on_assoc_vdev() - API to query whether link switch
406  * is on-going on assoc VDEV.
407  * @vdev: VDEV object manager
408  *
409  * Return: bool
410  */
411 bool mlo_mgr_is_link_switch_on_assoc_vdev(struct wlan_objmgr_vdev *vdev);
412 
413 /**
414  * mlo_mgr_link_switch_get_assoc_vdev() - Get current link switch VDEV
415  * pointer if it is assoc VDEV.
416  * @vdev: VDEV object manager.
417  *
418  * If the current link switch VDEV is assoc VDEV, fetch the pointer of that VDEV
419  *
420  * Return: VDEV object manager pointer
421  */
422 struct wlan_objmgr_vdev *
423 mlo_mgr_link_switch_get_assoc_vdev(struct wlan_objmgr_vdev *vdev);
424 
425 /**
426  * mlo_mgr_ser_link_switch_cmd() - The API will serialize link switch
427  * command in serialization queue.
428  * @vdev: VDEV objmgr pointer
429  * @req: Link switch request parameters
430  *
431  * On receiving link switch request with valid parameters from FW, this
432  * API will serialize the link switch command to procced for link switch
433  * on @vdev once the command comes to active queue.
434  *
435  * Return: QDF_STATUS
436  */
437 QDF_STATUS mlo_mgr_ser_link_switch_cmd(struct wlan_objmgr_vdev *vdev,
438 				       struct wlan_mlo_link_switch_req *req);
439 
440 /**
441  * mlo_mgr_remove_link_switch_cmd() - The API will remove the link switch
442  * command from active serialization queue.
443  * @vdev: VDEV object manager
444  *
445  * Once link switch process on @vdev is completed either in success of failure
446  * case, the API removes the link switch command from serialization queue.
447  *
448  * Return: void
449  */
450 void mlo_mgr_remove_link_switch_cmd(struct wlan_objmgr_vdev *vdev);
451 
452 /**
453  * mlo_mgr_link_switch_validate_request() - Validate link switch request
454  * received from FW.
455  * @vdev: VDEV object manager
456  * @req: Request params from FW
457  *
458  * The API performs initial validation of link switch params received from FW
459  * before serializing the link switch cmd. If any of the params is invalid or
460  * the current status of MLO manager can't allow link switch, the API returns
461  * failure and link switch has to be terminated.
462  *
463  * Return: QDF_STATUS
464  */
465 QDF_STATUS
466 mlo_mgr_link_switch_validate_request(struct wlan_objmgr_vdev *vdev,
467 				     struct wlan_mlo_link_switch_req *req);
468 
469 /**
470  * mlo_mgr_link_switch_request_params() - Link switch request params from FW.
471  * @psoc: PSOC object manager
472  * @evt_params: Link switch params received from FW.
473  *
474  * The @params contain link switch request parameters received from FW as
475  * an indication to host to trigger link switch sequence on the specified
476  * VDEV. If the @params are not valid link switch will be terminated.
477  *
478  * Return: QDF_STATUS
479  */
480 QDF_STATUS mlo_mgr_link_switch_request_params(struct wlan_objmgr_psoc *psoc,
481 					      void *evt_params);
482 /**
483  * mlo_mgr_link_switch_complete() - Link switch complete notification to FW
484  * @vdev: VDV object manager
485  *
486  * Notify the status of link switch to FW once the link switch sequence is
487  * completed.
488  *
489  * Return: QDF_STATUS;
490  */
491 QDF_STATUS mlo_mgr_link_switch_complete(struct wlan_objmgr_vdev *vdev);
492 
493 /**
494  * mlo_mgr_link_switch_init() - API to initialize link switch
495  * @ml_dev: MLO dev context
496  *
497  * Initializes the MLO link context in @ml_dev and allocates various
498  * buffers needed.
499  *
500  * Return: QDF_STATUS
501  */
502 QDF_STATUS mlo_mgr_link_switch_init(struct wlan_mlo_dev_context *ml_dev);
503 
504 /**
505  * mlo_mgr_link_switch_deinit() - API to de-initialize link switch
506  * @ml_dev: MLO dev context
507  *
508  * De-initialize the MLO link context in @ml_dev on and frees memory
509  * allocated as part of initialization.
510  *
511  * Return: QDF_STATUS
512  */
513 QDF_STATUS mlo_mgr_link_switch_deinit(struct wlan_mlo_dev_context *ml_dev);
514 #else
515 static inline void
516 mlo_mgr_osif_update_connect_info(struct wlan_objmgr_vdev *vdev, int32_t link_id)
517 {
518 }
519 
520 static inline QDF_STATUS
521 mlo_mgr_link_switch_disconnect_done(struct wlan_objmgr_vdev *vdev,
522 				    QDF_STATUS status)
523 {
524 	return QDF_STATUS_SUCCESS;
525 }
526 
527 static inline QDF_STATUS
528 mlo_mgr_link_switch_set_mac_addr_resp(struct wlan_objmgr_vdev *vdev,
529 				      uint8_t resp_status)
530 {
531 	return QDF_STATUS_E_NOSUPPORT;
532 }
533 
534 static inline QDF_STATUS
535 mlo_mgr_link_switch_start_connect(struct wlan_objmgr_vdev *vdev)
536 {
537 	return QDF_STATUS_E_NOSUPPORT;
538 }
539 
540 static inline void
541 mlo_mgr_link_switch_connect_done(struct wlan_objmgr_vdev *vdev,
542 				 QDF_STATUS status)
543 {
544 }
545 
546 static inline QDF_STATUS
547 mlo_mgr_link_switch_deinit(struct wlan_mlo_dev_context *ml_dev)
548 {
549 	return QDF_STATUS_SUCCESS;
550 }
551 
552 static inline QDF_STATUS
553 mlo_mgr_link_switch_init(struct wlan_mlo_dev_context *ml_dev)
554 {
555 	return QDF_STATUS_SUCCESS;
556 }
557 
558 static inline void
559 mlo_mgr_link_switch_init_state(struct wlan_mlo_dev_context *mlo_dev_ctx)
560 {
561 }
562 
563 static inline void
564 mlo_mgr_link_switch_trans_next_state(struct wlan_mlo_dev_context *mlo_dev_ctx)
565 {
566 }
567 
568 static inline enum mlo_link_switch_req_state
569 mlo_mgr_link_switch_get_curr_state(struct wlan_mlo_dev_context *mlo_dev_ctx)
570 {
571 	return MLO_LINK_SWITCH_STATE_IDLE;
572 }
573 
574 static inline bool
575 mlo_mgr_is_link_switch_in_progress(struct wlan_objmgr_vdev *vdev)
576 {
577 	return false;
578 }
579 
580 static inline QDF_STATUS
581 mlo_mgr_link_switch_notification(struct wlan_objmgr_vdev *vdev,
582 				 struct wlan_mlo_link_switch_req *lswitch_req)
583 {
584 	return QDF_STATUS_E_NOSUPPORT;
585 }
586 
587 static inline bool
588 mlo_mgr_is_link_switch_on_assoc_vdev(struct wlan_objmgr_vdev *vdev)
589 {
590 	return false;
591 }
592 
593 static inline struct wlan_objmgr_vdev *
594 mlo_mgr_link_switch_get_assoc_vdev(struct wlan_objmgr_vdev *vdev)
595 {
596 	return NULL;
597 }
598 
599 static inline QDF_STATUS
600 mlo_mgr_ser_link_switch_cmd(struct wlan_objmgr_vdev *vdev,
601 			    struct wlan_mlo_link_switch_req *req)
602 {
603 	return QDF_STATUS_E_NOSUPPORT;
604 }
605 
606 static inline void
607 mlo_mgr_remove_link_switch_cmd(struct wlan_objmgr_vdev *vdev)
608 {
609 }
610 
611 static inline QDF_STATUS
612 mlo_mgr_link_switch_validate_request(struct wlan_objmgr_vdev *vdev,
613 				     struct wlan_mlo_link_switch_req *req)
614 {
615 	return QDF_STATUS_E_NOSUPPORT;
616 }
617 
618 static inline QDF_STATUS
619 mlo_mgr_link_switch_request_params(struct wlan_objmgr_psoc *psoc,
620 				   void *evt_params)
621 {
622 	return QDF_STATUS_E_NOSUPPORT;
623 }
624 
625 static inline QDF_STATUS
626 mlo_mgr_link_switch_complete(struct wlan_objmgr_vdev *vdev)
627 {
628 	return QDF_STATUS_E_NOSUPPORT;
629 }
630 #endif
631 #endif
632