xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/include/wlan_vdev_mlme.h (revision ad85c389289a03e320cd08dea21861f9857892fc)
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 any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: Define VDEV MLME structure and APIs
19  */
20 #ifndef _WLAN_VDEV_MLME_H_
21 #define _WLAN_VDEV_MLME_H_
22 
23 struct vdev_mlme_obj;
24 
25 /**
26  * struct vdev_mlme_proto - VDEV protocol strucutre
27  */
28 struct vdev_mlme_proto {
29 };
30 
31 /**
32  * enum beacon_update_op - Beacon update op type
33  * @BEACON_INIT:      Initialize beacon
34  * @BEACON_REINIT:    Re-initialize beacon
35  * @BEACON_UPDATE:    Update dynamic fields of beacon
36  * @BEACON_CSA:       Enable CSA IE
37  * @BEACON_FREE:      Beacon buffer free
38  */
39 enum beacon_update_op {
40 	BEACON_INIT,
41 	BEACON_REINIT,
42 	BEACON_UPDATE,
43 	BEACON_CSA,
44 	BEACON_FREE,
45 };
46 
47 /**
48  * enum vdev_cmd_type - Command type
49  * @START_REQ:      Start request
50  * @RESTART_REQ:    Restart request
51  */
52 enum vdev_cmd_type {
53 	START_REQ,
54 	RESTART_REQ,
55 };
56 
57 /**
58  * struct vdev_mlme_ops - VDEV MLME operation callbacks structure
59  * @mlme_vdev_validate_basic_params:    callback to validate VDEV basic params
60  * @mlme_vdev_reset_proto_params:       callback to Reset protocol params
61  * @mlme_vdev_start_send:               callback to initiate actions of VDEV
62  *                                      MLME start operation
63  * @mlme_vdev_restart_send:             callback to initiate actions of VDEV
64  *                                      MLME restart operation
65  * @mlme_vdev_stop_start_send:          callback to block start/restart VDEV
66  *                                      request command
67  * @mlme_vdev_start_continue:           callback to initiate operations on
68  *                                      LMAC/FW start response
69  * @mlme_vdev_up_send:                  callback to initiate actions of VDEV
70  *                                      MLME up operation
71  * @mlme_vdev_notify_up_complete:       callback to notify VDEV MLME on moving
72  *                                      to UP state
73  * @mlme_vdev_notify_roam_start:        callback to initiate roaming
74  * @mlme_vdev_update_beacon:            callback to initiate beacon update
75  * @mlme_vdev_disconnect_peers:         callback to initiate disconnection of
76  *                                      peers
77  * @mlme_vdev_dfs_cac_timer_stop:       callback to stop the DFS CAC timer
78  * @mlme_vdev_stop_send:                callback to initiate actions of VDEV
79  *                                      MLME stop operation
80  * @mlme_vdev_stop_continue:            callback to initiate operations on
81  *                                      LMAC/FW stop response
82  * @mlme_vdev_bss_peer_delete_continue: callback to initiate operations on BSS
83  *                                      peer delete completion
84  * @mlme_vdev_down_send:                callback to initiate actions of VDEV
85  *                                      MLME down operation
86  */
87 struct vdev_mlme_ops {
88 	QDF_STATUS (*mlme_vdev_validate_basic_params)(
89 				struct vdev_mlme_obj *vdev_mlme,
90 				uint16_t event_data_len, void *event_data);
91 	QDF_STATUS (*mlme_vdev_reset_proto_params)(
92 				struct vdev_mlme_obj *vdev_mlme,
93 				uint16_t event_data_len, void *event_data);
94 	QDF_STATUS (*mlme_vdev_start_send)(
95 				struct vdev_mlme_obj *vdev_mlme,
96 				uint16_t event_data_len, void *event_data);
97 	QDF_STATUS (*mlme_vdev_restart_send)(
98 				struct vdev_mlme_obj *vdev_mlme,
99 				uint16_t event_data_len, void *event_data);
100 	QDF_STATUS (*mlme_vdev_stop_start_send)(
101 				struct vdev_mlme_obj *vdev_mlme,
102 				enum vdev_cmd_type type,
103 				uint16_t event_data_len, void *event_data);
104 	QDF_STATUS (*mlme_vdev_start_continue)(
105 				struct vdev_mlme_obj *vdev_mlme,
106 				uint16_t event_data_len, void *event_data);
107 	QDF_STATUS (*mlme_vdev_sta_conn_start)(
108 				struct vdev_mlme_obj *vdev_mlme,
109 				uint16_t event_data_len, void *event_data);
110 	QDF_STATUS (*mlme_vdev_start_req_failed)(
111 				struct vdev_mlme_obj *vdev_mlme,
112 				uint16_t event_data_len, void *event_data);
113 	QDF_STATUS (*mlme_vdev_up_send)(
114 				struct vdev_mlme_obj *vdev_mlme,
115 				uint16_t event_data_len, void *event_data);
116 	QDF_STATUS (*mlme_vdev_notify_up_complete)(
117 				struct vdev_mlme_obj *vdev_mlme,
118 				uint16_t event_data_len, void *event_data);
119 	QDF_STATUS (*mlme_vdev_notify_roam_start)(
120 				struct vdev_mlme_obj *vdev_mlme,
121 				uint16_t event_data_len, void *event_data);
122 	QDF_STATUS (*mlme_vdev_update_beacon)(
123 				struct vdev_mlme_obj *vdev_mlme,
124 				enum beacon_update_op op,
125 				uint16_t event_data_len, void *event_data);
126 	QDF_STATUS (*mlme_vdev_disconnect_peers)(
127 				struct vdev_mlme_obj *vdev_mlme,
128 				uint16_t event_data_len, void *event_data);
129 	QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)(
130 				struct vdev_mlme_obj *vdev_mlme,
131 				uint16_t event_data_len, void *event_data);
132 	QDF_STATUS (*mlme_vdev_stop_send)(
133 				struct vdev_mlme_obj *vdev_mlme,
134 				uint16_t event_data_len, void *event_data);
135 	QDF_STATUS (*mlme_vdev_stop_continue)(
136 				struct vdev_mlme_obj *vdev_mlme,
137 				uint16_t event_data_len, void *event_data);
138 	QDF_STATUS (*mlme_vdev_down_send)(
139 				struct vdev_mlme_obj *vdev_mlme,
140 				uint16_t event_data_len, void *event_data);
141 	QDF_STATUS (*mlme_vdev_notify_down_complete)(
142 				struct vdev_mlme_obj *vdev_mlme,
143 				uint16_t event_data_len, void *event_data);
144 };
145 
146 /**
147  * struct vdev_mlme_obj - VDEV MLME component object
148  * @vdev_proto:           VDEV MLME proto substructure
149  * @sm_lock:              VDEV SM lock
150  * @vdev_cmd_lock:        VDEV MLME command atomicity
151  * @sm_hdl:               VDEV SM handle
152  * @ops:                  VDEV MLME callback table
153  * @ext_vdev_ptr:         VDEV MLME legacy pointer
154  */
155 struct vdev_mlme_obj {
156 	struct vdev_mlme_proto vdev_proto;
157 #ifdef VDEV_SM_LOCK_SUPPORT
158 	qdf_spinlock_t sm_lock;
159 	qdf_mutex_t vdev_cmd_lock;
160 #endif
161 	struct wlan_sm *sm_hdl;
162 	struct wlan_objmgr_vdev *vdev;
163 	struct vdev_mlme_ops *ops;
164 	void *ext_vdev_ptr;
165 };
166 
167 /**
168  * mlme_vdev_validate_basic_params - Validate basic params
169  * @vdev_mlme_obj:  VDEV MLME comp object
170  * @event_data_len: data size
171  * @event_data: event data
172  *
173  * API validate MLME VDEV basic parameters
174  *
175  * Return: SUCCESS on successful validation
176  *         FAILURE, if any parameter is not initialized
177  */
178 static inline QDF_STATUS mlme_vdev_validate_basic_params(
179 				struct vdev_mlme_obj *vdev_mlme,
180 				uint16_t event_data_len, void *event_data)
181 {
182 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
183 
184 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
185 		ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
186 					vdev_mlme, event_data_len, event_data);
187 
188 	return ret;
189 }
190 
191 /**
192  * mlme_vdev_reset_proto_params - Reset VDEV protocol params
193  * @vdev_mlme_obj:  VDEV MLME comp object
194  * @event_data_len: data size
195  * @event_data: event data
196  *
197  * API resets the protocol params fo vdev
198  *
199  * Return: SUCCESS on successful reset
200  *         FAILURE, if it fails due to any
201  */
202 static inline QDF_STATUS mlme_vdev_reset_proto_params(
203 				struct vdev_mlme_obj *vdev_mlme,
204 				uint16_t event_data_len, void *event_data)
205 {
206 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
207 
208 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
209 		ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
210 					vdev_mlme, event_data_len, event_data);
211 
212 	return ret;
213 }
214 
215 /**
216  * mlme_vdev_start_send - Invokes VDEV start operation
217  * @vdev_mlme_obj:  VDEV MLME comp object
218  * @event_data_len: data size
219  * @event_data: event data
220  *
221  * API invokes VDEV start operation
222  *
223  * Return: SUCCESS on successful completion of start operation
224  *         FAILURE, if it fails due to any
225  */
226 static inline QDF_STATUS mlme_vdev_start_send(
227 				struct vdev_mlme_obj *vdev_mlme,
228 				uint16_t event_data_len, void *event_data)
229 {
230 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
231 
232 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
233 		ret = vdev_mlme->ops->mlme_vdev_start_send(
234 					vdev_mlme, event_data_len, event_data);
235 
236 	return ret;
237 }
238 
239 /**
240  * mlme_vdev_restart_send - Invokes VDEV restart operation
241  * @vdev_mlme_obj:  VDEV MLME comp object
242  * @event_data_len: data size
243  * @event_data: event data
244  *
245  * API invokes VDEV restart operation
246  *
247  * Return: SUCCESS on successful completion of restart operation
248  *         FAILURE, if it fails due to any
249  */
250 static inline QDF_STATUS mlme_vdev_restart_send(
251 				struct vdev_mlme_obj *vdev_mlme,
252 				uint16_t event_data_len, void *event_data)
253 {
254 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
255 
256 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
257 		ret = vdev_mlme->ops->mlme_vdev_restart_send(
258 					vdev_mlme, event_data_len, event_data);
259 
260 	return ret;
261 }
262 
263 /**
264  * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
265  * @vdev_mlme_obj:  VDEV MLME comp object
266  * @restart: restart req/start req
267  * @event_data_len: data size
268  * @event_data: event data
269  *
270  * API invokes stops pending VDEV restart operation
271  *
272  * Return: SUCCESS alsways
273  */
274 static inline QDF_STATUS mlme_vdev_stop_start_send(
275 				struct vdev_mlme_obj *vdev_mlme,
276 				uint8_t restart,
277 				uint16_t event_data_len, void *event_data)
278 {
279 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
280 
281 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
282 		ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
283 				vdev_mlme, restart, event_data_len, event_data);
284 
285 	return ret;
286 }
287 
288 /**
289  * mlme_vdev_start_continue - VDEV start response handling
290  * @vdev_mlme_obj:  VDEV MLME comp object
291  * @event_data_len: data size
292  * @event_data: event data
293  *
294  * API invokes VDEV start response actions
295  *
296  * Return: SUCCESS on successful completion of start response operation
297  *         FAILURE, if it fails due to any
298  */
299 static inline QDF_STATUS mlme_vdev_start_continue(
300 				struct vdev_mlme_obj *vdev_mlme,
301 				uint16_t event_data_len, void *event_data)
302 {
303 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
304 
305 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
306 		ret = vdev_mlme->ops->mlme_vdev_start_continue(
307 					vdev_mlme, event_data_len, event_data);
308 
309 	return ret;
310 }
311 
312 /**
313  * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
314  * @vdev_mlme_obj:  VDEV MLME comp object
315  * @event_data_len: data size
316  * @event_data: event data
317  *
318  * API invokes on START fail response
319  *
320  * Return: SUCCESS on successful invocation of callback
321  *         FAILURE, if it fails due to any
322  */
323 static inline QDF_STATUS mlme_vdev_start_req_failed(
324 				struct vdev_mlme_obj *vdev_mlme,
325 				uint16_t event_data_len, void *event_data)
326 {
327 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
328 
329 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
330 		ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
331 					vdev_mlme, event_data_len, event_data);
332 
333 	return ret;
334 }
335 
336 /**
337  * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
338  * @vdev_mlme_obj:  VDEV MLME comp object
339  * @event_data_len: data size
340  * @event_data: event data
341  *
342  * API invokes connection SM to start station connection
343  *
344  * Return: SUCCESS on successful invocation of connection sm
345  *         FAILURE, if it fails due to any
346  */
347 static inline QDF_STATUS mlme_vdev_sta_conn_start(
348 				struct vdev_mlme_obj *vdev_mlme,
349 				uint16_t event_data_len, void *event_data)
350 {
351 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
352 
353 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
354 		ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
355 					vdev_mlme, event_data_len, event_data);
356 
357 	return ret;
358 }
359 
360 /**
361  * mlme_vdev_up_send - VDEV up operation
362  * @vdev_mlme_obj:  VDEV MLME comp object
363  * @event_data_len: data size
364  * @event_data: event data
365  *
366  * API invokes VDEV up operations
367  *
368  * Return: SUCCESS on successful completion of up operation
369  *         FAILURE, if it fails due to any
370  */
371 static inline QDF_STATUS mlme_vdev_up_send(
372 				struct vdev_mlme_obj *vdev_mlme,
373 				uint16_t event_data_len, void *event_data)
374 {
375 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
376 
377 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
378 		ret = vdev_mlme->ops->mlme_vdev_up_send(
379 					vdev_mlme, event_data_len, event_data);
380 
381 	return ret;
382 }
383 
384 /**
385  * mlme_vdev_notify_up_complete - VDEV up state transition notification
386  * @vdev_mlme_obj:  VDEV MLME comp object
387  * @event_data_len: data size
388  * @event_data: event data
389  *
390  * API notifies MLME on moving to UP state
391  *
392  * Return: SUCCESS on successful completion of up notification
393  *         FAILURE, if it fails due to any
394  */
395 static inline
396 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
397 					uint16_t event_data_len,
398 					void *event_data)
399 {
400 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
401 
402 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
403 		ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
404 					vdev_mlme, event_data_len, event_data);
405 
406 	return ret;
407 }
408 
409 /**
410  * mlme_vdev_notify_roam_start - VDEV Roaming notification
411  * @vdev_mlme_obj:  VDEV MLME comp object
412  * @event_len: data size
413  * @event_data: event data
414  *
415  * API notifies MLME on roaming
416  *
417  * Return: SUCCESS on successful completion of up notification
418  *         FAILURE, if it fails due to any
419  */
420 static inline
421 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
422 				       uint16_t event_len, void *event_data)
423 {
424 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
425 
426 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
427 		ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
428 								  event_len,
429 								  event_data);
430 
431 	return ret;
432 }
433 
434 /**
435  * mlme_vdev_update_beacon - Updates beacon
436  * @vdev_mlme_obj:  VDEV MLME comp object
437  * @op: beacon update type
438  * @event_data_len: data size
439  * @event_data: event data
440  *
441  * API updates/allocates/frees the beacon
442  *
443  * Return: SUCCESS on successful update of beacon
444  *         FAILURE, if it fails due to any
445  */
446 static inline
447 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
448 				   enum beacon_update_op op,
449 				   uint16_t event_data_len, void *event_data)
450 {
451 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
452 
453 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
454 		ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
455 						event_data_len, event_data);
456 
457 	return ret;
458 }
459 
460 /**
461  * mlme_vdev_disconnect_peers - Disconnect peers
462  * @vdev_mlme_obj:  VDEV MLME comp object
463  * @event_data_len: data size
464  * @event_data: event data
465  *
466  * API trigger stations disconnection with AP VDEV or AP disconnection with STA
467  * VDEV
468  *
469  * Return: SUCCESS on successful invocation of station disconnection
470  *         FAILURE, if it fails due to any
471  */
472 static inline QDF_STATUS mlme_vdev_disconnect_peers(
473 				struct vdev_mlme_obj *vdev_mlme,
474 				uint16_t event_data_len, void *event_data)
475 {
476 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
477 
478 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
479 		ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
480 					vdev_mlme, event_data_len, event_data);
481 
482 	return ret;
483 }
484 
485 /**
486  * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
487  * @vdev_mlme_obj:  VDEV MLME comp object
488  * @event_data_len: data size
489  * @event_data: event data
490  *
491  * API stops the CAC timer through DFS API
492  *
493  * Return: SUCCESS on successful CAC timer stop
494  *         FAILURE, if it fails due to any
495  */
496 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
497 				struct vdev_mlme_obj *vdev_mlme,
498 				uint16_t event_data_len, void *event_data)
499 {
500 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
501 
502 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
503 		ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
504 					vdev_mlme, event_data_len, event_data);
505 
506 	return ret;
507 }
508 
509 /**
510  * mlme_vdev_stop_send - Invokes VDEV stop operation
511  * @vdev_mlme_obj:  VDEV MLME comp object
512  * @event_data_len: data size
513  * @event_data: event data
514  *
515  * API invokes VDEV stop operation
516  *
517  * Return: SUCCESS on successful completion of stop operation
518  *         FAILURE, if it fails due to any
519  */
520 static inline QDF_STATUS mlme_vdev_stop_send(
521 				struct vdev_mlme_obj *vdev_mlme,
522 				uint16_t event_data_len, void *event_data)
523 {
524 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
525 
526 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
527 		ret = vdev_mlme->ops->mlme_vdev_stop_send(
528 					vdev_mlme, event_data_len, event_data);
529 
530 	return ret;
531 }
532 
533 /**
534  * mlme_vdev_stop_continue - VDEV stop response handling
535  * @vdev_mlme_obj:  VDEV MLME comp object
536  * @event_data_len: data size
537  * @event_data: event data
538  *
539  * API invokes VDEV stop response actions
540  *
541  * Return: SUCCESS on successful completion of stop response operation
542  *         FAILURE, if it fails due to any
543  */
544 static inline QDF_STATUS mlme_vdev_stop_continue(
545 				struct vdev_mlme_obj *vdev_mlme,
546 				uint16_t event_data_len, void *event_data)
547 {
548 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
549 
550 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
551 		ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
552 							      event_data_len,
553 							      event_data);
554 
555 	return ret;
556 }
557 
558 /**
559  * mlme_vdev_down_send - VDEV down operation
560  * @vdev_mlme_obj:  VDEV MLME comp object
561  * @event_data_len: data size
562  * @event_data: event data
563  *
564  * API invokes VDEV down operation
565  *
566  * Return: SUCCESS on successful completion of VDEV down operation
567  *         FAILURE, if it fails due to any
568  */
569 static inline QDF_STATUS mlme_vdev_down_send(
570 				struct vdev_mlme_obj *vdev_mlme,
571 				uint16_t event_data_len, void *event_data)
572 {
573 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
574 
575 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
576 		ret = vdev_mlme->ops->mlme_vdev_down_send(
577 					vdev_mlme, event_data_len, event_data);
578 
579 	return ret;
580 }
581 
582 /**
583  * mlme_vdev_notify_down_complete - VDEV init state transition notification
584  * @vdev_mlme_obj:  VDEV MLME comp object
585  * @event_data_len: data size
586  * @event_data: event data
587  *
588  * API notifies MLME on moving to INIT state
589  *
590  * Return: SUCCESS on successful completion of down notification
591  *         FAILURE, if it fails due to any
592  */
593 static inline QDF_STATUS mlme_vdev_notify_down_complete(
594 				struct vdev_mlme_obj *vdev_mlme,
595 				uint16_t event_data_len, void *event_data)
596 {
597 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
598 
599 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
600 		ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
601 					vdev_mlme, event_data_len, event_data);
602 
603 	return ret;
604 }
605 
606 #endif
607