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