xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/include/wlan_vdev_mlme.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: 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 	qdf_mutex_t vdev_cmd_lock;
179 #endif
180 	struct wlan_sm *sm_hdl;
181 	struct wlan_objmgr_vdev *vdev;
182 	struct vdev_mlme_ops *ops;
183 	void *ext_vdev_ptr;
184 };
185 
186 /**
187  * mlme_vdev_validate_basic_params - Validate basic params
188  * @vdev_mlme_obj:  VDEV MLME comp object
189  * @event_data_len: data size
190  * @event_data: event data
191  *
192  * API validate MLME VDEV basic parameters
193  *
194  * Return: SUCCESS on successful validation
195  *         FAILURE, if any parameter is not initialized
196  */
197 static inline QDF_STATUS mlme_vdev_validate_basic_params(
198 				struct vdev_mlme_obj *vdev_mlme,
199 				uint16_t event_data_len, void *event_data)
200 {
201 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
202 
203 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
204 		ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
205 					vdev_mlme, event_data_len, event_data);
206 
207 	return ret;
208 }
209 
210 /**
211  * mlme_vdev_reset_proto_params - Reset VDEV protocol params
212  * @vdev_mlme_obj:  VDEV MLME comp object
213  * @event_data_len: data size
214  * @event_data: event data
215  *
216  * API resets the protocol params fo vdev
217  *
218  * Return: SUCCESS on successful reset
219  *         FAILURE, if it fails due to any
220  */
221 static inline QDF_STATUS mlme_vdev_reset_proto_params(
222 				struct vdev_mlme_obj *vdev_mlme,
223 				uint16_t event_data_len, void *event_data)
224 {
225 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
226 
227 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
228 		ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
229 					vdev_mlme, event_data_len, event_data);
230 
231 	return ret;
232 }
233 
234 /**
235  * mlme_vdev_start_send - Invokes VDEV start operation
236  * @vdev_mlme_obj:  VDEV MLME comp object
237  * @event_data_len: data size
238  * @event_data: event data
239  *
240  * API invokes VDEV start operation
241  *
242  * Return: SUCCESS on successful completion of start operation
243  *         FAILURE, if it fails due to any
244  */
245 static inline QDF_STATUS mlme_vdev_start_send(
246 				struct vdev_mlme_obj *vdev_mlme,
247 				uint16_t event_data_len, void *event_data)
248 {
249 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
250 
251 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
252 		ret = vdev_mlme->ops->mlme_vdev_start_send(
253 					vdev_mlme, event_data_len, event_data);
254 
255 	return ret;
256 }
257 
258 /**
259  * mlme_vdev_restart_send - Invokes VDEV restart operation
260  * @vdev_mlme_obj:  VDEV MLME comp object
261  * @event_data_len: data size
262  * @event_data: event data
263  *
264  * API invokes VDEV restart operation
265  *
266  * Return: SUCCESS on successful completion of restart operation
267  *         FAILURE, if it fails due to any
268  */
269 static inline QDF_STATUS mlme_vdev_restart_send(
270 				struct vdev_mlme_obj *vdev_mlme,
271 				uint16_t event_data_len, void *event_data)
272 {
273 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
274 
275 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
276 		ret = vdev_mlme->ops->mlme_vdev_restart_send(
277 					vdev_mlme, event_data_len, event_data);
278 
279 	return ret;
280 }
281 
282 /**
283  * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
284  * @vdev_mlme_obj:  VDEV MLME comp object
285  * @restart: restart req/start req
286  * @event_data_len: data size
287  * @event_data: event data
288  *
289  * API invokes stops pending VDEV restart operation
290  *
291  * Return: SUCCESS alsways
292  */
293 static inline QDF_STATUS mlme_vdev_stop_start_send(
294 				struct vdev_mlme_obj *vdev_mlme,
295 				uint8_t restart,
296 				uint16_t event_data_len, void *event_data)
297 {
298 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
299 
300 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
301 		ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
302 				vdev_mlme, restart, event_data_len, event_data);
303 
304 	return ret;
305 }
306 
307 /**
308  * mlme_vdev_start_continue - VDEV start response handling
309  * @vdev_mlme_obj:  VDEV MLME comp object
310  * @event_data_len: data size
311  * @event_data: event data
312  *
313  * API invokes VDEV start response actions
314  *
315  * Return: SUCCESS on successful completion of start response operation
316  *         FAILURE, if it fails due to any
317  */
318 static inline QDF_STATUS mlme_vdev_start_continue(
319 				struct vdev_mlme_obj *vdev_mlme,
320 				uint16_t event_data_len, void *event_data)
321 {
322 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
323 
324 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
325 		ret = vdev_mlme->ops->mlme_vdev_start_continue(
326 					vdev_mlme, event_data_len, event_data);
327 
328 	return ret;
329 }
330 
331 /**
332  * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
333  * @vdev_mlme_obj:  VDEV MLME comp object
334  * @event_data_len: data size
335  * @event_data: event data
336  *
337  * API invokes on START fail response
338  *
339  * Return: SUCCESS on successful invocation of callback
340  *         FAILURE, if it fails due to any
341  */
342 static inline QDF_STATUS mlme_vdev_start_req_failed(
343 				struct vdev_mlme_obj *vdev_mlme,
344 				uint16_t event_data_len, void *event_data)
345 {
346 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
347 
348 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
349 		ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
350 					vdev_mlme, event_data_len, event_data);
351 
352 	return ret;
353 }
354 
355 /**
356  * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
357  * @vdev_mlme_obj:  VDEV MLME comp object
358  * @event_data_len: data size
359  * @event_data: event data
360  *
361  * API invokes connection SM to start station connection
362  *
363  * Return: SUCCESS on successful invocation of connection sm
364  *         FAILURE, if it fails due to any
365  */
366 static inline QDF_STATUS mlme_vdev_sta_conn_start(
367 				struct vdev_mlme_obj *vdev_mlme,
368 				uint16_t event_data_len, void *event_data)
369 {
370 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
371 
372 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
373 		ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
374 					vdev_mlme, event_data_len, event_data);
375 
376 	return ret;
377 }
378 
379 /**
380  * mlme_vdev_up_send - VDEV up operation
381  * @vdev_mlme_obj:  VDEV MLME comp object
382  * @event_data_len: data size
383  * @event_data: event data
384  *
385  * API invokes VDEV up operations
386  *
387  * Return: SUCCESS on successful completion of up operation
388  *         FAILURE, if it fails due to any
389  */
390 static inline QDF_STATUS mlme_vdev_up_send(
391 				struct vdev_mlme_obj *vdev_mlme,
392 				uint16_t event_data_len, void *event_data)
393 {
394 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
395 
396 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
397 		ret = vdev_mlme->ops->mlme_vdev_up_send(
398 					vdev_mlme, event_data_len, event_data);
399 
400 	return ret;
401 }
402 
403 /**
404  * mlme_vdev_notify_up_complete - VDEV up state transition notification
405  * @vdev_mlme_obj:  VDEV MLME comp object
406  * @event_data_len: data size
407  * @event_data: event data
408  *
409  * API notifies MLME on moving to UP state
410  *
411  * Return: SUCCESS on successful completion of up notification
412  *         FAILURE, if it fails due to any
413  */
414 static inline
415 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
416 				uint16_t event_data_len, void *event_data)
417 {
418 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
419 
420 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
421 		ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
422 					vdev_mlme, event_data_len, event_data);
423 
424 	return ret;
425 }
426 
427 /**
428  * mlme_vdev_notify_roam_start - VDEV Roaming notification
429  * @vdev_mlme_obj:  VDEV MLME comp object
430  * @event_len: data size
431  * @event_data: event data
432  *
433  * API notifies MLME on roaming
434  *
435  * Return: SUCCESS on successful completion of up notification
436  *         FAILURE, if it fails due to any
437  */
438 static inline
439 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
440 				       uint16_t event_len, void *event_data)
441 {
442 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
443 
444 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
445 		ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
446 								  event_len,
447 								  event_data);
448 
449 	return ret;
450 }
451 
452 /**
453  * mlme_vdev_update_beacon - Updates beacon
454  * @vdev_mlme_obj:  VDEV MLME comp object
455  * @op: beacon update type
456  * @event_data_len: data size
457  * @event_data: event data
458  *
459  * API updates/allocates/frees the beacon
460  *
461  * Return: SUCCESS on successful update of beacon
462  *         FAILURE, if it fails due to any
463  */
464 static inline
465 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
466 				   enum beacon_update_op op,
467 				   uint16_t event_data_len, void *event_data)
468 {
469 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
470 
471 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
472 		ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
473 						event_data_len, event_data);
474 
475 	return ret;
476 }
477 
478 /**
479  * mlme_vdev_disconnect_peers - Disconnect peers
480  * @vdev_mlme_obj:  VDEV MLME comp object
481  * @event_data_len: data size
482  * @event_data: event data
483  *
484  * API trigger stations disconnection with AP VDEV or AP disconnection with STA
485  * VDEV
486  *
487  * Return: SUCCESS on successful invocation of station disconnection
488  *         FAILURE, if it fails due to any
489  */
490 static inline QDF_STATUS mlme_vdev_disconnect_peers(
491 				struct vdev_mlme_obj *vdev_mlme,
492 				uint16_t event_data_len, void *event_data)
493 {
494 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
495 
496 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
497 		ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
498 					vdev_mlme, event_data_len, event_data);
499 
500 	return ret;
501 }
502 
503 /**
504  * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
505  * @vdev_mlme_obj:  VDEV MLME comp object
506  * @event_data_len: data size
507  * @event_data: event data
508  *
509  * API stops the CAC timer through DFS API
510  *
511  * Return: SUCCESS on successful CAC timer stop
512  *         FAILURE, if it fails due to any
513  */
514 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
515 				struct vdev_mlme_obj *vdev_mlme,
516 				uint16_t event_data_len, void *event_data)
517 {
518 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
519 
520 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
521 		ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
522 					vdev_mlme, event_data_len, event_data);
523 
524 	return ret;
525 }
526 
527 /**
528  * mlme_vdev_stop_send - Invokes VDEV stop operation
529  * @vdev_mlme_obj:  VDEV MLME comp object
530  * @event_data_len: data size
531  * @event_data: event data
532  *
533  * API invokes VDEV stop operation
534  *
535  * Return: SUCCESS on successful completion of stop operation
536  *         FAILURE, if it fails due to any
537  */
538 static inline QDF_STATUS mlme_vdev_stop_send(
539 				struct vdev_mlme_obj *vdev_mlme,
540 				uint16_t event_data_len, void *event_data)
541 {
542 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
543 
544 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
545 		ret = vdev_mlme->ops->mlme_vdev_stop_send(
546 					vdev_mlme, event_data_len, event_data);
547 
548 	return ret;
549 }
550 
551 /**
552  * mlme_vdev_stop_continue - VDEV stop response handling
553  * @vdev_mlme_obj:  VDEV MLME comp object
554  * @event_data_len: data size
555  * @event_data: event data
556  *
557  * API invokes VDEV stop response actions
558  *
559  * Return: SUCCESS on successful completion of stop response operation
560  *         FAILURE, if it fails due to any
561  */
562 static inline QDF_STATUS mlme_vdev_stop_continue(
563 				struct vdev_mlme_obj *vdev_mlme,
564 				uint16_t event_data_len, void *event_data)
565 {
566 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
567 
568 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
569 		ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
570 							      event_data_len,
571 							      event_data);
572 
573 	return ret;
574 }
575 
576 /**
577  * mlme_vdev_down_send - VDEV down operation
578  * @vdev_mlme_obj:  VDEV MLME comp object
579  * @event_data_len: data size
580  * @event_data: event data
581  *
582  * API invokes VDEV down operation
583  *
584  * Return: SUCCESS on successful completion of VDEV down operation
585  *         FAILURE, if it fails due to any
586  */
587 static inline QDF_STATUS mlme_vdev_down_send(
588 				struct vdev_mlme_obj *vdev_mlme,
589 				uint16_t event_data_len, void *event_data)
590 {
591 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
592 
593 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
594 		ret = vdev_mlme->ops->mlme_vdev_down_send(
595 					vdev_mlme, event_data_len, event_data);
596 
597 	return ret;
598 }
599 
600 /**
601  * mlme_vdev_notify_down_complete - VDEV init state transition notification
602  * @vdev_mlme_obj:  VDEV MLME comp object
603  * @event_data_len: data size
604  * @event_data: event data
605  *
606  * API notifies MLME on moving to INIT state
607  *
608  * Return: SUCCESS on successful completion of down notification
609  *         FAILURE, if it fails due to any
610  */
611 static inline QDF_STATUS mlme_vdev_notify_down_complete(
612 				struct vdev_mlme_obj *vdev_mlme,
613 				uint16_t event_data_len, void *event_data)
614 {
615 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
616 
617 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
618 		ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
619 					vdev_mlme, event_data_len, event_data);
620 
621 	return ret;
622 }
623 
624 /**
625  * mlme_vdev_ext_hdl_create - VDEV legacy pointer allocation
626  * @vdev_mlme_obj:  VDEV MLME comp object
627  *
628  * API invokes legacy pointer allocation and initialization
629  *
630  * Return: SUCCESS on successful creation of legacy handle
631  *         FAILURE, if it fails due to any
632  */
633 static inline QDF_STATUS mlme_vdev_ext_hdl_create(
634 			      struct vdev_mlme_obj *vdev_mlme)
635 {
636 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
637 
638 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_ext_hdl_create)
639 		ret = vdev_mlme->ops->mlme_vdev_ext_hdl_create(vdev_mlme);
640 
641 	return ret;
642 }
643 
644 /**
645  * mlme_vdev_ext_hdl_post_create - VDEV post legacy pointer allocation
646  * @vdev_mlme_obj:  VDEV MLME comp object
647  *
648  * API invokes post legacy pointer allocation operation
649  *
650  * Return: SUCCESS on successful creation of legacy handle
651  *         FAILURE, if it fails due to any
652  */
653 static inline QDF_STATUS mlme_vdev_ext_hdl_post_create(
654 				struct vdev_mlme_obj *vdev_mlme)
655 {
656 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
657 
658 	if ((vdev_mlme->ops) &&
659 	    vdev_mlme->ops->mlme_vdev_ext_hdl_post_create)
660 		ret = vdev_mlme->ops->mlme_vdev_ext_hdl_post_create(
661 								vdev_mlme);
662 
663 	return ret;
664 }
665 
666 /**
667  * mlme_vdev_ext_hdl_destroy - VDEV legacy pointer free
668  * @vdev_mlme_obj:  VDEV MLME comp object
669  *
670  * API invokes legacy pointer free
671  *
672  * Return: SUCCESS on successful free of legacy handle
673  *         FAILURE, if it fails due to any
674  */
675 static inline QDF_STATUS mlme_vdev_ext_hdl_destroy(
676 			      struct vdev_mlme_obj *vdev_mlme)
677 {
678 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
679 
680 	if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_ext_hdl_destroy)
681 		ret = vdev_mlme->ops->mlme_vdev_ext_hdl_destroy(vdev_mlme);
682 
683 	return ret;
684 }
685 
686 /**
687  * mlme_vdev_enqueue_exp_ser_cmd - Enqueue exception serialization cmd
688  * @vdev_mlme_obj:  VDEV MLME comp object
689  * @cmd_type: Serialization command type
690  *
691  * API to enqueue the exception serialization command, used by
692  * mlme-serialization wrapper layer
693  *
694  * Return: SUCCESS on successful enqueuing the command
695  *         Else FAILURE
696  */
697 static inline QDF_STATUS
698 mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme,
699 			      uint8_t cmd_type)
700 {
701 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
702 
703 	if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_enqueue_exp_cmd)
704 		ret = vdev_mlme->ops->mlme_vdev_enqueue_exp_cmd(vdev_mlme,
705 								cmd_type);
706 	return ret;
707 }
708 
709 #endif
710