xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h (revision 3149adf58a329e17232a4c0e58d460d025edd55a)
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  */
56 struct dfs_to_mlme {
57 	QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
58 			enum wlan_umac_comp_id id,
59 			void *comp_priv_obj,
60 			QDF_STATUS status);
61 	QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev,
62 			enum wlan_umac_comp_id id,
63 			void *comp_priv_obj);
64 	struct wlan_dfs *(*pdev_get_comp_private_obj)(
65 			struct wlan_objmgr_pdev *pdev);
66 	QDF_STATUS (*dfs_channel_mark_radar)(struct wlan_objmgr_pdev *pdev,
67 			uint16_t freq,
68 			uint8_t vhtop_ch_freq_seg2,
69 			uint64_t flags);
70 	QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev,
71 			bool *wait_for_csa);
72 	QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
73 			uint8_t ieee,
74 			uint16_t freq,
75 			uint8_t vhtop_ch_freq_seg2,
76 			uint64_t flags);
77 	QDF_STATUS (*mlme_start_csa)(struct wlan_objmgr_pdev *pdev,
78 			uint8_t ieee_chan, uint16_t freq,
79 			uint8_t cfreq2, uint64_t flags);
80 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
81 	QDF_STATUS (*mlme_deliver_event_up_afrer_cac)(
82 			struct wlan_objmgr_pdev *pdev);
83 	QDF_STATUS (*mlme_get_dfs_ch_nchans)(struct wlan_objmgr_pdev *pdev,
84 			int *nchans);
85 	QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev,
86 			uint16_t *dfs_ch_freq,
87 			uint64_t *dfs_ch_flags,
88 			uint16_t *dfs_ch_flagext,
89 			uint8_t *dfs_ch_ieee,
90 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
91 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
92 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
93 			int val);
94 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
95 			int ieee,
96 			uint64_t flag,
97 			int *freq);
98 	QDF_STATUS (*mlme_find_dot11_channel)(struct wlan_objmgr_pdev *pdev,
99 			uint8_t ieee,
100 			uint8_t des_cfreq2,
101 			int mode,
102 			uint16_t *dfs_ch_freq,
103 			uint64_t *dfs_ch_flags,
104 			uint16_t *dfs_ch_flagext,
105 			uint8_t *dfs_ch_ieee,
106 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
107 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
108 
109 	QDF_STATUS (*mlme_get_dfs_ch_channels)(struct wlan_objmgr_pdev *pdev,
110 			uint16_t *dfs_ch_freq,
111 			uint64_t *dfs_ch_flags,
112 			uint16_t *dfs_ch_flagext,
113 			uint8_t *dfs_ch_ieee,
114 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
115 			uint8_t *dfs_ch_vhtop_ch_freq_seg2,
116 			int index);
117 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
118 			uint16_t *flag_ext);
119 	QDF_STATUS (*mlme_channel_change_by_precac)(
120 			struct wlan_objmgr_pdev *pdev);
121 	QDF_STATUS (*mlme_nol_timeout_notification)(
122 			struct wlan_objmgr_pdev *pdev);
123 	QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
124 			void *nollist,
125 			int nentries);
126 	QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev,
127 			uint16_t dfs_ch_freq,
128 			uint8_t c_vhtop_ch_freq_seg2,
129 			uint64_t dfs_ch_flags,
130 			int *cac_timeout);
131 };
132 
133 extern struct dfs_to_mlme global_dfs_to_mlme;
134 
135 /**
136  * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
137  * @pdev: Pointer to DFS pdev object.
138  */
139 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
140 		void *arg);
141 
142 /**
143  * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
144  * @pdev: Pointer to DFS pdev object.
145  */
146 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
147 		void *arg);
148 
149 /**
150  * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
151  * @pdev: Pointer to DFS pdev object.
152  * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
153  *
154  * Wrapper function for dfs_is_ap_cac_timer_running().
155  * This function called from outside of dfs component.
156  */
157 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
158 		int *is_ap_cac_timer_running);
159 
160 /**
161  * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
162  * @pdev: Pointer to DFS pdev object.
163  * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
164  *
165  * Wrapper function for dfs_getnol().
166  * This function called from outside of dfs component.
167  */
168 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
169 
170 /**
171  * ucfg_dfs_override_cac_timeout() -  Override the default CAC timeout.
172  * @pdev: Pointer to DFS pdev object.
173  * @cac_timeout: CAC timeout value.
174  *
175  * Wrapper function for dfs_override_cac_timeout().
176  * This function called from outside of dfs component.
177  */
178 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
179 		int cac_timeout, int *status);
180 
181 /**
182  * ucfg_dfs_get_override_cac_timeout() -  Get override CAC timeout value.
183  * @pdev: Pointer to DFS pdev object.
184  * @cac_timeout: Pointer to save the CAC timeout value.
185  *
186  * Wrapper function for dfs_get_override_cac_timeout().
187  * This function called from outside of dfs component.
188  */
189 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
190 		int *cac_timeout, int *status);
191 
192 /**
193  * ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
194  * @pdev: Pointer to DFS pdev object.
195  * @precac_timeout: Get precac timeout value in this variable.
196  *
197  * Wrapper function for dfs_get_override_precac_timeout().
198  * This function called from outside of dfs component.
199  */
200 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
201 		int *precac_timeout);
202 
203 /**
204  * ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
205  * @pdev: Pointer to DFS pdev object.
206  * @precac_timeout: Precac timeout value.
207  *
208  * Wrapper function for dfs_override_precac_timeout().
209  * This function called from outside of dfs component.
210  */
211 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
212 		int precac_timeout);
213 
214 /**
215  * ucfg_dfs_set_precac_enable() - Set precac enable flag.
216  * @pdev: Pointer to DFS pdev object.
217  * @value: input value for dfs_precac_enable flag.
218  *
219  * Wrapper function for dfs_set_precac_enable().
220  * This function called from outside of dfs component.
221  */
222 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
223 		uint32_t value);
224 
225 /**
226  * ucfg_dfs_get_precac_enable() - Get precac enable flag.
227  * @pdev: Pointer to DFS pdev object.
228  * @buff: Pointer to save precac_enable value.
229  *
230  * Wrapper function for dfs_get_precac_enable().
231  * This function called from outside of dfs component.
232  */
233 QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev, int *buff);
234 
235 #ifdef QCA_MCL_DFS_SUPPORT
236 /**
237  * ucfg_dfs_update_config() - Update DFS user config.
238  * @psoc: Pointer to psoc.
239  * @req: DFS user config.
240  *
241  * Return: QDF_STATUS
242  */
243 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
244 		struct dfs_user_config *req);
245 #endif
246 #endif /* _WLAN_DFS_UCFG_API_H_ */
247