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