xref: /wlan-driver/qca-wifi-host-cmn/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  *
6*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
7*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
8*5113495bSYour Name  * above copyright notice and this permission notice appear in all
9*5113495bSYour Name  * copies.
10*5113495bSYour Name  *
11*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
19*5113495bSYour Name  */
20*5113495bSYour Name 
21*5113495bSYour Name /**
22*5113495bSYour Name  * DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
23*5113495bSYour Name  * component.
24*5113495bSYour Name  */
25*5113495bSYour Name 
26*5113495bSYour Name #ifndef _WLAN_DFS_UCFG_API_H_
27*5113495bSYour Name #define _WLAN_DFS_UCFG_API_H_
28*5113495bSYour Name 
29*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
30*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
31*5113495bSYour Name #include <wlan_dfs_ioctl.h>
32*5113495bSYour Name #include <wlan_dfs_public_struct.h>
33*5113495bSYour Name 
34*5113495bSYour Name /**
35*5113495bSYour Name  * struct dfs_to_mlme - These are MLME function pointer used by DFS component.
36*5113495bSYour Name  * @pdev_component_obj_attach:         Attach DFS object to PDEV.
37*5113495bSYour Name  * @pdev_component_obj_detach:         Detach DFS object from PDEV.
38*5113495bSYour Name  * @dfs_start_rcsa:                    Send RCSA to RootAP.
39*5113495bSYour Name  * @mlme_mark_dfs:                     Mark DFS channel frequency as radar.
40*5113495bSYour Name  * @mlme_start_csa_for_freq:
41*5113495bSYour Name  * @mlme_proc_cac:                     Process the CAC completion event.
42*5113495bSYour Name  * @mlme_deliver_event_up_after_cac:   Send a CAC timeout, VAP up event to user
43*5113495bSYour Name  *                                     space
44*5113495bSYour Name  * @mlme_get_extchan_for_freq:         Get the extension channel.
45*5113495bSYour Name  * @mlme_set_no_chans_available:       Sets no_chans_available flag.
46*5113495bSYour Name  * @mlme_ieee2mhz:                     Gets Channel freq from ieee number.
47*5113495bSYour Name  * @mlme_find_dot11_chan_for_freq:     Find a channel pointer.
48*5113495bSYour Name  * @mlme_get_dfs_channels_for_freq:    Get DFS channels from current channel
49*5113495bSYour Name  *                                     list.
50*5113495bSYour Name  * @mlme_dfs_ch_flags_ext:             Gets channel extension flag.
51*5113495bSYour Name  * @mlme_channel_change_by_precac:     Channel change triggered by PreCAC.
52*5113495bSYour Name  * @mlme_precac_chan_change_csa_for_freq:Channel change triggered by PrCAC using
53*5113495bSYour Name  *                                     Channel Switch Announcement.
54*5113495bSYour Name  * @mlme_postnol_chan_switch:          Channel change post NOL using Channel
55*5113495bSYour Name  *                                     Switch Announcement.
56*5113495bSYour Name  * @mlme_unpunc_chan_switch:           After DFS unpuncture occurs send VDEV
57*5113495bSYour Name  *                                     restart.
58*5113495bSYour Name  * @mlme_nol_timeout_notification:     NOL timeout notification.
59*5113495bSYour Name  * @mlme_clist_update:                 Updates the channel list.
60*5113495bSYour Name  * @mlme_is_opmode_sta:                Check if pdev opmode is STA.
61*5113495bSYour Name  * @mlme_get_cac_timeout_for_freq:     Get CAC timeout for a given channel
62*5113495bSYour Name  *                                     frequency.
63*5113495bSYour Name  * @mlme_rebuild_chan_list_with_non_dfs_channels: Rebuild channels with non-dfs
64*5113495bSYour Name  *                                     channels.
65*5113495bSYour Name  * @mlme_restart_vaps_with_non_dfs_chan: Restart vaps with non-dfs channel.
66*5113495bSYour Name  * @mlme_check_allowed_prim_chanlist:  Check whether the given channel is
67*5113495bSYour Name  *                                     present in the primary allowed channel
68*5113495bSYour Name  *                                     list or not.
69*5113495bSYour Name  * @mlme_update_scan_channel_list:     Update the scan channel list sent to FW.
70*5113495bSYour Name  * @mlme_bringdown_vaps:               Bringdown vaps if no chans is present.
71*5113495bSYour Name  * @mlme_dfs_deliver_event:            Deliver DFS events to user space
72*5113495bSYour Name  * @mlme_is_inter_band_chan_switch_allowed: Check if switch between 5 GHz and
73*5113495bSYour Name  *                                     6 GHz is allowed.
74*5113495bSYour Name  * @mlme_acquire_radar_mode_switch_lock: Acquire lock for radar processing over
75*5113495bSYour Name  *                                     mode switch.
76*5113495bSYour Name  * @mlme_release_radar_mode_switch_lock: Release lock taken for radar processing
77*5113495bSYour Name  *                                     over mode switch.
78*5113495bSYour Name  * @mlme_proc_spoof_success:           Called when FW send spoof success event.
79*5113495bSYour Name  * @mlme_set_tx_flag:                  Called when Radar is detected to
80*5113495bSYour Name  *                                     indicate stop data traffic.
81*5113495bSYour Name  */
82*5113495bSYour Name struct dfs_to_mlme {
83*5113495bSYour Name 	QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
84*5113495bSYour Name 			enum wlan_umac_comp_id id,
85*5113495bSYour Name 			void *comp_priv_obj,
86*5113495bSYour Name 			QDF_STATUS status);
87*5113495bSYour Name 	QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev,
88*5113495bSYour Name 			enum wlan_umac_comp_id id,
89*5113495bSYour Name 			void *comp_priv_obj);
90*5113495bSYour Name 	QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev,
91*5113495bSYour Name 			bool *wait_for_csa);
92*5113495bSYour Name 	QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
93*5113495bSYour Name 			uint8_t ieee,
94*5113495bSYour Name 			uint16_t freq,
95*5113495bSYour Name 			uint16_t vhtop_ch_freq_seg2,
96*5113495bSYour Name 			uint64_t flags,
97*5113495bSYour Name 			uint16_t dfs_radar_bitmap);
98*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
99*5113495bSYour Name 	QDF_STATUS (*mlme_start_csa_for_freq)(struct wlan_objmgr_pdev *pdev,
100*5113495bSYour Name 					      uint8_t ieee_chan, uint16_t freq,
101*5113495bSYour Name 					      uint16_t cfreq2, uint64_t flags);
102*5113495bSYour Name #endif
103*5113495bSYour Name 
104*5113495bSYour Name 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
105*5113495bSYour Name 	QDF_STATUS (*mlme_deliver_event_up_after_cac)(
106*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev);
107*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
108*5113495bSYour Name 	QDF_STATUS (*mlme_get_extchan_for_freq)(struct wlan_objmgr_pdev *pdev,
109*5113495bSYour Name 						uint16_t *dfs_ch_freq,
110*5113495bSYour Name 						uint64_t *dfs_ch_flags,
111*5113495bSYour Name 						uint16_t *dfs_ch_flagext,
112*5113495bSYour Name 						uint8_t *dfs_ch_ieee,
113*5113495bSYour Name 						uint8_t *dfs_vhtop_ch_freq_seg1,
114*5113495bSYour Name 						uint8_t *dfs_vhtop_ch_freq_seg2,
115*5113495bSYour Name 						uint16_t *dfs_ch_mhz_freq_seg1,
116*5113495bSYour Name 						uint16_t *dfs_ch_mhz_freq_seg2);
117*5113495bSYour Name #endif
118*5113495bSYour Name 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
119*5113495bSYour Name 			int val);
120*5113495bSYour Name 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
121*5113495bSYour Name 			int ieee,
122*5113495bSYour Name 			uint64_t flag,
123*5113495bSYour Name 			int *freq);
124*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
125*5113495bSYour Name 	QDF_STATUS (*mlme_find_dot11_chan_for_freq)(struct wlan_objmgr_pdev *,
126*5113495bSYour Name 						    uint16_t freq,
127*5113495bSYour Name 						    uint16_t des_cfreq2_mhz,
128*5113495bSYour Name 						    int mode,
129*5113495bSYour Name 						    uint16_t *dfs_ch_freq,
130*5113495bSYour Name 						    uint64_t *dfs_ch_flags,
131*5113495bSYour Name 						    uint16_t *dfs_ch_flagext,
132*5113495bSYour Name 						    uint8_t *dfs_ch_ieee,
133*5113495bSYour Name 						    uint8_t *dfs_ch_freq_seg1,
134*5113495bSYour Name 						    uint8_t *dfs_ch_freq_seg2,
135*5113495bSYour Name 						    uint16_t *dfs_cfreq1_mhz,
136*5113495bSYour Name 						    uint16_t *dfs_cfreq2_mhz);
137*5113495bSYour Name #endif
138*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
139*5113495bSYour Name 	QDF_STATUS (*mlme_get_dfs_channels_for_freq)(
140*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev,
141*5113495bSYour Name 			uint16_t *dfs_chan_freq,
142*5113495bSYour Name 			uint64_t *dfs_chan_flags,
143*5113495bSYour Name 			uint16_t *dfs_chan_flagext,
144*5113495bSYour Name 			uint8_t *dfs_chan_ieee,
145*5113495bSYour Name 			uint8_t *dfs_chan_vhtop_ch_freq_seg1,
146*5113495bSYour Name 			uint8_t *dfs_chan_vhtop_ch_freq_seg2,
147*5113495bSYour Name 			uint16_t *dfs_chan_mhz_freq_seg1,
148*5113495bSYour Name 			uint16_t *dfs_chan_mhz_freq_seg2,
149*5113495bSYour Name 			int index);
150*5113495bSYour Name #endif
151*5113495bSYour Name 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
152*5113495bSYour Name 			uint16_t *flag_ext);
153*5113495bSYour Name 	QDF_STATUS (*mlme_channel_change_by_precac)(
154*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev);
155*5113495bSYour Name #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
156*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
157*5113495bSYour Name 	QDF_STATUS
158*5113495bSYour Name 	    (*mlme_precac_chan_change_csa_for_freq)(struct wlan_objmgr_pdev *,
159*5113495bSYour Name 						    uint16_t des_chan_freq,
160*5113495bSYour Name 						    uint16_t des_cfreq2,
161*5113495bSYour Name 						    enum wlan_phymode des_mode);
162*5113495bSYour Name #endif
163*5113495bSYour Name #endif
164*5113495bSYour Name #if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL) || defined(QCA_DFS_BW_EXPAND)
165*5113495bSYour Name 	QDF_STATUS
166*5113495bSYour Name 	(*mlme_postnol_chan_switch)(struct wlan_objmgr_pdev *pdev,
167*5113495bSYour Name 				    qdf_freq_t des_chan_freq,
168*5113495bSYour Name 				    qdf_freq_t des_cfreq2,
169*5113495bSYour Name 				    enum wlan_phymode des_mode);
170*5113495bSYour Name #endif
171*5113495bSYour Name #if defined(QCA_DFS_BW_PUNCTURE) && !defined(CONFIG_REG_CLIENT)
172*5113495bSYour Name 	QDF_STATUS
173*5113495bSYour Name 	    (*mlme_unpunc_chan_switch)(struct wlan_objmgr_pdev *pdev,
174*5113495bSYour Name 				       uint16_t new_punc_pattern);
175*5113495bSYour Name #endif
176*5113495bSYour Name 	QDF_STATUS (*mlme_nol_timeout_notification)(
177*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev);
178*5113495bSYour Name 	QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
179*5113495bSYour Name 			void *nollist,
180*5113495bSYour Name 			int nentries);
181*5113495bSYour Name 	bool (*mlme_is_opmode_sta)(struct wlan_objmgr_pdev *pdev);
182*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
183*5113495bSYour Name 	QDF_STATUS
184*5113495bSYour Name 	    (*mlme_get_cac_timeout_for_freq)(struct wlan_objmgr_pdev *pdev,
185*5113495bSYour Name 					     uint16_t dfs_ch_freq,
186*5113495bSYour Name 					     uint16_t c_vhtop_ch_freq_seg2,
187*5113495bSYour Name 					     uint64_t dfs_ch_flags,
188*5113495bSYour Name 					     int *cac_timeout);
189*5113495bSYour Name #endif
190*5113495bSYour Name #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
191*5113495bSYour Name 	QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels)
192*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
193*5113495bSYour Name #endif
194*5113495bSYour Name 	QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan)
195*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
196*5113495bSYour Name 	bool (*mlme_check_allowed_prim_chanlist)
197*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev, uint32_t chan);
198*5113495bSYour Name 	QDF_STATUS (*mlme_update_scan_channel_list)
199*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
200*5113495bSYour Name 	QDF_STATUS (*mlme_bringdown_vaps)
201*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
202*5113495bSYour Name 	void (*mlme_dfs_deliver_event)
203*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev,
204*5113495bSYour Name 			 uint16_t freq,
205*5113495bSYour Name 			 enum WLAN_DFS_EVENTS event);
206*5113495bSYour Name 	bool (*mlme_is_inter_band_chan_switch_allowed)
207*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
208*5113495bSYour Name 	void (*mlme_acquire_radar_mode_switch_lock)
209*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
210*5113495bSYour Name 	void (*mlme_release_radar_mode_switch_lock)
211*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
212*5113495bSYour Name #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
213*5113495bSYour Name 	QDF_STATUS (*mlme_proc_spoof_success)
214*5113495bSYour Name 			(struct wlan_objmgr_pdev *pdev);
215*5113495bSYour Name #endif
216*5113495bSYour Name 	QDF_STATUS (*mlme_set_tx_flag)(struct wlan_objmgr_pdev *pdev,
217*5113495bSYour Name 				       bool is_tx_allowed);
218*5113495bSYour Name };
219*5113495bSYour Name 
220*5113495bSYour Name extern struct dfs_to_mlme global_dfs_to_mlme;
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
224*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
225*5113495bSYour Name  * @arg: component argument
226*5113495bSYour Name  */
227*5113495bSYour Name QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
228*5113495bSYour Name 		void *arg);
229*5113495bSYour Name 
230*5113495bSYour Name /**
231*5113495bSYour Name  * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
232*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
233*5113495bSYour Name  * @arg: component argument
234*5113495bSYour Name  */
235*5113495bSYour Name QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
236*5113495bSYour Name 		void *arg);
237*5113495bSYour Name 
238*5113495bSYour Name /**
239*5113495bSYour Name  * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
240*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
241*5113495bSYour Name  * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
242*5113495bSYour Name  *
243*5113495bSYour Name  * Wrapper function for dfs_is_ap_cac_timer_running().
244*5113495bSYour Name  * This function called from outside of dfs component.
245*5113495bSYour Name  */
246*5113495bSYour Name QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
247*5113495bSYour Name 		int *is_ap_cac_timer_running);
248*5113495bSYour Name 
249*5113495bSYour Name /**
250*5113495bSYour Name  * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
251*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
252*5113495bSYour Name  * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
253*5113495bSYour Name  *
254*5113495bSYour Name  * Wrapper function for dfs_getnol().
255*5113495bSYour Name  * This function called from outside of dfs component.
256*5113495bSYour Name  */
257*5113495bSYour Name QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
258*5113495bSYour Name 
259*5113495bSYour Name /**
260*5113495bSYour Name  * ucfg_dfs_override_cac_timeout() -  Override the default CAC timeout.
261*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
262*5113495bSYour Name  * @cac_timeout: CAC timeout value.
263*5113495bSYour Name  * @status: pointer to save status
264*5113495bSYour Name  *
265*5113495bSYour Name  * Wrapper function for dfs_override_cac_timeout().
266*5113495bSYour Name  * This function called from outside of dfs component.
267*5113495bSYour Name  */
268*5113495bSYour Name QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
269*5113495bSYour Name 		int cac_timeout, int *status);
270*5113495bSYour Name 
271*5113495bSYour Name /**
272*5113495bSYour Name  * ucfg_dfs_get_override_cac_timeout() -  Get override CAC timeout value.
273*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
274*5113495bSYour Name  * @cac_timeout: Pointer to save the CAC timeout value.
275*5113495bSYour Name  * @status: pointer to save status
276*5113495bSYour Name  *
277*5113495bSYour Name  * Wrapper function for dfs_get_override_cac_timeout().
278*5113495bSYour Name  * This function called from outside of dfs component.
279*5113495bSYour Name  */
280*5113495bSYour Name QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
281*5113495bSYour Name 		int *cac_timeout, int *status);
282*5113495bSYour Name 
283*5113495bSYour Name /**
284*5113495bSYour Name  * ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
285*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
286*5113495bSYour Name  * @precac_timeout: Get precac timeout value in this variable.
287*5113495bSYour Name  *
288*5113495bSYour Name  * Wrapper function for dfs_get_override_precac_timeout().
289*5113495bSYour Name  * This function called from outside of dfs component.
290*5113495bSYour Name  */
291*5113495bSYour Name QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
292*5113495bSYour Name 		int *precac_timeout);
293*5113495bSYour Name 
294*5113495bSYour Name /**
295*5113495bSYour Name  * ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
296*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
297*5113495bSYour Name  * @precac_timeout: Precac timeout value.
298*5113495bSYour Name  *
299*5113495bSYour Name  * Wrapper function for dfs_override_precac_timeout().
300*5113495bSYour Name  * This function called from outside of dfs component.
301*5113495bSYour Name  */
302*5113495bSYour Name QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
303*5113495bSYour Name 		int precac_timeout);
304*5113495bSYour Name 
305*5113495bSYour Name /**
306*5113495bSYour Name  * ucfg_dfs_set_precac_enable() - Set precac enable flag.
307*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
308*5113495bSYour Name  * @value: input value for dfs_legacy_precac_ucfg flag.
309*5113495bSYour Name  *
310*5113495bSYour Name  * Wrapper function for dfs_set_precac_enable().
311*5113495bSYour Name  * This function called from outside of dfs component.
312*5113495bSYour Name  */
313*5113495bSYour Name QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
314*5113495bSYour Name 				      uint32_t value);
315*5113495bSYour Name 
316*5113495bSYour Name /**
317*5113495bSYour Name  * ucfg_dfs_get_agile_precac_enable() - Get agile precac enable flag.
318*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
319*5113495bSYour Name  * @buff: Pointer to save dfs_agile_precac_ucfg value.
320*5113495bSYour Name  *
321*5113495bSYour Name  * Wrapper function for dfs_is_legacy_precac_enabled().
322*5113495bSYour Name  * This function called from outside of dfs component.
323*5113495bSYour Name  *
324*5113495bSYour Name  * Return:
325*5113495bSYour Name  * * QDF_STATUS_SUCCESS: Successfully able to get agile precac flag.
326*5113495bSYour Name  * * QDF_STATUS_E_FAILURE: Failed to get agile precac flag.
327*5113495bSYour Name  */
328*5113495bSYour Name QDF_STATUS ucfg_dfs_get_agile_precac_enable(struct wlan_objmgr_pdev *pdev,
329*5113495bSYour Name 					    bool *buff);
330*5113495bSYour Name 
331*5113495bSYour Name #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
332*5113495bSYour Name /**
333*5113495bSYour Name  * ucfg_dfs_set_precac_intermediate_chan() - Set intermediate channel
334*5113495bSYour Name  *                                           for preCAC.
335*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
336*5113495bSYour Name  * @value: Channel number of intermediate channel
337*5113495bSYour Name  *
338*5113495bSYour Name  * Wrapper function for dfs_set_precac_intermediate_chan().
339*5113495bSYour Name  * This function is called from outside of dfs component.
340*5113495bSYour Name  *
341*5113495bSYour Name  * Return:
342*5113495bSYour Name  * * QDF_STATUS_SUCCESS  : Successfully set intermediate channel.
343*5113495bSYour Name  * * QDF_STATUS_E_FAILURE: Failed to set intermediate channel.
344*5113495bSYour Name  */
345*5113495bSYour Name QDF_STATUS ucfg_dfs_set_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
346*5113495bSYour Name 						 uint32_t value);
347*5113495bSYour Name 
348*5113495bSYour Name /**
349*5113495bSYour Name  * ucfg_dfs_get_precac_intermediate_chan() - Get intermediate channel
350*5113495bSYour Name  *						for preCAC.
351*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
352*5113495bSYour Name  * @buff: Pointer to Channel number of intermediate channel.
353*5113495bSYour Name  *
354*5113495bSYour Name  * Wrapper function for dfs_get_precac_intermediate_chan().
355*5113495bSYour Name  * This function is called from outside of dfs component.
356*5113495bSYour Name  *
357*5113495bSYour Name  * Return: Configured intermediate precac channel.
358*5113495bSYour Name  */
359*5113495bSYour Name QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
360*5113495bSYour Name 						 int *buff);
361*5113495bSYour Name 
362*5113495bSYour Name /**
363*5113495bSYour Name  * ucfg_dfs_get_precac_chan_state_for_freq() - Get precac status for the
364*5113495bSYour Name  * given channel.
365*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
366*5113495bSYour Name  * @precac_freq: Channel frequency for which precac state needs to be
367*5113495bSYour Name  *               determined.
368*5113495bSYour Name  *
369*5113495bSYour Name  * Wrapper function for dfs_get_precac_chan_state_for_freq().
370*5113495bSYour Name  * This function called from outside of dfs component.
371*5113495bSYour Name  *
372*5113495bSYour Name  * Return: Precac state of the given channel.
373*5113495bSYour Name  */
374*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
375*5113495bSYour Name enum precac_chan_state
376*5113495bSYour Name ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev,
377*5113495bSYour Name 					uint16_t precac_freq);
378*5113495bSYour Name #endif
379*5113495bSYour Name 
380*5113495bSYour Name #endif
381*5113495bSYour Name 
382*5113495bSYour Name #ifdef MOBILE_DFS_SUPPORT
383*5113495bSYour Name /**
384*5113495bSYour Name  * ucfg_dfs_update_config() - Update DFS user config.
385*5113495bSYour Name  * @psoc: Pointer to psoc.
386*5113495bSYour Name  * @req: DFS user config.
387*5113495bSYour Name  *
388*5113495bSYour Name  * Return: QDF_STATUS
389*5113495bSYour Name  */
390*5113495bSYour Name QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
391*5113495bSYour Name 		struct dfs_user_config *req);
392*5113495bSYour Name #else
ucfg_dfs_update_config(struct wlan_objmgr_psoc * psoc,struct dfs_user_config * req)393*5113495bSYour Name static inline QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
394*5113495bSYour Name 		struct dfs_user_config *req)
395*5113495bSYour Name {
396*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
397*5113495bSYour Name }
398*5113495bSYour Name #endif
399*5113495bSYour Name 
400*5113495bSYour Name /**
401*5113495bSYour Name  * ucfg_dfs_set_override_status_timeout() - override the value of host dfs
402*5113495bSYour Name  * status wait timeout.
403*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
404*5113495bSYour Name  * @status_timeout: timeout value.
405*5113495bSYour Name  *
406*5113495bSYour Name  * Wrapper function for dfs_set_override_status_timeout().
407*5113495bSYour Name  * This function called from outside of dfs component.
408*5113495bSYour Name  *
409*5113495bSYour Name  * Return: QDF_STATUS
410*5113495bSYour Name  */
411*5113495bSYour Name #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
412*5113495bSYour Name QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
413*5113495bSYour Name 					    int status_timeout);
414*5113495bSYour Name #else
415*5113495bSYour Name static inline
ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev * pdev,int status_timeout)416*5113495bSYour Name QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev,
417*5113495bSYour Name 					    int status_timeout)
418*5113495bSYour Name {
419*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
420*5113495bSYour Name }
421*5113495bSYour Name #endif
422*5113495bSYour Name 
423*5113495bSYour Name #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(WLAN_DFS_SYNTHETIC_RADAR)
424*5113495bSYour Name /**
425*5113495bSYour Name  * ucfg_dfs_allow_hw_pulses() - Set or unset dfs-allow_hw_pulses
426*5113495bSYour Name  * which isolates synthetic radar pulse detection from actual radar detection.
427*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
428*5113495bSYour Name  * @allow_hw_pulses: Allow synthetic pulse detection true/false.
429*5113495bSYour Name  *
430*5113495bSYour Name  * Wrapper function for dfs_set_allow_hw_pulses().
431*5113495bSYour Name  * This function called from outside of dfs component.
432*5113495bSYour Name  *
433*5113495bSYour Name  * Return: void
434*5113495bSYour Name  */
435*5113495bSYour Name void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
436*5113495bSYour Name 			      bool allow_hw_pulses);
437*5113495bSYour Name 
438*5113495bSYour Name /**
439*5113495bSYour Name  * ucfg_dfs_is_hw_pulses_allowed() - Check if actual radar detection is allowed
440*5113495bSYour Name  * or synthetic pulse detection is enabled.
441*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
442*5113495bSYour Name  *
443*5113495bSYour Name  * Wrapper function for dfs_is_hw_pulses_allowed().
444*5113495bSYour Name  * This function called from outside of dfs component.
445*5113495bSYour Name  *
446*5113495bSYour Name  * Return: bool
447*5113495bSYour Name  */
448*5113495bSYour Name bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev);
449*5113495bSYour Name #else
450*5113495bSYour Name static inline
ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev * pdev,bool allow_hw_pulses)451*5113495bSYour Name void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev,
452*5113495bSYour Name 			      bool allow_hw_pulses)
453*5113495bSYour Name {
454*5113495bSYour Name }
455*5113495bSYour Name 
456*5113495bSYour Name static inline
ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev * pdev)457*5113495bSYour Name bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev)
458*5113495bSYour Name {
459*5113495bSYour Name 	return true;
460*5113495bSYour Name }
461*5113495bSYour Name #endif
462*5113495bSYour Name 
463*5113495bSYour Name /**
464*5113495bSYour Name  * ucfg_dfs_get_override_status_timeout() - Get the value of host dfs status
465*5113495bSYour Name  * wait timeout.
466*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
467*5113495bSYour Name  * @status_timeout: Pointer to save the timeout value.
468*5113495bSYour Name  *
469*5113495bSYour Name  * Wrapper function for dfs_get_override_status_timeout().
470*5113495bSYour Name  * This function called from outside of dfs component.
471*5113495bSYour Name  *
472*5113495bSYour Name  * Return: QDF_STATUS
473*5113495bSYour Name  */
474*5113495bSYour Name #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
475*5113495bSYour Name QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
476*5113495bSYour Name 						int *status_timeout);
477*5113495bSYour Name #else
478*5113495bSYour Name static inline
ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev * pdev,int * status_timeout)479*5113495bSYour Name QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev,
480*5113495bSYour Name 						int *status_timeout)
481*5113495bSYour Name {
482*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
483*5113495bSYour Name }
484*5113495bSYour Name #endif
485*5113495bSYour Name 
486*5113495bSYour Name /**
487*5113495bSYour Name  * ucfg_dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking.
488*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
489*5113495bSYour Name  * @nol_subchannel_marking: Set NOL subchannel marking based on this value.
490*5113495bSYour Name  *
491*5113495bSYour Name  * Wrapper function for dfs_set_nol_subchannel_marking().
492*5113495bSYour Name  * This function is called from outside of dfs component.
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: QDF_STATUS
495*5113495bSYour Name  */
496*5113495bSYour Name QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
497*5113495bSYour Name 					       bool nol_subchannel_marking);
498*5113495bSYour Name 
499*5113495bSYour Name /**
500*5113495bSYour Name  * ucfg_dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel
501*5113495bSYour Name  * marking.
502*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
503*5113495bSYour Name  * @nol_subchannel_marking: Store the value of  NOL subchannel marking.
504*5113495bSYour Name  *
505*5113495bSYour Name  * Wrapper function for dfs_get_nol_subchannel_marking().
506*5113495bSYour Name  * This function is called from outside of dfs component.
507*5113495bSYour Name  *
508*5113495bSYour Name  * Return: QDF_STATUS
509*5113495bSYour Name  */
510*5113495bSYour Name QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
511*5113495bSYour Name 					       bool *nol_subchannel_marking);
512*5113495bSYour Name /**
513*5113495bSYour Name  * ucfg_dfs_reinit_timers() - Init DFS timers.
514*5113495bSYour Name  * @pdev: Pointer to wlan_objmgr_pdev structure.
515*5113495bSYour Name  *
516*5113495bSYour Name  * Wrapper function to reset CAC, NOL, DFS Test Timer and ZeroCAC Timer.
517*5113495bSYour Name  * This is invoked per pdev to reinitialize timers after HW Mode Switch is
518*5113495bSYour Name  * triggered.
519*5113495bSYour Name  */
520*5113495bSYour Name QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev);
521*5113495bSYour Name 
522*5113495bSYour Name /**
523*5113495bSYour Name  * ucfg_dfs_reset_agile_config() - Reset ADFS config.
524*5113495bSYour Name  * @psoc: Pointer to wlan_objmgr_psoc structure.
525*5113495bSYour Name  *
526*5113495bSYour Name  * Wrapper function to reset Agile DFS config such as the variables which hold
527*5113495bSYour Name  * information about the state of the preCAC timer, active precac
528*5113495bSYour Name  * dfs index and OCAC status. It is invoked before HW Mode switch is triggered
529*5113495bSYour Name  * to ensure ADFS config is in a well known consistent state.
530*5113495bSYour Name  */
531*5113495bSYour Name #ifdef QCA_SUPPORT_AGILE_DFS
532*5113495bSYour Name QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc);
533*5113495bSYour Name #else
ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc * psoc)534*5113495bSYour Name static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc
535*5113495bSYour Name 						    *psoc)
536*5113495bSYour Name {
537*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
538*5113495bSYour Name }
539*5113495bSYour Name #endif
540*5113495bSYour Name 
541*5113495bSYour Name /**
542*5113495bSYour Name  * ucfg_dfs_set_rcac_enable() - Set rcac enable flag.
543*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
544*5113495bSYour Name  * @rcac_en: User input value to enable/disable rolling cac feature.
545*5113495bSYour Name  *
546*5113495bSYour Name  */
547*5113495bSYour Name #ifdef QCA_SUPPORT_ADFS_RCAC
548*5113495bSYour Name QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
549*5113495bSYour Name 				    bool rcac_en);
550*5113495bSYour Name #else
551*5113495bSYour Name static inline QDF_STATUS
ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev * pdev,bool rcac_en)552*5113495bSYour Name ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
553*5113495bSYour Name 			 bool rcac_en)
554*5113495bSYour Name {
555*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
556*5113495bSYour Name }
557*5113495bSYour Name #endif
558*5113495bSYour Name 
559*5113495bSYour Name /**
560*5113495bSYour Name  * ucfg_dfs_get_rcac_enable() - Get rcac enable flag.
561*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
562*5113495bSYour Name  * @rcac_en: Pointer to hold the "rcac" config.
563*5113495bSYour Name  *
564*5113495bSYour Name  */
565*5113495bSYour Name #ifdef QCA_SUPPORT_ADFS_RCAC
566*5113495bSYour Name QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
567*5113495bSYour Name 				    bool *rcac_en);
568*5113495bSYour Name #else
569*5113495bSYour Name static inline QDF_STATUS
ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev * pdev,bool * rcac_en)570*5113495bSYour Name ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
571*5113495bSYour Name 			 bool *rcac_en)
572*5113495bSYour Name {
573*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
574*5113495bSYour Name }
575*5113495bSYour Name #endif
576*5113495bSYour Name 
577*5113495bSYour Name /**
578*5113495bSYour Name  * ucfg_dfs_set_rcac_freq() - Set rcac freq.
579*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
580*5113495bSYour Name  * @rcac_freq: User configured rcac freq in MHZ.
581*5113495bSYour Name  *
582*5113495bSYour Name  */
583*5113495bSYour Name #ifdef QCA_SUPPORT_ADFS_RCAC
584*5113495bSYour Name QDF_STATUS ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
585*5113495bSYour Name 				  qdf_freq_t rcac_freq);
586*5113495bSYour Name #else
587*5113495bSYour Name static inline QDF_STATUS
ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t rcac_freq)588*5113495bSYour Name ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
589*5113495bSYour Name 		       qdf_freq_t rcac_freq)
590*5113495bSYour Name {
591*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
592*5113495bSYour Name }
593*5113495bSYour Name #endif
594*5113495bSYour Name 
595*5113495bSYour Name /**
596*5113495bSYour Name  * ucfg_dfs_get_rcac_freq() - Get rcac freq.
597*5113495bSYour Name  * @pdev: Pointer to DFS pdev object.
598*5113495bSYour Name  * @rcac_freq: Pointer to store the user configured rcac freq in MHZ.
599*5113495bSYour Name  *
600*5113495bSYour Name  */
601*5113495bSYour Name #ifdef QCA_SUPPORT_ADFS_RCAC
602*5113495bSYour Name QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
603*5113495bSYour Name 				  qdf_freq_t *rcac_freq);
604*5113495bSYour Name #else
605*5113495bSYour Name static inline QDF_STATUS
ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t * rcac_freq)606*5113495bSYour Name ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
607*5113495bSYour Name 		       qdf_freq_t *rcac_freq)
608*5113495bSYour Name {
609*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
610*5113495bSYour Name }
611*5113495bSYour Name #endif
612*5113495bSYour Name 
613*5113495bSYour Name /**
614*5113495bSYour Name  * ucfg_dfs_is_agile_rcac_enabled() - Determine if Rolling CAC is supported
615*5113495bSYour Name  * or not.
616*5113495bSYour Name  * @pdev: Pointer to struct wlan_objmgr_pdev.
617*5113495bSYour Name  *
618*5113495bSYour Name  * Following are the conditions needed to assertain that rolling CAC
619*5113495bSYour Name  * is enabled:
620*5113495bSYour Name  * 1. DFS domain of the PDEV must be FCC or MKK.
621*5113495bSYour Name  * 2. User has enabled Rolling CAC configuration.
622*5113495bSYour Name  * 3. FW capability to support ADFS.
623*5113495bSYour Name  *
624*5113495bSYour Name  * Return: True if RCAC support is enabled, false otherwise.
625*5113495bSYour Name  */
626*5113495bSYour Name #ifdef QCA_SUPPORT_ADFS_RCAC
627*5113495bSYour Name bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev);
628*5113495bSYour Name #else
629*5113495bSYour Name static inline bool
ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev * pdev)630*5113495bSYour Name ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
631*5113495bSYour Name {
632*5113495bSYour Name 	return false;
633*5113495bSYour Name }
634*5113495bSYour Name #endif
635*5113495bSYour Name 
636*5113495bSYour Name #endif /* _WLAN_DFS_UCFG_API_H_ */
637