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