xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h (revision d78dedc9dd8c4ee677ac1649d1d42f2a7c3cc1b7)
1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
22  * component.
23  */
24 
25 #ifndef _WLAN_DFS_UCFG_API_H_
26 #define _WLAN_DFS_UCFG_API_H_
27 
28 #include <wlan_objmgr_psoc_obj.h>
29 #include <wlan_objmgr_pdev_obj.h>
30 
31 /**
32  * struct dfs_to_mlme - These are MLME function pointer used by DFS component.
33  * @pdev_component_obj_attach:         Attach DFS object to PDEV.
34  * @pdev_component_obj_detach:         Detach DFS object from PDEV.
35  * @pdev_get_comp_private_obj:         Get DFS object from PDEV.
36  * @dfs_channel_mark_radar:            Mark the channel as RADAR.
37  * @dfs_start_rcsa:                    Send RCSA to RootAP.
38  * @mlme_mark_dfs:                     Calls dfs_action function.
39  * @mlme_start_csa:                    Sends CSA.
40  * @mlme_proc_cac:                     Process the CAC completion event.
41  * @mlme_deliver_event_up_afrer_cac:   Send a CAC timeout, VAP up event to user
42  *                                     space
43  * @mlme_get_dfs_ch_nchans:            Get number of channels in the channel
44  *                                     list.
45  * @mlme_get_extchan:                  Gets the extension channel.
46  * @mlme_set_no_chans_available:       Sets no_chans_available flag.
47  * @mlme_ieee2mhz:                     Gets Channel freq from ieee number.
48  * @mlme_find_dot11_channel:           Find dot11 channel.
49  * @mlme_get_dfs_ch_channels:          Get the channel list.
50  * @mlme_dfs_ch_flags_ext:             Gets channel extension flag.
51  * @mlme_channel_change_by_precac:     Channel change triggered by PreCAC.
52  * @mlme_nol_timeout_notification:     NOL timeout notification.
53  * @mlme_clist_update:                 Updates the channel list.
54  * @mlme_get_cac_timeout:              Gets the CAC timeout.
55  * @mlme_rebuild_chan_list_with_non_dfs_channel: Rebuild channels with non-dfs
56  *                                     channels.
57  * @mlme_restart_vaps_with_non_dfs_chan: Restart vaps with non-dfs channel.
58  */
59 struct dfs_to_mlme {
60 	QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
61 			enum wlan_umac_comp_id id,
62 			void *comp_priv_obj,
63 			QDF_STATUS status);
64 	QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev,
65 			enum wlan_umac_comp_id id,
66 			void *comp_priv_obj);
67 	struct wlan_dfs *(*pdev_get_comp_private_obj)(
68 			struct wlan_objmgr_pdev *pdev);
69 	QDF_STATUS (*dfs_channel_mark_radar)(struct wlan_objmgr_pdev *pdev,
70 			uint16_t freq,
71 			uint8_t vhtop_ch_freq_seg2,
72 			uint64_t flags);
73 	QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev,
74 			bool *wait_for_csa);
75 	QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
76 			uint8_t ieee,
77 			uint16_t freq,
78 			uint8_t vhtop_ch_freq_seg2,
79 			uint64_t flags);
80 	QDF_STATUS (*mlme_start_csa)(struct wlan_objmgr_pdev *pdev,
81 			uint8_t ieee_chan, uint16_t freq,
82 			uint8_t cfreq2, uint64_t flags);
83 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
84 	QDF_STATUS (*mlme_deliver_event_up_afrer_cac)(
85 			struct wlan_objmgr_pdev *pdev);
86 	QDF_STATUS (*mlme_get_dfs_ch_nchans)(struct wlan_objmgr_pdev *pdev,
87 			int *nchans);
88 	QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev,
89 			uint16_t *dfs_ch_freq,
90 			uint64_t *dfs_ch_flags,
91 			uint16_t *dfs_ch_flagext,
92 			uint8_t *dfs_ch_ieee,
93 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
94 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
95 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
96 			int val);
97 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
98 			int ieee,
99 			uint64_t flag,
100 			int *freq);
101 	QDF_STATUS (*mlme_find_dot11_channel)(struct wlan_objmgr_pdev *pdev,
102 			uint8_t ieee,
103 			uint8_t des_cfreq2,
104 			int mode,
105 			uint16_t *dfs_ch_freq,
106 			uint64_t *dfs_ch_flags,
107 			uint16_t *dfs_ch_flagext,
108 			uint8_t *dfs_ch_ieee,
109 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
110 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
111 
112 	QDF_STATUS (*mlme_get_dfs_ch_channels)(struct wlan_objmgr_pdev *pdev,
113 			uint16_t *dfs_ch_freq,
114 			uint64_t *dfs_ch_flags,
115 			uint16_t *dfs_ch_flagext,
116 			uint8_t *dfs_ch_ieee,
117 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
118 			uint8_t *dfs_ch_vhtop_ch_freq_seg2,
119 			int index);
120 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
121 			uint16_t *flag_ext);
122 	QDF_STATUS (*mlme_channel_change_by_precac)(
123 			struct wlan_objmgr_pdev *pdev);
124 	QDF_STATUS (*mlme_nol_timeout_notification)(
125 			struct wlan_objmgr_pdev *pdev);
126 	QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
127 			void *nollist,
128 			int nentries);
129 	QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev,
130 			uint16_t dfs_ch_freq,
131 			uint8_t c_vhtop_ch_freq_seg2,
132 			uint64_t dfs_ch_flags,
133 			int *cac_timeout);
134 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
135 	QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels)
136 			(struct wlan_objmgr_pdev *pdev);
137 	QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan)
138 			(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
139 #endif
140 };
141 
142 extern struct dfs_to_mlme global_dfs_to_mlme;
143 
144 /**
145  * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
146  * @pdev: Pointer to DFS pdev object.
147  */
148 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
149 		void *arg);
150 
151 /**
152  * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
153  * @pdev: Pointer to DFS pdev object.
154  */
155 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
156 		void *arg);
157 
158 /**
159  * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
160  * @pdev: Pointer to DFS pdev object.
161  * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
162  *
163  * Wrapper function for dfs_is_ap_cac_timer_running().
164  * This function called from outside of dfs component.
165  */
166 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
167 		int *is_ap_cac_timer_running);
168 
169 /**
170  * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
171  * @pdev: Pointer to DFS pdev object.
172  * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
173  *
174  * Wrapper function for dfs_getnol().
175  * This function called from outside of dfs component.
176  */
177 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
178 
179 /**
180  * ucfg_dfs_override_cac_timeout() -  Override the default CAC timeout.
181  * @pdev: Pointer to DFS pdev object.
182  * @cac_timeout: CAC timeout value.
183  *
184  * Wrapper function for dfs_override_cac_timeout().
185  * This function called from outside of dfs component.
186  */
187 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
188 		int cac_timeout, int *status);
189 
190 /**
191  * ucfg_dfs_get_override_cac_timeout() -  Get override CAC timeout value.
192  * @pdev: Pointer to DFS pdev object.
193  * @cac_timeout: Pointer to save the CAC timeout value.
194  *
195  * Wrapper function for dfs_get_override_cac_timeout().
196  * This function called from outside of dfs component.
197  */
198 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
199 		int *cac_timeout, int *status);
200 
201 /**
202  * ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
203  * @pdev: Pointer to DFS pdev object.
204  * @precac_timeout: Get precac timeout value in this variable.
205  *
206  * Wrapper function for dfs_get_override_precac_timeout().
207  * This function called from outside of dfs component.
208  */
209 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
210 		int *precac_timeout);
211 
212 /**
213  * ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
214  * @pdev: Pointer to DFS pdev object.
215  * @precac_timeout: Precac timeout value.
216  *
217  * Wrapper function for dfs_override_precac_timeout().
218  * This function called from outside of dfs component.
219  */
220 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
221 		int precac_timeout);
222 
223 /**
224  * ucfg_dfs_set_precac_enable() - Set precac enable flag.
225  * @pdev: Pointer to DFS pdev object.
226  * @value: input value for dfs_precac_enable flag.
227  *
228  * Wrapper function for dfs_set_precac_enable().
229  * This function called from outside of dfs component.
230  */
231 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
232 		uint32_t value);
233 
234 /**
235  * ucfg_dfs_get_precac_enable() - Get precac enable flag.
236  * @pdev: Pointer to DFS pdev object.
237  * @buff: Pointer to save precac_enable value.
238  *
239  * Wrapper function for dfs_get_precac_enable().
240  * This function called from outside of dfs component.
241  */
242 QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev, int *buff);
243 
244 #ifdef QCA_MCL_DFS_SUPPORT
245 /**
246  * ucfg_dfs_update_config() - Update DFS user config.
247  * @psoc: Pointer to psoc.
248  * @req: DFS user config.
249  *
250  * Return: QDF_STATUS
251  */
252 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
253 		struct dfs_user_config *req);
254 #endif
255 
256 /**
257  * ucfg_dfs_set_override_status_timeout() - override the value of host dfs
258  * status wait timeout.
259  * @pdev: Pointer to DFS pdev object.
260  * @status_timeout: timeout value.
261  *
262  * Wrapper function for dfs_set_override_status_timeout().
263  * This function called from outside of dfs component.
264  *
265  * Return: QDF_STATUS
266  */
267 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
268 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
269 					    int status_timeout);
270 #else
271 static inline
272 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
273 					    int status_timeout)
274 {
275 	return QDF_STATUS_SUCCESS;
276 }
277 #endif
278 
279 /**
280  * ucfg_dfs_get_override_status_timeout() - Get the value of host dfs status
281  * wait timeout.
282  * @pdev: Pointer to DFS pdev object.
283  * @status_timeout: Pointer to save the timeout value.
284  *
285  * Wrapper function for dfs_get_override_status_timeout().
286  * This function called from outside of dfs component.
287  *
288  * Return: QDF_STATUS
289  */
290 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
291 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
292 						int *status_timeout);
293 #else
294 static inline
295 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
296 						int *status_timeout)
297 {
298 	return QDF_STATUS_SUCCESS;
299 }
300 #endif
301 #endif /* _WLAN_DFS_UCFG_API_H_ */
302