xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.h (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
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 #ifdef VDEV_SM_LOCK_SUPPORT
101 /**
102  * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
103  * @vdev_mlme_obj:  VDEV MLME comp object
104  *
105  * Creates VDEV MLME spinlock
106  *
107  * Return: void
108  */
109 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
110 {
111 	qdf_spinlock_create(&vdev_mlme->sm_lock);
112 }
113 
114 /**
115  * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
116  * @vdev_mlme_obj:  VDEV MLME comp object
117  *
118  * Destroy VDEV MLME spinlock
119  *
120  * Return: void
121  */
122 static inline void mlme_vdev_sm_spinlock_destroy(
123 						struct vdev_mlme_obj *vdev_mlme)
124 {
125 	qdf_spinlock_destroy(&vdev_mlme->sm_lock);
126 }
127 
128 /**
129  * mlme_vdev_sm_spin_lock - acquire spinlock
130  * @vdev_mlme_obj:  vdev mlme comp object
131  *
132  * acquire vdev mlme spinlock
133  *
134  * return: void
135  */
136 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
137 {
138 	qdf_spin_lock_bh(&vdev_mlme->sm_lock);
139 }
140 
141 /**
142  * mlme_vdev_sm_spin_unlock - release spinlock
143  * @vdev_mlme_obj:  vdev mlme comp object
144  *
145  * release vdev mlme spinlock
146  *
147  * return: void
148  */
149 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
150 {
151 	qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
152 }
153 
154 /**
155  * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex
156  * @vdev_mlme_obj:  VDEV MLME comp object
157  *
158  * Creates VDEV MLME cmd mutex
159  *
160  * Return: void
161  */
162 static inline void
163 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
164 {
165 	qdf_mutex_create(&vdev_mlme->vdev_cmd_lock);
166 }
167 
168 /**
169  * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex
170  * @vdev_mlme_obj:  VDEV MLME comp object
171  *
172  * Destroy VDEV MLME cmd mutex
173  *
174  * Return: void
175  */
176 static inline void
177 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
178 {
179 	qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock);
180 }
181 
182 /**
183  * mlme_vdev_cmd_mutex_acquire - acquire mutex
184  * @vdev_mlme_obj:  vdev mlme comp object
185  *
186  * acquire vdev mlme cmd mutex
187  *
188  * return: void
189  */
190 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
191 {
192 	qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock);
193 }
194 
195 /**
196  * mlme_vdev_cmd_mutex_release - release mutex
197  * @vdev_mlme_obj:  vdev mlme comp object
198  *
199  * release vdev mlme cmd mutex
200  *
201  * return: void
202  */
203 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
204 {
205 	qdf_mutex_release(&vdev_mlme->vdev_cmd_lock);
206 }
207 
208 #else
209 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
210 {
211 	mlme_info("VDEV SM lock is disabled!!!");
212 }
213 
214 static inline void mlme_vdev_sm_spinlock_destroy(
215 						struct vdev_mlme_obj *vdev_mlme)
216 {
217 	mlme_info("VDEV SM lock is disabled!!!");
218 }
219 
220 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
221 {
222 }
223 
224 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
225 {
226 }
227 
228 static inline void
229 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
230 {
231 	mlme_info("VDEV CMD lock is disabled!!!");
232 }
233 
234 static inline void
235 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
236 {
237 	mlme_info("VDEV CMD lock is disabled!!!");
238 }
239 
240 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
241 {
242 }
243 
244 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
245 {
246 }
247 #endif
248