xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h (revision 901120c066e139c7f8a2c8e4820561fdd83c67ef)
1 /*
2  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: Declares VDEV MLME SM APIs and structures
22  */
23 
24 #ifndef _VDEV_MLME_SM_H_
25 #define _VDEV_MLME_SM_H_
26 
27 #ifdef WLAN_FEATURE_11BE_MLO
28 #include <wlan_mlo_mgr_ap.h>
29 #include <wlan_mlo_mgr_sta.h>
30 #endif
31 #include <wlan_dfs_utils_api.h>
32 
33 /**
34  * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM
35  * @vdev_mlme: MLME VDEV comp object
36  * @event: MLME event
37  * @event_data_len: data size
38  * @event_data: event data
39  *
40  * API to dispatch event to VDEV MLME SM
41  *
42  * Return: SUCCESS: on handling event
43  *         FAILURE: on ignoring the event
44  */
45 QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme,
46 				      enum wlan_vdev_sm_evt event,
47 				      uint16_t event_data_len,
48 				      void *event_data);
49 
50 /**
51  * mlme_vdev_sm_print_state_event() - Prints the state/substate, event
52  * @vdev_mlme: MLME VDEV comp object
53  * @event: MLME event
54  *
55  * API to print current state/substate, events in readable format
56  *
57  * Return: void
58  */
59 void mlme_vdev_sm_print_state_event(struct vdev_mlme_obj *vdev_mlme,
60 				    enum wlan_vdev_sm_evt event);
61 
62 /**
63  * mlme_vdev_sm_print_state() - Prints the state/substate
64  * @vdev_mlme: MLME VDEV comp object
65  *
66  * API to print current state/substate
67  *
68  * Return: void
69  */
70 void mlme_vdev_sm_print_state(struct vdev_mlme_obj *vdev_mlme);
71 #ifdef SM_ENG_HIST_ENABLE
72 /**
73  * mlme_vdev_sm_history_print() - Prints SM history
74  * @vdev_mlme: MLME VDEV comp object
75  *
76  * API to print SM history
77  *
78  * Return: void
79  */
80 void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme);
81 #endif
82 
83 #endif
84 
85 /**
86  * mlme_vdev_sm_create - Invoke SME creation for VDEV
87  * @vdev_mlme_obj:  VDEV MLME comp object
88  *
89  * API allocates VDEV MLME SM and initializes SM lock
90  *
91  * Return: SUCCESS on successful allocation
92  *         FAILURE, if registration fails
93  */
94 QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme);
95 
96 /**
97  * mlme_vdev_sm_destroy - Invoke SME destroy for VDEV
98  * @vdev_mlme_obj:  VDEV MLME comp object
99  *
100  * API frees VDEV MLME SM and destroys the SM lock
101  *
102  * Return: SUCCESS on successful destroy
103  *         FAILURE, if registration fails
104  */
105 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme);
106 
107 /**
108  * mlme_vdev_validate_basic_params - Validate basic params
109  * @vdev_mlme_obj:  VDEV MLME comp object
110  * @event_data_len: data size
111  * @event_data: event data
112  *
113  * API validate MLME VDEV basic parameters
114  *
115  * Return: SUCCESS on successful validation
116  *         FAILURE, if any parameter is not initialized
117  */
118 static inline QDF_STATUS mlme_vdev_validate_basic_params(
119 				struct vdev_mlme_obj *vdev_mlme,
120 				uint16_t event_data_len, void *event_data)
121 {
122 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
123 
124 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
125 		ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
126 					vdev_mlme, event_data_len, event_data);
127 
128 	return ret;
129 }
130 
131 /**
132  * mlme_vdev_reset_proto_params - Reset VDEV protocol params
133  * @vdev_mlme_obj:  VDEV MLME comp object
134  * @event_data_len: data size
135  * @event_data: event data
136  *
137  * API resets the protocol params of vdev
138  *
139  * Return: SUCCESS on successful reset
140  *         FAILURE, if it fails due to any
141  */
142 static inline QDF_STATUS mlme_vdev_reset_proto_params(
143 				struct vdev_mlme_obj *vdev_mlme,
144 				uint16_t event_data_len, void *event_data)
145 {
146 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
147 
148 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
149 		ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
150 					vdev_mlme, event_data_len, event_data);
151 
152 	return ret;
153 }
154 
155 /**
156  * mlme_vdev_start_send - Invokes VDEV start operation
157  * @vdev_mlme_obj:  VDEV MLME comp object
158  * @event_data_len: data size
159  * @event_data: event data
160  *
161  * API invokes VDEV start operation
162  *
163  * Return: SUCCESS on successful completion of start operation
164  *         FAILURE, if it fails due to any
165  */
166 static inline QDF_STATUS mlme_vdev_start_send(
167 				struct vdev_mlme_obj *vdev_mlme,
168 				uint16_t event_data_len, void *event_data)
169 {
170 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
171 
172 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
173 		ret = vdev_mlme->ops->mlme_vdev_start_send(
174 					vdev_mlme, event_data_len, event_data);
175 
176 	return ret;
177 }
178 
179 /**
180  * mlme_vdev_restart_send - Invokes VDEV restart operation
181  * @vdev_mlme_obj:  VDEV MLME comp object
182  * @event_data_len: data size
183  * @event_data: event data
184  *
185  * API invokes VDEV restart operation
186  *
187  * Return: SUCCESS on successful completion of restart operation
188  *         FAILURE, if it fails due to any
189  */
190 static inline QDF_STATUS mlme_vdev_restart_send(
191 				struct vdev_mlme_obj *vdev_mlme,
192 				uint16_t event_data_len, void *event_data)
193 {
194 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
195 
196 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
197 		ret = vdev_mlme->ops->mlme_vdev_restart_send(
198 					vdev_mlme, event_data_len, event_data);
199 
200 	return ret;
201 }
202 
203 /**
204  * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
205  * @vdev_mlme_obj:  VDEV MLME comp object
206  * @restart: restart req/start req
207  * @event_data_len: data size
208  * @event_data: event data
209  *
210  * API invokes stops pending VDEV restart operation
211  *
212  * Return: SUCCESS alsways
213  */
214 static inline QDF_STATUS mlme_vdev_stop_start_send(
215 				struct vdev_mlme_obj *vdev_mlme,
216 				uint8_t restart,
217 				uint16_t event_data_len, void *event_data)
218 {
219 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
220 
221 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
222 		ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
223 				vdev_mlme, restart, event_data_len, event_data);
224 
225 	return ret;
226 }
227 
228 /**
229  * mlme_vdev_start_continue - VDEV start response handling
230  * @vdev_mlme_obj:  VDEV MLME comp object
231  * @event_data_len: data size
232  * @event_data: event data
233  *
234  * API invokes VDEV start response actions
235  *
236  * Return: SUCCESS on successful completion of start response operation
237  *         FAILURE, if it fails due to any
238  */
239 static inline QDF_STATUS mlme_vdev_start_continue(
240 				struct vdev_mlme_obj *vdev_mlme,
241 				uint16_t event_data_len, void *event_data)
242 {
243 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
244 
245 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
246 		ret = vdev_mlme->ops->mlme_vdev_start_continue(
247 					vdev_mlme, event_data_len, event_data);
248 
249 	return ret;
250 }
251 
252 /**
253  * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
254  * @vdev_mlme_obj:  VDEV MLME comp object
255  * @event_data_len: data size
256  * @event_data: event data
257  *
258  * API invokes on START fail response
259  *
260  * Return: SUCCESS on successful invocation of callback
261  *         FAILURE, if it fails due to any
262  */
263 static inline QDF_STATUS mlme_vdev_start_req_failed(
264 				struct vdev_mlme_obj *vdev_mlme,
265 				uint16_t event_data_len, void *event_data)
266 {
267 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
268 
269 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
270 		ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
271 					vdev_mlme, event_data_len, event_data);
272 
273 	return ret;
274 }
275 
276 /**
277  * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
278  * @vdev_mlme_obj:  VDEV MLME comp object
279  * @event_data_len: data size
280  * @event_data: event data
281  *
282  * API invokes connection SM to start station connection
283  *
284  * Return: SUCCESS on successful invocation of connection sm
285  *         FAILURE, if it fails due to any
286  */
287 static inline QDF_STATUS mlme_vdev_sta_conn_start(
288 				struct vdev_mlme_obj *vdev_mlme,
289 				uint16_t event_data_len, void *event_data)
290 {
291 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
292 
293 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
294 		ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
295 					vdev_mlme, event_data_len, event_data);
296 
297 	return ret;
298 }
299 
300 /**
301  * mlme_vdev_sta_disconn_start - Invoke Station VDEV disconnection
302  * @vdev_mlme_obj:  VDEV MLME comp object
303  * @event_data_len: data size
304  * @event_data: event data
305  *
306  * API invokes connection SM to start station disconnection
307  *
308  * Return: SUCCESS on successful invocation of disconnection sm
309  *         FAILURE, if it fails due to any
310  */
311 static inline QDF_STATUS mlme_vdev_sta_disconn_start(
312 				struct vdev_mlme_obj *vdev_mlme,
313 				uint16_t event_data_len, void *event_data)
314 {
315 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
316 
317 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_disconn_start)
318 		ret = vdev_mlme->ops->mlme_vdev_sta_disconn_start(
319 					vdev_mlme, event_data_len, event_data);
320 
321 	return ret;
322 }
323 
324 /**
325  * mlme_vdev_up_send - VDEV up operation
326  * @vdev_mlme_obj:  VDEV MLME comp object
327  * @event_data_len: data size
328  * @event_data: event data
329  *
330  * API invokes VDEV up operations
331  *
332  * Return: SUCCESS on successful completion of up operation
333  *         FAILURE, if it fails due to any
334  */
335 static inline QDF_STATUS mlme_vdev_up_send(
336 				struct vdev_mlme_obj *vdev_mlme,
337 				uint16_t event_data_len, void *event_data)
338 {
339 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
340 
341 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
342 		ret = vdev_mlme->ops->mlme_vdev_up_send(
343 					vdev_mlme, event_data_len, event_data);
344 
345 	return ret;
346 }
347 
348 /**
349  * mlme_vdev_notify_up_complete - VDEV up state transition notification
350  * @vdev_mlme_obj:  VDEV MLME comp object
351  * @event_data_len: data size
352  * @event_data: event data
353  *
354  * API notifies MLME on moving to UP state
355  *
356  * Return: SUCCESS on successful completion of up notification
357  *         FAILURE, if it fails due to any
358  */
359 static inline
360 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
361 					uint16_t event_data_len,
362 					void *event_data)
363 {
364 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
365 
366 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
367 		ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
368 					vdev_mlme, event_data_len, event_data);
369 
370 	return ret;
371 }
372 
373 /**
374  * mlme_vdev_notify_roam_start - VDEV Roaming notification
375  * @vdev_mlme_obj:  VDEV MLME comp object
376  * @event_len: data size
377  * @event_data: event data
378  *
379  * API notifies MLME on roaming
380  *
381  * Return: SUCCESS on successful completion of up notification
382  *         FAILURE, if it fails due to any
383  */
384 static inline
385 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
386 				       uint16_t event_len, void *event_data)
387 {
388 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
389 
390 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
391 		ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
392 								  event_len,
393 								  event_data);
394 
395 	return ret;
396 }
397 
398 /**
399  * mlme_vdev_update_beacon - Updates beacon
400  * @vdev_mlme_obj:  VDEV MLME comp object
401  * @op: beacon update type
402  * @event_data_len: data size
403  * @event_data: event data
404  *
405  * API updates/allocates/frees the beacon
406  *
407  * Return: SUCCESS on successful update of beacon
408  *         FAILURE, if it fails due to any
409  */
410 static inline
411 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
412 				   enum beacon_update_op op,
413 				   uint16_t event_data_len, void *event_data)
414 {
415 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
416 
417 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
418 		ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
419 						event_data_len, event_data);
420 
421 	return ret;
422 }
423 
424 /**
425  * mlme_vdev_disconnect_peers - Disconnect peers
426  * @vdev_mlme_obj:  VDEV MLME comp object
427  * @event_data_len: data size
428  * @event_data: event data
429  *
430  * API trigger stations disconnection with AP VDEV or AP disconnection with STA
431  * VDEV
432  *
433  * Return: SUCCESS on successful invocation of station disconnection
434  *         FAILURE, if it fails due to any
435  */
436 static inline QDF_STATUS mlme_vdev_disconnect_peers(
437 				struct vdev_mlme_obj *vdev_mlme,
438 				uint16_t event_data_len, void *event_data)
439 {
440 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
441 
442 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
443 		ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
444 					vdev_mlme, event_data_len, event_data);
445 
446 	return ret;
447 }
448 
449 /**
450  * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
451  * @vdev_mlme_obj:  VDEV MLME comp object
452  * @event_data_len: data size
453  * @event_data: event data
454  *
455  * API stops the CAC timer through DFS API
456  *
457  * Return: SUCCESS on successful CAC timer stop
458  *         FAILURE, if it fails due to any
459  */
460 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
461 				struct vdev_mlme_obj *vdev_mlme,
462 				uint16_t event_data_len, void *event_data)
463 {
464 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
465 
466 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
467 		ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
468 					vdev_mlme, event_data_len, event_data);
469 
470 	return ret;
471 }
472 
473 /**
474  * mlme_vdev_stop_send - Invokes VDEV stop operation
475  * @vdev_mlme_obj:  VDEV MLME comp object
476  * @event_data_len: data size
477  * @event_data: event data
478  *
479  * API invokes VDEV stop operation
480  *
481  * Return: SUCCESS on successful completion of stop operation
482  *         FAILURE, if it fails due to any
483  */
484 static inline QDF_STATUS mlme_vdev_stop_send(
485 				struct vdev_mlme_obj *vdev_mlme,
486 				uint16_t event_data_len, void *event_data)
487 {
488 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
489 
490 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
491 		ret = vdev_mlme->ops->mlme_vdev_stop_send(
492 					vdev_mlme, event_data_len, event_data);
493 
494 	return ret;
495 }
496 
497 /**
498  * mlme_vdev_stop_continue - VDEV stop response handling
499  * @vdev_mlme_obj:  VDEV MLME comp object
500  * @event_data_len: data size
501  * @event_data: event data
502  *
503  * API invokes VDEV stop response actions
504  *
505  * Return: SUCCESS on successful completion of stop response operation
506  *         FAILURE, if it fails due to any
507  */
508 static inline QDF_STATUS mlme_vdev_stop_continue(
509 				struct vdev_mlme_obj *vdev_mlme,
510 				uint16_t event_data_len, void *event_data)
511 {
512 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
513 
514 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
515 		ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
516 							      event_data_len,
517 							      event_data);
518 
519 	return ret;
520 }
521 
522 /**
523  * mlme_vdev_down_send - VDEV down operation
524  * @vdev_mlme_obj:  VDEV MLME comp object
525  * @event_data_len: data size
526  * @event_data: event data
527  *
528  * API invokes VDEV down operation
529  *
530  * Return: SUCCESS on successful completion of VDEV down operation
531  *         FAILURE, if it fails due to any
532  */
533 static inline QDF_STATUS mlme_vdev_down_send(
534 				struct vdev_mlme_obj *vdev_mlme,
535 				uint16_t event_data_len, void *event_data)
536 {
537 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
538 
539 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
540 		ret = vdev_mlme->ops->mlme_vdev_down_send(
541 					vdev_mlme, event_data_len, event_data);
542 
543 	return ret;
544 }
545 
546 /**
547  * mlme_vdev_notify_down_complete - VDEV init state transition notification
548  * @vdev_mlme_obj:  VDEV MLME comp object
549  * @event_data_len: data size
550  * @event_data: event data
551  *
552  * API notifies MLME on moving to INIT state
553  *
554  * Return: SUCCESS on successful completion of down notification
555  *         FAILURE, if it fails due to any
556  */
557 static inline QDF_STATUS mlme_vdev_notify_down_complete(
558 				struct vdev_mlme_obj *vdev_mlme,
559 				uint16_t event_data_len, void *event_data)
560 {
561 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
562 
563 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
564 		ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
565 					vdev_mlme, event_data_len, event_data);
566 
567 	return ret;
568 }
569 
570 /**
571  * mlme_vdev_notify_start_state_exit - VDEV SM start state exit notification
572  * @vdev_mlme_obj:  VDEV MLME comp object
573  *
574  * API notifies on start state exit
575  *
576  * Return: SUCCESS on successful completion of notification
577  *         FAILURE, if it fails due to any
578  */
579 static inline QDF_STATUS mlme_vdev_notify_start_state_exit(
580 				struct vdev_mlme_obj *vdev_mlme)
581 {
582 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
583 
584 	if ((vdev_mlme->ops) &&
585 	    vdev_mlme->ops->mlme_vdev_notify_start_state_exit)
586 		ret = vdev_mlme->ops->mlme_vdev_notify_start_state_exit(
587 								vdev_mlme);
588 
589 	return ret;
590 }
591 
592 /**
593  * mlme_vdev_is_newchan_no_cac - Checks new channel requires CAC
594  * @vdev_mlme_obj:  VDEV MLME comp object
595  *
596  * API checks whether Channel needs CAC period,
597  * if yes, it moves to SUSPEND_RESTART to disconnect stations before
598  * sending RESTART to FW, otherwise, it moves to RESTART_PROGRESS substate
599  *
600  * Return: SUCCESS to move to RESTART_PROGRESS substate
601  *         FAILURE, move to SUSPEND_RESTART state
602  */
603 static inline QDF_STATUS mlme_vdev_is_newchan_no_cac(
604 				struct vdev_mlme_obj *vdev_mlme)
605 {
606 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
607 
608 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_is_newchan_no_cac)
609 		ret = vdev_mlme->ops->mlme_vdev_is_newchan_no_cac(vdev_mlme);
610 
611 	return ret;
612 }
613 
614 /**
615  * mlme_vdev_dfs_cac_wait_notify - Notifies DFS CAC wait state
616  * @vdev_mlme_obj:  VDEV MLME comp object
617  *
618  * Return: NO_SUPPORT if the callback is not supported.
619  *         SUCCESS if DFS CAC Wait notification handled by caller
620  */
621 static inline QDF_STATUS mlme_vdev_dfs_cac_wait_notify(
622 				struct vdev_mlme_obj *vdev_mlme)
623 {
624 	QDF_STATUS ret = QDF_STATUS_E_NOSUPPORT;
625 
626 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_wait_notify)
627 		ret = vdev_mlme->ops->mlme_vdev_dfs_cac_wait_notify(vdev_mlme);
628 
629 	return ret;
630 }
631 
632 /**
633  * mlme_vdev_chan_switch_disable_notify_dfs - Notifies DFS when channel
634  * switch is disabled
635  * @vdev_mlme: VDEV MLME comp object
636  *
637  * Return: QDF_STATUS.
638  */
639 static inline QDF_STATUS mlme_vdev_chan_switch_disable_notify_dfs(
640 					struct vdev_mlme_obj *vdev_mlme)
641 {
642 	return utils_dfs_radar_enable(wlan_vdev_get_pdev(vdev_mlme->vdev));
643 }
644 #ifdef WLAN_FEATURE_11BE_MLO
645 /**
646  * mlme_vdev_up_notify_mlo_mgr - notify mlo link is ready to up
647  * @vdev_mlme_obj:  VDEV MLME comp object
648  *
649  * Return: VOID.
650  */
651 static inline void mlme_vdev_up_notify_mlo_mgr(struct vdev_mlme_obj *vdev_mlme)
652 {
653 	if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev))
654 		mlo_ap_link_sync_wait_notify(vdev_mlme->vdev);
655 }
656 
657 /**
658  * mlme_vdev_start_rsp_notify_mlo_mgr - notify mlo link is started
659  * @vdev_mlme_obj:  VDEV MLME comp object
660  *
661  * Return: VOID.
662  */
663 static inline void mlme_vdev_start_rsp_notify_mlo_mgr(
664 					struct vdev_mlme_obj *vdev_mlme)
665 {
666 	if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev))
667 		mlo_ap_link_start_rsp_notify(vdev_mlme->vdev);
668 }
669 
670 /**
671  * mlme_vdev_down_cmpl_notify_mlo_mgr - notify mlo link is down complete
672  * @vdev_mlme_obj:  VDEV MLME comp object
673  *
674  * Return: VOID.
675  */
676 static inline void mlme_vdev_down_cmpl_notify_mlo_mgr(
677 					struct vdev_mlme_obj *vdev_mlme)
678 {
679 	if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev))
680 		mlo_ap_link_down_cmpl_notify(vdev_mlme->vdev);
681 }
682 
683 /**
684  * mlme_vdev_up_active_notify_mlo_mgr - notify mlo link is up active
685  * @vdev_mlme_obj:  VDEV MLME comp object
686  *
687  * Return: VOID.
688  */
689 static inline void mlme_vdev_up_active_notify_mlo_mgr(
690 					struct vdev_mlme_obj *vdev_mlme)
691 {
692 	if ((wlan_vdev_mlme_get_opmode(vdev_mlme->vdev) == QDF_STA_MODE) &&
693 	    wlan_vdev_mlme_is_mlo_vdev(vdev_mlme->vdev))
694 		mlo_sta_up_active_notify(vdev_mlme->vdev);
695 }
696 #else
697 static inline void mlme_vdev_up_notify_mlo_mgr(struct vdev_mlme_obj *vdev_mlme)
698 {
699 }
700 
701 static inline void mlme_vdev_start_rsp_notify_mlo_mgr(
702 					struct vdev_mlme_obj *vdev_mlme)
703 {
704 }
705 
706 static inline void mlme_vdev_down_cmpl_notify_mlo_mgr(
707 					struct vdev_mlme_obj *vdev_mlme)
708 {
709 }
710 
711 static inline void mlme_vdev_up_active_notify_mlo_mgr(
712 					struct vdev_mlme_obj *vdev_mlme)
713 {
714 }
715 #endif
716 
717 #ifdef VDEV_SM_LOCK_SUPPORT
718 /**
719  * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
720  * @vdev_mlme_obj:  VDEV MLME comp object
721  *
722  * Creates VDEV MLME spinlock
723  *
724  * Return: void
725  */
726 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
727 {
728 	qdf_spinlock_create(&vdev_mlme->sm_lock);
729 }
730 
731 /**
732  * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
733  * @vdev_mlme_obj:  VDEV MLME comp object
734  *
735  * Destroy VDEV MLME spinlock
736  *
737  * Return: void
738  */
739 static inline void mlme_vdev_sm_spinlock_destroy(
740 						struct vdev_mlme_obj *vdev_mlme)
741 {
742 	qdf_spinlock_destroy(&vdev_mlme->sm_lock);
743 }
744 
745 /**
746  * mlme_vdev_sm_spin_lock - acquire spinlock
747  * @vdev_mlme_obj:  vdev mlme comp object
748  *
749  * acquire vdev mlme spinlock
750  *
751  * return: void
752  */
753 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
754 {
755 	qdf_spin_lock_bh(&vdev_mlme->sm_lock);
756 }
757 
758 /**
759  * mlme_vdev_sm_spin_unlock - release spinlock
760  * @vdev_mlme_obj:  vdev mlme comp object
761  *
762  * release vdev mlme spinlock
763  *
764  * return: void
765  */
766 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
767 {
768 	qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
769 }
770 
771 /**
772  * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex
773  * @vdev_mlme_obj:  VDEV MLME comp object
774  *
775  * Creates VDEV MLME cmd mutex
776  *
777  * Return: void
778  */
779 static inline void
780 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
781 {
782 	qdf_mutex_create(&vdev_mlme->vdev_cmd_lock);
783 }
784 
785 /**
786  * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex
787  * @vdev_mlme_obj:  VDEV MLME comp object
788  *
789  * Destroy VDEV MLME cmd mutex
790  *
791  * Return: void
792  */
793 static inline void
794 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
795 {
796 	qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock);
797 }
798 
799 /**
800  * mlme_vdev_cmd_mutex_acquire - acquire mutex
801  * @vdev_mlme_obj:  vdev mlme comp object
802  *
803  * acquire vdev mlme cmd mutex
804  *
805  * return: void
806  */
807 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
808 {
809 	qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock);
810 }
811 
812 /**
813  * mlme_vdev_cmd_mutex_release - release mutex
814  * @vdev_mlme_obj:  vdev mlme comp object
815  *
816  * release vdev mlme cmd mutex
817  *
818  * return: void
819  */
820 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
821 {
822 	qdf_mutex_release(&vdev_mlme->vdev_cmd_lock);
823 }
824 
825 #else
826 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
827 {
828 	mlme_debug("VDEV SM lock is disabled!!!");
829 }
830 
831 static inline void mlme_vdev_sm_spinlock_destroy(
832 						struct vdev_mlme_obj *vdev_mlme)
833 {
834 	mlme_debug("VDEV SM lock is disabled!!!");
835 }
836 
837 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
838 {
839 }
840 
841 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
842 {
843 }
844 
845 static inline void
846 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
847 {
848 	mlme_debug("VDEV CMD lock is disabled!!!");
849 }
850 
851 static inline void
852 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
853 {
854 	mlme_debug("VDEV CMD lock is disabled!!!");
855 }
856 
857 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
858 {
859 }
860 
861 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
862 {
863 }
864 #endif
865