xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h (revision bea437e2293c3d4fb1b5704fcf633aedac996962)
1 /*
2  * Copyright (c) 2018-2019 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 /**
27  * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM
28  * @vdev_mlme: MLME VDEV comp object
29  * @event: MLME event
30  * @event_data_len: data size
31  * @event_data: event data
32  *
33  * API to dispatch event to VDEV MLME SM
34  *
35  * Return: SUCCESS: on handling event
36  *         FAILURE: on ignoring the event
37  */
38 QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme,
39 				      enum wlan_vdev_sm_evt event,
40 				      uint16_t event_data_len,
41 				      void *event_data);
42 
43 /**
44  * mlme_vdev_sm_print_state_event() - Prints the state/substate, event
45  * @vdev_mlme: MLME VDEV comp object
46  * @event: MLME event
47  *
48  * API to print current state/substate, events in readable format
49  *
50  * Return: void
51  */
52 void mlme_vdev_sm_print_state_event(struct vdev_mlme_obj *vdev_mlme,
53 				    enum wlan_vdev_sm_evt event);
54 
55 /**
56  * mlme_vdev_sm_print_state() - Prints the state/substate
57  * @vdev_mlme: MLME VDEV comp object
58  *
59  * API to print current state/substate
60  *
61  * Return: void
62  */
63 void mlme_vdev_sm_print_state(struct vdev_mlme_obj *vdev_mlme);
64 #ifdef SM_ENG_HIST_ENABLE
65 /**
66  * mlme_vdev_sm_history_print() - Prints SM history
67  * @vdev_mlme: MLME VDEV comp object
68  *
69  * API to print SM history
70  *
71  * Return: void
72  */
73 void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme);
74 #endif
75 
76 #endif
77 
78 /**
79  * mlme_vdev_sm_create - Invoke SME creation for VDEV
80  * @vdev_mlme_obj:  VDEV MLME comp object
81  *
82  * API allocates VDEV MLME SM and initializes SM lock
83  *
84  * Return: SUCCESS on successful allocation
85  *         FAILURE, if registration fails
86  */
87 QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme);
88 
89 /**
90  * mlme_vdev_sm_destroy - Invoke SME destroy for VDEV
91  * @vdev_mlme_obj:  VDEV MLME comp object
92  *
93  * API frees VDEV MLME SM and destroys the SM lock
94  *
95  * Return: SUCCESS on successful destroy
96  *         FAILURE, if registration fails
97  */
98 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme);
99 
100 /**
101  * mlme_vdev_validate_basic_params - Validate basic params
102  * @vdev_mlme_obj:  VDEV MLME comp object
103  * @event_data_len: data size
104  * @event_data: event data
105  *
106  * API validate MLME VDEV basic parameters
107  *
108  * Return: SUCCESS on successful validation
109  *         FAILURE, if any parameter is not initialized
110  */
111 static inline QDF_STATUS mlme_vdev_validate_basic_params(
112 				struct vdev_mlme_obj *vdev_mlme,
113 				uint16_t event_data_len, void *event_data)
114 {
115 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
116 
117 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
118 		ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
119 					vdev_mlme, event_data_len, event_data);
120 
121 	return ret;
122 }
123 
124 /**
125  * mlme_vdev_reset_proto_params - Reset VDEV protocol params
126  * @vdev_mlme_obj:  VDEV MLME comp object
127  * @event_data_len: data size
128  * @event_data: event data
129  *
130  * API resets the protocol params fo vdev
131  *
132  * Return: SUCCESS on successful reset
133  *         FAILURE, if it fails due to any
134  */
135 static inline QDF_STATUS mlme_vdev_reset_proto_params(
136 				struct vdev_mlme_obj *vdev_mlme,
137 				uint16_t event_data_len, void *event_data)
138 {
139 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
140 
141 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
142 		ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
143 					vdev_mlme, event_data_len, event_data);
144 
145 	return ret;
146 }
147 
148 /**
149  * mlme_vdev_start_send - Invokes VDEV start operation
150  * @vdev_mlme_obj:  VDEV MLME comp object
151  * @event_data_len: data size
152  * @event_data: event data
153  *
154  * API invokes VDEV start operation
155  *
156  * Return: SUCCESS on successful completion of start operation
157  *         FAILURE, if it fails due to any
158  */
159 static inline QDF_STATUS mlme_vdev_start_send(
160 				struct vdev_mlme_obj *vdev_mlme,
161 				uint16_t event_data_len, void *event_data)
162 {
163 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
164 
165 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
166 		ret = vdev_mlme->ops->mlme_vdev_start_send(
167 					vdev_mlme, event_data_len, event_data);
168 
169 	return ret;
170 }
171 
172 /**
173  * mlme_vdev_restart_send - Invokes VDEV restart operation
174  * @vdev_mlme_obj:  VDEV MLME comp object
175  * @event_data_len: data size
176  * @event_data: event data
177  *
178  * API invokes VDEV restart operation
179  *
180  * Return: SUCCESS on successful completion of restart operation
181  *         FAILURE, if it fails due to any
182  */
183 static inline QDF_STATUS mlme_vdev_restart_send(
184 				struct vdev_mlme_obj *vdev_mlme,
185 				uint16_t event_data_len, void *event_data)
186 {
187 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
188 
189 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
190 		ret = vdev_mlme->ops->mlme_vdev_restart_send(
191 					vdev_mlme, event_data_len, event_data);
192 
193 	return ret;
194 }
195 
196 /**
197  * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
198  * @vdev_mlme_obj:  VDEV MLME comp object
199  * @restart: restart req/start req
200  * @event_data_len: data size
201  * @event_data: event data
202  *
203  * API invokes stops pending VDEV restart operation
204  *
205  * Return: SUCCESS alsways
206  */
207 static inline QDF_STATUS mlme_vdev_stop_start_send(
208 				struct vdev_mlme_obj *vdev_mlme,
209 				uint8_t restart,
210 				uint16_t event_data_len, void *event_data)
211 {
212 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
213 
214 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
215 		ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
216 				vdev_mlme, restart, event_data_len, event_data);
217 
218 	return ret;
219 }
220 
221 /**
222  * mlme_vdev_start_continue - VDEV start response handling
223  * @vdev_mlme_obj:  VDEV MLME comp object
224  * @event_data_len: data size
225  * @event_data: event data
226  *
227  * API invokes VDEV start response actions
228  *
229  * Return: SUCCESS on successful completion of start response operation
230  *         FAILURE, if it fails due to any
231  */
232 static inline QDF_STATUS mlme_vdev_start_continue(
233 				struct vdev_mlme_obj *vdev_mlme,
234 				uint16_t event_data_len, void *event_data)
235 {
236 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
237 
238 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
239 		ret = vdev_mlme->ops->mlme_vdev_start_continue(
240 					vdev_mlme, event_data_len, event_data);
241 
242 	return ret;
243 }
244 
245 /**
246  * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
247  * @vdev_mlme_obj:  VDEV MLME comp object
248  * @event_data_len: data size
249  * @event_data: event data
250  *
251  * API invokes on START fail response
252  *
253  * Return: SUCCESS on successful invocation of callback
254  *         FAILURE, if it fails due to any
255  */
256 static inline QDF_STATUS mlme_vdev_start_req_failed(
257 				struct vdev_mlme_obj *vdev_mlme,
258 				uint16_t event_data_len, void *event_data)
259 {
260 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
261 
262 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
263 		ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
264 					vdev_mlme, event_data_len, event_data);
265 
266 	return ret;
267 }
268 
269 /**
270  * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
271  * @vdev_mlme_obj:  VDEV MLME comp object
272  * @event_data_len: data size
273  * @event_data: event data
274  *
275  * API invokes connection SM to start station connection
276  *
277  * Return: SUCCESS on successful invocation of connection sm
278  *         FAILURE, if it fails due to any
279  */
280 static inline QDF_STATUS mlme_vdev_sta_conn_start(
281 				struct vdev_mlme_obj *vdev_mlme,
282 				uint16_t event_data_len, void *event_data)
283 {
284 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
285 
286 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
287 		ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
288 					vdev_mlme, event_data_len, event_data);
289 
290 	return ret;
291 }
292 
293 /**
294  * mlme_vdev_up_send - VDEV up operation
295  * @vdev_mlme_obj:  VDEV MLME comp object
296  * @event_data_len: data size
297  * @event_data: event data
298  *
299  * API invokes VDEV up operations
300  *
301  * Return: SUCCESS on successful completion of up operation
302  *         FAILURE, if it fails due to any
303  */
304 static inline QDF_STATUS mlme_vdev_up_send(
305 				struct vdev_mlme_obj *vdev_mlme,
306 				uint16_t event_data_len, void *event_data)
307 {
308 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
309 
310 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
311 		ret = vdev_mlme->ops->mlme_vdev_up_send(
312 					vdev_mlme, event_data_len, event_data);
313 
314 	return ret;
315 }
316 
317 /**
318  * mlme_vdev_notify_up_complete - VDEV up state transition notification
319  * @vdev_mlme_obj:  VDEV MLME comp object
320  * @event_data_len: data size
321  * @event_data: event data
322  *
323  * API notifies MLME on moving to UP state
324  *
325  * Return: SUCCESS on successful completion of up notification
326  *         FAILURE, if it fails due to any
327  */
328 static inline
329 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
330 					uint16_t event_data_len,
331 					void *event_data)
332 {
333 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
334 
335 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
336 		ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
337 					vdev_mlme, event_data_len, event_data);
338 
339 	return ret;
340 }
341 
342 /**
343  * mlme_vdev_notify_roam_start - VDEV Roaming notification
344  * @vdev_mlme_obj:  VDEV MLME comp object
345  * @event_len: data size
346  * @event_data: event data
347  *
348  * API notifies MLME on roaming
349  *
350  * Return: SUCCESS on successful completion of up notification
351  *         FAILURE, if it fails due to any
352  */
353 static inline
354 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
355 				       uint16_t event_len, void *event_data)
356 {
357 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
358 
359 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
360 		ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
361 								  event_len,
362 								  event_data);
363 
364 	return ret;
365 }
366 
367 /**
368  * mlme_vdev_update_beacon - Updates beacon
369  * @vdev_mlme_obj:  VDEV MLME comp object
370  * @op: beacon update type
371  * @event_data_len: data size
372  * @event_data: event data
373  *
374  * API updates/allocates/frees the beacon
375  *
376  * Return: SUCCESS on successful update of beacon
377  *         FAILURE, if it fails due to any
378  */
379 static inline
380 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
381 				   enum beacon_update_op op,
382 				   uint16_t event_data_len, void *event_data)
383 {
384 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
385 
386 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
387 		ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
388 						event_data_len, event_data);
389 
390 	return ret;
391 }
392 
393 /**
394  * mlme_vdev_disconnect_peers - Disconnect peers
395  * @vdev_mlme_obj:  VDEV MLME comp object
396  * @event_data_len: data size
397  * @event_data: event data
398  *
399  * API trigger stations disconnection with AP VDEV or AP disconnection with STA
400  * VDEV
401  *
402  * Return: SUCCESS on successful invocation of station disconnection
403  *         FAILURE, if it fails due to any
404  */
405 static inline QDF_STATUS mlme_vdev_disconnect_peers(
406 				struct vdev_mlme_obj *vdev_mlme,
407 				uint16_t event_data_len, void *event_data)
408 {
409 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
410 
411 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
412 		ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
413 					vdev_mlme, event_data_len, event_data);
414 
415 	return ret;
416 }
417 
418 /**
419  * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
420  * @vdev_mlme_obj:  VDEV MLME comp object
421  * @event_data_len: data size
422  * @event_data: event data
423  *
424  * API stops the CAC timer through DFS API
425  *
426  * Return: SUCCESS on successful CAC timer stop
427  *         FAILURE, if it fails due to any
428  */
429 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
430 				struct vdev_mlme_obj *vdev_mlme,
431 				uint16_t event_data_len, void *event_data)
432 {
433 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
434 
435 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
436 		ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
437 					vdev_mlme, event_data_len, event_data);
438 
439 	return ret;
440 }
441 
442 /**
443  * mlme_vdev_stop_send - Invokes VDEV stop operation
444  * @vdev_mlme_obj:  VDEV MLME comp object
445  * @event_data_len: data size
446  * @event_data: event data
447  *
448  * API invokes VDEV stop operation
449  *
450  * Return: SUCCESS on successful completion of stop operation
451  *         FAILURE, if it fails due to any
452  */
453 static inline QDF_STATUS mlme_vdev_stop_send(
454 				struct vdev_mlme_obj *vdev_mlme,
455 				uint16_t event_data_len, void *event_data)
456 {
457 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
458 
459 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
460 		ret = vdev_mlme->ops->mlme_vdev_stop_send(
461 					vdev_mlme, event_data_len, event_data);
462 
463 	return ret;
464 }
465 
466 /**
467  * mlme_vdev_stop_continue - VDEV stop response handling
468  * @vdev_mlme_obj:  VDEV MLME comp object
469  * @event_data_len: data size
470  * @event_data: event data
471  *
472  * API invokes VDEV stop response actions
473  *
474  * Return: SUCCESS on successful completion of stop response operation
475  *         FAILURE, if it fails due to any
476  */
477 static inline QDF_STATUS mlme_vdev_stop_continue(
478 				struct vdev_mlme_obj *vdev_mlme,
479 				uint16_t event_data_len, void *event_data)
480 {
481 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
482 
483 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
484 		ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
485 							      event_data_len,
486 							      event_data);
487 
488 	return ret;
489 }
490 
491 /**
492  * mlme_vdev_down_send - VDEV down operation
493  * @vdev_mlme_obj:  VDEV MLME comp object
494  * @event_data_len: data size
495  * @event_data: event data
496  *
497  * API invokes VDEV down operation
498  *
499  * Return: SUCCESS on successful completion of VDEV down operation
500  *         FAILURE, if it fails due to any
501  */
502 static inline QDF_STATUS mlme_vdev_down_send(
503 				struct vdev_mlme_obj *vdev_mlme,
504 				uint16_t event_data_len, void *event_data)
505 {
506 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
507 
508 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
509 		ret = vdev_mlme->ops->mlme_vdev_down_send(
510 					vdev_mlme, event_data_len, event_data);
511 
512 	return ret;
513 }
514 
515 /**
516  * mlme_vdev_notify_down_complete - VDEV init state transition notification
517  * @vdev_mlme_obj:  VDEV MLME comp object
518  * @event_data_len: data size
519  * @event_data: event data
520  *
521  * API notifies MLME on moving to INIT state
522  *
523  * Return: SUCCESS on successful completion of down notification
524  *         FAILURE, if it fails due to any
525  */
526 static inline QDF_STATUS mlme_vdev_notify_down_complete(
527 				struct vdev_mlme_obj *vdev_mlme,
528 				uint16_t event_data_len, void *event_data)
529 {
530 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
531 
532 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
533 		ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
534 					vdev_mlme, event_data_len, event_data);
535 
536 	return ret;
537 }
538 
539 /**
540  * mlme_vdev_notify_start_state_exit - VDEV SM start state exit notification
541  * @vdev_mlme_obj:  VDEV MLME comp object
542  *
543  * API notifies on start state exit
544  *
545  * Return: SUCCESS on successful completion of notification
546  *         FAILURE, if it fails due to any
547  */
548 static inline QDF_STATUS mlme_vdev_notify_start_state_exit(
549 				struct vdev_mlme_obj *vdev_mlme)
550 {
551 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
552 
553 	if ((vdev_mlme->ops) &&
554 	    vdev_mlme->ops->mlme_vdev_notify_start_state_exit)
555 		ret = vdev_mlme->ops->mlme_vdev_notify_start_state_exit(
556 								vdev_mlme);
557 
558 	return ret;
559 }
560 
561 /**
562  * mlme_vdev_is_newchan_no_cac - Checks new channel requires CAC
563  * @vdev_mlme_obj:  VDEV MLME comp object
564  *
565  * API checks whether Channel needs CAC period,
566  * if yes, it moves to SUSPEND_RESTART to disconnect stations before
567  * sending RESTART to FW, otherwise, it moves to RESTART_PROGRESS substate
568  *
569  * Return: SUCCESS to move to RESTART_PROGRESS substate
570  *         FAILURE, move to SUSPEND_RESTART state
571  */
572 static inline QDF_STATUS mlme_vdev_is_newchan_no_cac(
573 				struct vdev_mlme_obj *vdev_mlme)
574 {
575 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
576 
577 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_is_newchan_no_cac)
578 		ret = vdev_mlme->ops->mlme_vdev_is_newchan_no_cac(vdev_mlme);
579 
580 	return ret;
581 }
582 
583 #ifdef VDEV_SM_LOCK_SUPPORT
584 /**
585  * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
586  * @vdev_mlme_obj:  VDEV MLME comp object
587  *
588  * Creates VDEV MLME spinlock
589  *
590  * Return: void
591  */
592 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
593 {
594 	qdf_spinlock_create(&vdev_mlme->sm_lock);
595 }
596 
597 /**
598  * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
599  * @vdev_mlme_obj:  VDEV MLME comp object
600  *
601  * Destroy VDEV MLME spinlock
602  *
603  * Return: void
604  */
605 static inline void mlme_vdev_sm_spinlock_destroy(
606 						struct vdev_mlme_obj *vdev_mlme)
607 {
608 	qdf_spinlock_destroy(&vdev_mlme->sm_lock);
609 }
610 
611 /**
612  * mlme_vdev_sm_spin_lock - acquire spinlock
613  * @vdev_mlme_obj:  vdev mlme comp object
614  *
615  * acquire vdev mlme spinlock
616  *
617  * return: void
618  */
619 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
620 {
621 	qdf_spin_lock_bh(&vdev_mlme->sm_lock);
622 }
623 
624 /**
625  * mlme_vdev_sm_spin_unlock - release spinlock
626  * @vdev_mlme_obj:  vdev mlme comp object
627  *
628  * release vdev mlme spinlock
629  *
630  * return: void
631  */
632 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
633 {
634 	qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
635 }
636 
637 /**
638  * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex
639  * @vdev_mlme_obj:  VDEV MLME comp object
640  *
641  * Creates VDEV MLME cmd mutex
642  *
643  * Return: void
644  */
645 static inline void
646 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
647 {
648 	qdf_mutex_create(&vdev_mlme->vdev_cmd_lock);
649 }
650 
651 /**
652  * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex
653  * @vdev_mlme_obj:  VDEV MLME comp object
654  *
655  * Destroy VDEV MLME cmd mutex
656  *
657  * Return: void
658  */
659 static inline void
660 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
661 {
662 	qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock);
663 }
664 
665 /**
666  * mlme_vdev_cmd_mutex_acquire - acquire mutex
667  * @vdev_mlme_obj:  vdev mlme comp object
668  *
669  * acquire vdev mlme cmd mutex
670  *
671  * return: void
672  */
673 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
674 {
675 	qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock);
676 }
677 
678 /**
679  * mlme_vdev_cmd_mutex_release - release mutex
680  * @vdev_mlme_obj:  vdev mlme comp object
681  *
682  * release vdev mlme cmd mutex
683  *
684  * return: void
685  */
686 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
687 {
688 	qdf_mutex_release(&vdev_mlme->vdev_cmd_lock);
689 }
690 
691 #else
692 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
693 {
694 	mlme_info("VDEV SM lock is disabled!!!");
695 }
696 
697 static inline void mlme_vdev_sm_spinlock_destroy(
698 						struct vdev_mlme_obj *vdev_mlme)
699 {
700 	mlme_info("VDEV SM lock is disabled!!!");
701 }
702 
703 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
704 {
705 }
706 
707 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
708 {
709 }
710 
711 static inline void
712 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
713 {
714 	mlme_info("VDEV CMD lock is disabled!!!");
715 }
716 
717 static inline void
718 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
719 {
720 	mlme_info("VDEV CMD lock is disabled!!!");
721 }
722 
723 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
724 {
725 }
726 
727 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
728 {
729 }
730 #endif
731