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