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