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