xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mlme_api.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
1 /*
2  * Copyright (c) 2018-2019, 2021 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 public APIs
19  */
20 
21 #ifndef _WLAN_VDEV_MLME_API_H_
22 #define _WLAN_VDEV_MLME_API_H_
23 
24 #include <wlan_ext_mlme_obj_types.h>
25 /**
26  * wlan_vdev_mlme_get_cmpt_obj - Retrieves MLME component object
27  * from VDEV object
28  * @vdev: pointer to vdev object
29  *
30  * Retrieves MLME component object from VDEV object
31  *
32  * Return: comp handle on SUCCESS
33  *         NULL, if it fails to retrieve
34  */
35 struct vdev_mlme_obj *wlan_vdev_mlme_get_cmpt_obj(
36 						struct wlan_objmgr_vdev *vdev);
37 /**
38  * wlan_vdev_mlme_set_ext_hdl - Sets legacy handle
39  * @vdev: pointer to vdev object
40  * @ext_hdl: pointer to legacy handle
41  *
42  * Sets Legacy handle to MLME component object
43  *
44  * Return:
45  */
46 void wlan_vdev_mlme_set_ext_hdl(struct wlan_objmgr_vdev *vdev,
47 				mlme_vdev_ext_t *ext_hdl);
48 
49 /**
50  * wlan_vdev_mlme_get_ext_hdl - Returns legacy handle
51  * @vdev: pointer to vdev object
52  *
53  * Retrieves legacy handle from vdev mlme component object
54  *
55  * Return: legacy handle on SUCCESS
56  *         NULL, if it fails to retrieve
57  */
58 mlme_vdev_ext_t *wlan_vdev_mlme_get_ext_hdl(struct wlan_objmgr_vdev *vdev);
59 
60 /**
61  * wlan_vdev_mlme_sm_deliver_evt() - Delivers event to VDEV MLME SM
62  * @vdev: Object manager VDEV object
63  * @event: MLME event
64  * @event_data_len: data size
65  * @event_data: event data
66  *
67  * API to dispatch event to VDEV MLME SM with lock acquired
68  *
69  * Return: SUCCESS: on handling event
70  *         FAILURE: on ignoring the event
71  */
72 QDF_STATUS wlan_vdev_mlme_sm_deliver_evt(struct wlan_objmgr_vdev *vdev,
73 					 enum wlan_vdev_sm_evt event,
74 					 uint16_t event_data_len,
75 					 void *event_data);
76 
77 /**
78  * wlan_vdev_mlme_sm_deliver_evt_sync() - Delivers event to VDEV MLME SM sync
79  * @vdev: Object manager VDEV object
80  * @event: MLME event
81  * @event_data_len: data size
82  * @event_data: event data
83  *
84  * API to dispatch event to VDEV MLME SM with lock acquired
85  *
86  * Return: SUCCESS: on handling event
87  *         FAILURE: on ignoring the event
88  */
89 QDF_STATUS wlan_vdev_mlme_sm_deliver_evt_sync(struct wlan_objmgr_vdev *vdev,
90 					      enum wlan_vdev_sm_evt event,
91 					      uint16_t event_data_len,
92 					      void *event_data);
93 
94 #ifdef SM_ENG_HIST_ENABLE
95 /**
96  * wlan_vdev_mlme_sm_history_print() - Prints SM history
97  * @vdev: Object manager VDEV object
98  *
99  * API to print SM history
100  *
101  * Return: void
102  */
103 void wlan_vdev_mlme_sm_history_print(struct wlan_objmgr_vdev *vdev);
104 
105 #endif
106 
107 /**
108  * wlan_vdev_allow_connect_n_tx() - Checks whether VDEV is in operational state
109  * @vdev: Object manager VDEV object
110  *
111  * API to checks the VDEV MLME SM state to allow tx or connections
112  *
113  * Return: SUCCESS: to allow tx or connection
114  *         FAILURE: otherwise failure
115  */
116 QDF_STATUS wlan_vdev_allow_connect_n_tx(struct wlan_objmgr_vdev *vdev);
117 
118 /**
119  * wlan_vdev_mlme_is_active() - Checks whether VDEV is in active state
120  * @vdev: Object manager VDEV object
121  *
122  * API to checks the VDEV MLME SM state to check channel is configured in FW
123  *
124  * Return: SUCCESS: valid channel is configured
125  *         FAILURE: otherwise failure
126  */
127 QDF_STATUS wlan_vdev_mlme_is_active(struct wlan_objmgr_vdev *vdev);
128 
129 /**
130  * wlan_vdev_chan_config_valid() - Checks whether VDEV chan config valid
131  * @vdev: Object manager VDEV object
132  *
133  * API to checks the VDEV MLME SM state to check channel is configured in Host
134  *
135  * Return: SUCCESS: valid channel is configured
136  *         FAILURE: otherwise failure
137  */
138 QDF_STATUS wlan_vdev_chan_config_valid(struct wlan_objmgr_vdev *vdev);
139 
140 /**
141  * wlan_vdev_mlme_is_csa_restart() - Checks whether VDEV MLME SM is in CSA
142  * @vdev: Object manager VDEV object
143  *
144  * API to checks the VDEV MLME SM state for CSA_RESTART substate
145  *
146  * Return: SUCCESS: if it is in CSA_RESTART sub state
147  *         FAILURE: otherwise failure
148  */
149 QDF_STATUS wlan_vdev_mlme_is_csa_restart(struct wlan_objmgr_vdev *vdev);
150 
151 /**
152  * wlan_vdev_is_going_down() - Checks whether VDEV is being brought down
153  * @vdev: Object manager VDEV object
154  *
155  * API to checks the VDEV MLME SM state to check VDEV is being brought down
156  *
157  * Return: SUCCESS: valid channel is configured
158  *         FAILURE: otherwise failure
159  */
160 QDF_STATUS wlan_vdev_is_going_down(struct wlan_objmgr_vdev *vdev);
161 
162 /**
163  * wlan_vdev_is_peer_create_allowed() - Checks whether PEER can be created
164  * @vdev: Object manager VDEV object
165  *
166  * API to check the VDEV MLME SM state to allow PEER association
167  *
168  * Return: SUCCESS: if peer create can be allowed
169  *         FAILURE: otherwise failure
170  */
171 QDF_STATUS wlan_vdev_is_peer_create_allowed(struct wlan_objmgr_vdev *vdev);
172 
173 /**
174  * wlan_vdev_is_restart_progress() - Checks VDEV restart is in progress
175  * @vdev: Object manager VDEV object
176  *
177  * API to check whether restarts is in progress
178  *
179  * Return: SUCCESS: if restart is in progress
180  *         FAILURE: otherwise failure
181  */
182 QDF_STATUS wlan_vdev_is_restart_progress(struct wlan_objmgr_vdev *vdev);
183 
184 /**
185  * wlan_vdev_is_dfs_cac_wait() - Checks VDEV is in cac wait state
186  * @vdev: Object manager VDEV object
187  *
188  * API to check whether state is cac wait state
189  *
190  * Return: SUCCESS: if state is cac wait state
191  *         FAILURE: otherwise failure
192  */
193 QDF_STATUS wlan_vdev_is_dfs_cac_wait(struct wlan_objmgr_vdev *vdev);
194 
195 /**
196  * wlan_vdev_mlme_cmd_lock - Acquire lock for command queuing atomicity
197  *
198  * API to take VDEV MLME command lock
199  *
200  * Return: void
201  */
202 void wlan_vdev_mlme_cmd_lock(struct wlan_objmgr_vdev *vdev);
203 
204 /**
205  * wlan_vdev_mlme_cmd_unlock - Release lock for command queuing atomicity
206  *
207  * API to release VDEV MLME command lock
208  *
209  * Return: void
210  */
211 void wlan_vdev_mlme_cmd_unlock(struct wlan_objmgr_vdev *vdev);
212 
213 /**
214  * wlan_vdev_mlme_is_scan_allowed() - Checks whether scan is allowed
215  * @vdev: Object manager VDEV object
216  *
217  * API to checks the VDEV MLME SM state to check scan is allowed
218  *
219  * Return: SUCCESS: if scan is allowed
220  *         FAILURE: otherwise failure
221  */
222 QDF_STATUS wlan_vdev_mlme_is_scan_allowed(struct wlan_objmgr_vdev *vdev);
223 
224 /**
225  * wlan_vdev_mlme_is_init_state() - Checks whether vdev is in init state
226  * @vdev: Object manager VDEV object
227  *
228  * API to checks the VDEV MLME SM state is in init state or not
229  *
230  * Return: SUCCESS: if vdev is in init state
231  *         FAILURE: otherwise failure
232  */
233 QDF_STATUS wlan_vdev_mlme_is_init_state(struct wlan_objmgr_vdev *vdev);
234 
235 /**
236  * wlan_vdev_is_up_active_state() - Checks whether vdev is in up active state
237  * @vdev: Object manager VDEV object
238  *
239  * API to checks the VDEV MLME SM state is in UP ACTIVE state
240  *
241  * Return: SUCCESS: if vdev is in UP ACTIVE state
242  *         FAILURE: otherwise failure
243  */
244 QDF_STATUS wlan_vdev_is_up_active_state(struct wlan_objmgr_vdev *vdev);
245 #endif
246