xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h (revision 1397a33f48ea6455be40871470b286e535820eb8)
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 #ifdef CMN_VDEV_MLME_SM_ENABLE
27 /**
28  * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM
29  * @vdev_mlme: MLME VDEV comp object
30  * @event: MLME event
31  * @event_data_len: data size
32  * @event_data: event data
33  *
34  * API to dispatch event to VDEV MLME SM
35  *
36  * Return: SUCCESS: on handling event
37  *         FAILURE: on ignoring the event
38  */
39 QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme,
40 				      enum wlan_vdev_sm_evt event,
41 				      uint16_t event_data_len,
42 				      void *event_data);
43 
44 #ifdef SM_ENG_HIST_ENABLE
45 /**
46  * mlme_vdev_sm_history_print() - Prints SM history
47  * @vdev_mlme: MLME VDEV comp object
48  *
49  * API to print SM history
50  *
51  * Return: void
52  */
53 void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme);
54 #endif
55 
56 #endif
57 
58 /**
59  * mlme_vdev_sm_create - Invoke SME creation for VDEV
60  * @vdev_mlme_obj:  VDEV MLME comp object
61  *
62  * API allocates VDEV MLME SM and initializes SM lock
63  *
64  * Return: SUCCESS on successful allocation
65  *         FAILURE, if registration fails
66  */
67 QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme);
68 
69 /**
70  * mlme_vdev_sm_destroy - Invoke SME destroy for VDEV
71  * @vdev_mlme_obj:  VDEV MLME comp object
72  *
73  * API frees VDEV MLME SM and destroys the SM lock
74  *
75  * Return: SUCCESS on successful destroy
76  *         FAILURE, if registration fails
77  */
78 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme);
79 
80 #ifdef VDEV_SM_LOCK_SUPPORT
81 /**
82  * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
83  * @vdev_mlme_obj:  VDEV MLME comp object
84  *
85  * Creates VDEV MLME spinlock
86  *
87  * Return: void
88  */
89 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
90 {
91 	qdf_spinlock_create(&vdev_mlme->sm_lock);
92 }
93 
94 /**
95  * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
96  * @vdev_mlme_obj:  VDEV MLME comp object
97  *
98  * Destroy VDEV MLME spinlock
99  *
100  * Return: void
101  */
102 static inline void mlme_vdev_sm_spinlock_destroy(
103 						struct vdev_mlme_obj *vdev_mlme)
104 {
105 	qdf_spinlock_destroy(&vdev_mlme->sm_lock);
106 }
107 
108 /**
109  * mlme_vdev_sm_spin_lock - acquire spinlock
110  * @vdev_mlme_obj:  vdev mlme comp object
111  *
112  * acquire vdev mlme spinlock
113  *
114  * return: void
115  */
116 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
117 {
118 	qdf_spin_lock_bh(&vdev_mlme->sm_lock);
119 }
120 
121 /**
122  * mlme_vdev_sm_spin_unlock - release spinlock
123  * @vdev_mlme_obj:  vdev mlme comp object
124  *
125  * release vdev mlme spinlock
126  *
127  * return: void
128  */
129 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
130 {
131 	qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
132 }
133 
134 /**
135  * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex
136  * @vdev_mlme_obj:  VDEV MLME comp object
137  *
138  * Creates VDEV MLME cmd mutex
139  *
140  * Return: void
141  */
142 static inline void
143 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
144 {
145 	qdf_mutex_create(&vdev_mlme->vdev_cmd_lock);
146 }
147 
148 /**
149  * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex
150  * @vdev_mlme_obj:  VDEV MLME comp object
151  *
152  * Destroy VDEV MLME cmd mutex
153  *
154  * Return: void
155  */
156 static inline void
157 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
158 {
159 	qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock);
160 }
161 
162 /**
163  * mlme_vdev_cmd_mutex_acquire - acquire mutex
164  * @vdev_mlme_obj:  vdev mlme comp object
165  *
166  * acquire vdev mlme cmd mutex
167  *
168  * return: void
169  */
170 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
171 {
172 	qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock);
173 }
174 
175 /**
176  * mlme_vdev_cmd_mutex_release - release mutex
177  * @vdev_mlme_obj:  vdev mlme comp object
178  *
179  * release vdev mlme cmd mutex
180  *
181  * return: void
182  */
183 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
184 {
185 	qdf_mutex_release(&vdev_mlme->vdev_cmd_lock);
186 }
187 
188 #else
189 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
190 {
191 	mlme_info("VDEV SM lock is disabled!!!");
192 }
193 
194 static inline void mlme_vdev_sm_spinlock_destroy(
195 						struct vdev_mlme_obj *vdev_mlme)
196 {
197 	mlme_info("VDEV SM lock is disabled!!!");
198 }
199 
200 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
201 {
202 }
203 
204 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
205 {
206 }
207 
208 static inline void
209 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
210 {
211 	mlme_info("VDEV CMD lock is disabled!!!");
212 }
213 
214 static inline void
215 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
216 {
217 	mlme_info("VDEV CMD lock is disabled!!!");
218 }
219 
220 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
221 {
222 }
223 
224 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
225 {
226 }
227 #endif
228 #endif
229