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 uint16_t dfs_radar_bitmap); 91 #ifdef CONFIG_CHAN_FREQ_API 92 QDF_STATUS (*mlme_start_csa_for_freq)(struct wlan_objmgr_pdev *pdev, 93 uint8_t ieee_chan, uint16_t freq, 94 uint16_t cfreq2, uint64_t flags); 95 #endif 96 97 QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev); 98 QDF_STATUS (*mlme_deliver_event_up_after_cac)( 99 struct wlan_objmgr_pdev *pdev); 100 #ifdef CONFIG_CHAN_FREQ_API 101 QDF_STATUS (*mlme_get_extchan_for_freq)(struct wlan_objmgr_pdev *pdev, 102 uint16_t *dfs_ch_freq, 103 uint64_t *dfs_ch_flags, 104 uint16_t *dfs_ch_flagext, 105 uint8_t *dfs_ch_ieee, 106 uint8_t *dfs_vhtop_ch_freq_seg1, 107 uint8_t *dfs_vhtop_ch_freq_seg2, 108 uint16_t *dfs_ch_mhz_freq_seg1, 109 uint16_t *dfs_ch_mhz_freq_seg2); 110 #endif 111 QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev, 112 int val); 113 QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev, 114 int ieee, 115 uint64_t flag, 116 int *freq); 117 #ifdef CONFIG_CHAN_FREQ_API 118 QDF_STATUS (*mlme_find_dot11_chan_for_freq)(struct wlan_objmgr_pdev *, 119 uint16_t freq, 120 uint16_t des_cfreq2_mhz, 121 int mode, 122 uint16_t *dfs_ch_freq, 123 uint64_t *dfs_ch_flags, 124 uint16_t *dfs_ch_flagext, 125 uint8_t *dfs_ch_ieee, 126 uint8_t *dfs_ch_freq_seg1, 127 uint8_t *dfs_ch_freq_seg2, 128 uint16_t *dfs_cfreq1_mhz, 129 uint16_t *dfs_cfreq2_mhz); 130 #endif 131 #ifdef CONFIG_CHAN_FREQ_API 132 QDF_STATUS (*mlme_get_dfs_channels_for_freq)( 133 struct wlan_objmgr_pdev *pdev, 134 uint16_t *dfs_chan_freq, 135 uint64_t *dfs_chan_flags, 136 uint16_t *dfs_chan_flagext, 137 uint8_t *dfs_chan_ieee, 138 uint8_t *dfs_chan_vhtop_ch_freq_seg1, 139 uint8_t *dfs_chan_vhtop_ch_freq_seg2, 140 uint16_t *dfs_chan_mhz_freq_seg1, 141 uint16_t *dfs_chan_mhz_freq_seg2, 142 int index); 143 #endif 144 QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev, 145 uint16_t *flag_ext); 146 QDF_STATUS (*mlme_channel_change_by_precac)( 147 struct wlan_objmgr_pdev *pdev); 148 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 149 #ifdef CONFIG_CHAN_FREQ_API 150 QDF_STATUS 151 (*mlme_precac_chan_change_csa_for_freq)(struct wlan_objmgr_pdev *, 152 uint16_t des_chan_freq, 153 uint16_t des_cfreq2, 154 enum wlan_phymode des_mode); 155 #endif 156 #endif 157 #if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL) || defined(QCA_DFS_BW_EXPAND) 158 QDF_STATUS 159 (*mlme_postnol_chan_switch)(struct wlan_objmgr_pdev *pdev, 160 qdf_freq_t des_chan_freq, 161 qdf_freq_t des_cfreq2, 162 enum wlan_phymode des_mode); 163 #endif 164 QDF_STATUS (*mlme_nol_timeout_notification)( 165 struct wlan_objmgr_pdev *pdev); 166 QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev, 167 void *nollist, 168 int nentries); 169 bool (*mlme_is_opmode_sta)(struct wlan_objmgr_pdev *pdev); 170 #ifdef CONFIG_CHAN_FREQ_API 171 QDF_STATUS 172 (*mlme_get_cac_timeout_for_freq)(struct wlan_objmgr_pdev *pdev, 173 uint16_t dfs_ch_freq, 174 uint16_t c_vhtop_ch_freq_seg2, 175 uint64_t dfs_ch_flags, 176 int *cac_timeout); 177 #endif 178 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 179 QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels) 180 (struct wlan_objmgr_pdev *pdev); 181 #endif 182 QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan) 183 (struct wlan_objmgr_pdev *pdev, int no_chans_avail); 184 bool (*mlme_check_allowed_prim_chanlist) 185 (struct wlan_objmgr_pdev *pdev, uint32_t chan); 186 QDF_STATUS (*mlme_update_scan_channel_list) 187 (struct wlan_objmgr_pdev *pdev); 188 QDF_STATUS (*mlme_bringdown_vaps) 189 (struct wlan_objmgr_pdev *pdev); 190 void (*mlme_dfs_deliver_event) 191 (struct wlan_objmgr_pdev *pdev, 192 uint16_t freq, 193 enum WLAN_DFS_EVENTS event); 194 bool (*mlme_is_inter_band_chan_switch_allowed) 195 (struct wlan_objmgr_pdev *pdev); 196 void (*mlme_acquire_radar_mode_switch_lock) 197 (struct wlan_objmgr_pdev *pdev); 198 void (*mlme_release_radar_mode_switch_lock) 199 (struct wlan_objmgr_pdev *pdev); 200 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 201 QDF_STATUS (*mlme_proc_spoof_success) 202 (struct wlan_objmgr_pdev *pdev); 203 #endif 204 }; 205 206 extern struct dfs_to_mlme global_dfs_to_mlme; 207 208 /** 209 * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler. 210 * @pdev: Pointer to DFS pdev object. 211 */ 212 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev, 213 void *arg); 214 215 /** 216 * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler. 217 * @pdev: Pointer to DFS pdev object. 218 */ 219 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev, 220 void *arg); 221 222 /** 223 * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer. 224 * @pdev: Pointer to DFS pdev object. 225 * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value. 226 * 227 * Wrapper function for dfs_is_ap_cac_timer_running(). 228 * This function called from outside of dfs component. 229 */ 230 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev, 231 int *is_ap_cac_timer_running); 232 233 /** 234 * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol() 235 * @pdev: Pointer to DFS pdev object. 236 * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure. 237 * 238 * Wrapper function for dfs_getnol(). 239 * This function called from outside of dfs component. 240 */ 241 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo); 242 243 /** 244 * ucfg_dfs_override_cac_timeout() - Override the default CAC timeout. 245 * @pdev: Pointer to DFS pdev object. 246 * @cac_timeout: CAC timeout value. 247 * 248 * Wrapper function for dfs_override_cac_timeout(). 249 * This function called from outside of dfs component. 250 */ 251 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev, 252 int cac_timeout, int *status); 253 254 /** 255 * ucfg_dfs_get_override_cac_timeout() - Get override CAC timeout value. 256 * @pdev: Pointer to DFS pdev object. 257 * @cac_timeout: Pointer to save the CAC timeout value. 258 * 259 * Wrapper function for dfs_get_override_cac_timeout(). 260 * This function called from outside of dfs component. 261 */ 262 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev, 263 int *cac_timeout, int *status); 264 265 /** 266 * ucfg_dfs_get_override_precac_timeout() - Get precac timeout. 267 * @pdev: Pointer to DFS pdev object. 268 * @precac_timeout: Get precac timeout value in this variable. 269 * 270 * Wrapper function for dfs_get_override_precac_timeout(). 271 * This function called from outside of dfs component. 272 */ 273 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev, 274 int *precac_timeout); 275 276 /** 277 * ucfg_dfs_override_precac_timeout() - Override the default precac timeout. 278 * @pdev: Pointer to DFS pdev object. 279 * @precac_timeout: Precac timeout value. 280 * 281 * Wrapper function for dfs_override_precac_timeout(). 282 * This function called from outside of dfs component. 283 */ 284 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev, 285 int precac_timeout); 286 287 /** 288 * ucfg_dfs_set_precac_enable() - Set precac enable flag. 289 * @pdev: Pointer to DFS pdev object. 290 * @value: input value for dfs_legacy_precac_ucfg flag. 291 * 292 * Wrapper function for dfs_set_precac_enable(). 293 * This function called from outside of dfs component. 294 */ 295 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev, 296 uint32_t value); 297 298 /** 299 * ucfg_dfs_get_agile_precac_enable() - Get agile precac enable flag. 300 * @pdev: Pointer to DFS pdev object. 301 * @buff: Pointer to save dfs_agile_precac_ucfg value. 302 * 303 * Wrapper function for dfs_is_legacy_precac_enabled(). 304 * This function called from outside of dfs component. 305 * 306 * Return: 307 * * QDF_STATUS_SUCCESS: Successfully able to get agile precac flag. 308 * * QDF_STATUS_E_FAILURE: Failed to get agile precac flag. 309 */ 310 QDF_STATUS ucfg_dfs_get_agile_precac_enable(struct wlan_objmgr_pdev *pdev, 311 bool *buff); 312 313 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 314 /** 315 * ucfg_dfs_set_precac_intermediate_chan() - Set intermediate channel 316 * for preCAC. 317 * @pdev: Pointer to DFS pdev object. 318 * @value: Channel number of intermediate channel 319 * 320 * Wrapper function for dfs_set_precac_intermediate_chan(). 321 * This function is called from outside of dfs component. 322 * 323 * Return: 324 * * QDF_STATUS_SUCCESS : Successfully set intermediate channel. 325 * * QDF_STATUS_E_FAILURE: Failed to set intermediate channel. 326 */ 327 QDF_STATUS ucfg_dfs_set_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev, 328 uint32_t value); 329 330 /** 331 * ucfg_dfs_get_precac_intermediate_chan() - Get intermediate channel 332 * for preCAC. 333 * @pdev: Pointer to DFS pdev object. 334 * @buff: Pointer to Channel number of intermediate channel. 335 * 336 * Wrapper function for dfs_get_precac_intermediate_chan(). 337 * This function is called from outside of dfs component. 338 * 339 * Return: Configured intermediate precac channel. 340 */ 341 QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev, 342 int *buff); 343 344 /** 345 * ucfg_dfs_get_precac_chan_state_for_freq() - Get precac status for the 346 * given channel. 347 * @pdev: Pointer to DFS pdev object. 348 * @precac_chan: Channel frequency for which precac state needs to be 349 * determined. 350 * 351 * Wrapper function for dfs_get_precac_chan_state_for_freq(). 352 * This function called from outside of dfs component. 353 * 354 * Return: Precac state of the given channel. 355 */ 356 #ifdef CONFIG_CHAN_FREQ_API 357 enum precac_chan_state 358 ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev, 359 uint16_t precac_freq); 360 #endif 361 362 #endif 363 364 #ifdef MOBILE_DFS_SUPPORT 365 /** 366 * ucfg_dfs_update_config() - Update DFS user config. 367 * @psoc: Pointer to psoc. 368 * @req: DFS user config. 369 * 370 * Return: QDF_STATUS 371 */ 372 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc, 373 struct dfs_user_config *req); 374 #else 375 static inline QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc, 376 struct dfs_user_config *req) 377 { 378 return QDF_STATUS_SUCCESS; 379 } 380 #endif 381 382 /** 383 * ucfg_dfs_set_override_status_timeout() - override the value of host dfs 384 * status wait timeout. 385 * @pdev: Pointer to DFS pdev object. 386 * @status_timeout: timeout value. 387 * 388 * Wrapper function for dfs_set_override_status_timeout(). 389 * This function called from outside of dfs component. 390 * 391 * Return: QDF_STATUS 392 */ 393 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 394 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev, 395 int status_timeout); 396 #else 397 static inline 398 QDF_STATUS ucfg_dfs_set_override_status_timeout(struct wlan_objmgr_pdev *pdev, 399 int status_timeout) 400 { 401 return QDF_STATUS_SUCCESS; 402 } 403 #endif 404 405 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(WLAN_DFS_SYNTHETIC_RADAR) 406 /** 407 * ucfg_dfs_allow_hw_pulses() - Set or unset dfs-allow_hw_pulses 408 * which isolates synthetic radar pulse detection from actual radar detection. 409 * @pdev: Pointer to DFS pdev object. 410 * @allow_hw_pulses: Allow synthetic pulse detection true/false. 411 * 412 * Wrapper function for dfs_set_allow_hw_pulses(). 413 * This function called from outside of dfs component. 414 * 415 * Return: void 416 */ 417 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev, 418 bool allow_hw_pulses); 419 420 /** 421 * ucfg_dfs_is_hw_pulses_allowed() - Check if actual radar detection is allowed 422 * or synthetic pulse detection is enabled. 423 * @pdev: Pointer to DFS pdev object. 424 * 425 * Wrapper function for dfs_is_hw_pulses_allowed(). 426 * This function called from outside of dfs component. 427 * 428 * Return: bool 429 */ 430 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev); 431 #else 432 static inline 433 void ucfg_dfs_allow_hw_pulses(struct wlan_objmgr_pdev *pdev, 434 bool allow_hw_pulses) 435 { 436 } 437 438 static inline 439 bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev) 440 { 441 return true; 442 } 443 #endif 444 445 /** 446 * ucfg_dfs_get_override_status_timeout() - Get the value of host dfs status 447 * wait timeout. 448 * @pdev: Pointer to DFS pdev object. 449 * @status_timeout: Pointer to save the timeout value. 450 * 451 * Wrapper function for dfs_get_override_status_timeout(). 452 * This function called from outside of dfs component. 453 * 454 * Return: QDF_STATUS 455 */ 456 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 457 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev, 458 int *status_timeout); 459 #else 460 static inline 461 QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev, 462 int *status_timeout) 463 { 464 return QDF_STATUS_SUCCESS; 465 } 466 #endif 467 468 /** 469 * ucfg_dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking. 470 * @pdev: Pointer to DFS pdev object. 471 * @nol_subchannel_marking: Set NOL subchannel marking based on this value. 472 * 473 * Wrapper function for dfs_set_nol_subchannel_marking(). 474 * This function is called from outside of dfs component. 475 * 476 * Return: QDF_STATUS 477 */ 478 QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, 479 bool nol_subchannel_marking); 480 481 /** 482 * ucfg_dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel 483 * marking. 484 * @pdev: Pointer to DFS pdev object. 485 * @nol_subchannel_marking: Store the value of NOL subchannel marking. 486 * 487 * Wrapper function for dfs_get_nol_subchannel_marking(). 488 * This function is called from outside of dfs component. 489 * 490 * Return: QDF_STATUS 491 */ 492 QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, 493 bool *nol_subchannel_marking); 494 /** 495 * ucfg_dfs_reinit_timers() - Init DFS timers. 496 * @pdev: Pointer to wlan_objmgr_pdev structure. 497 * 498 * Wrapper function to reset CAC, NOL, DFS Test Timer and ZeroCAC Timer. 499 * This is invoked per pdev to reinitialize timers after HW Mode Switch is 500 * triggered. 501 */ 502 QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev); 503 504 /** 505 * ucfg_dfs_reset_agile_config() - Reset ADFS config. 506 * @pdev: Pointer to wlan_objmgr_pdev structure. 507 * 508 * Wrapper function to reset Agile DFS config such as the variables which hold 509 * information about the state of the preCAC timer, active precac 510 * dfs index and OCAC status. It is invoked before HW Mode switch is triggered 511 * to ensure ADFS config is in a well known consistent state. 512 */ 513 #ifdef QCA_SUPPORT_AGILE_DFS 514 QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc); 515 #else 516 static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc 517 *psoc) 518 { 519 return QDF_STATUS_SUCCESS; 520 } 521 #endif 522 523 /** 524 * ucfg_dfs_set_rcac_enable() - Set rcac enable flag. 525 * @pdev: Pointer to DFS pdev object. 526 * @rcac_en: User input value to enable/disable rolling cac feature. 527 * 528 */ 529 #ifdef QCA_SUPPORT_ADFS_RCAC 530 QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev, 531 bool rcac_en); 532 #else 533 static inline QDF_STATUS 534 ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev, 535 bool rcac_en) 536 { 537 return QDF_STATUS_SUCCESS; 538 } 539 #endif 540 541 /** 542 * ucfg_dfs_get_rcac_enable() - Get rcac enable flag. 543 * @pdev: Pointer to DFS pdev object. 544 * @rcac_en: Pointer to hold the "rcac" config. 545 * 546 */ 547 #ifdef QCA_SUPPORT_ADFS_RCAC 548 QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev, 549 bool *rcac_en); 550 #else 551 static inline QDF_STATUS 552 ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev, 553 bool *rcac_en) 554 { 555 return QDF_STATUS_SUCCESS; 556 } 557 #endif 558 559 /** 560 * ucfg_dfs_set_rcac_freq() - Set rcac freq. 561 * @pdev: Pointer to DFS pdev object. 562 * @rcac_freq: User configured rcac freq in MHZ. 563 * 564 */ 565 #ifdef QCA_SUPPORT_ADFS_RCAC 566 QDF_STATUS ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev, 567 qdf_freq_t rcac_freq); 568 #else 569 static inline QDF_STATUS 570 ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev, 571 qdf_freq_t rcac_freq) 572 { 573 return QDF_STATUS_SUCCESS; 574 } 575 #endif 576 577 /** 578 * ucfg_dfs_get_rcac_freq() - Get rcac freq. 579 * @pdev: Pointer to DFS pdev object. 580 * @rcac_freq: Pointer to store the user configured rcac freq in MHZ. 581 * 582 */ 583 #ifdef QCA_SUPPORT_ADFS_RCAC 584 QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev, 585 qdf_freq_t *rcac_freq); 586 #else 587 static inline QDF_STATUS 588 ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev, 589 qdf_freq_t *rcac_freq) 590 { 591 return QDF_STATUS_SUCCESS; 592 } 593 #endif 594 595 /** 596 * ucfg_dfs_is_agile_rcac_enabled() - Determine if Rolling CAC is supported 597 * or not. 598 * @pdev: Pointer to struct wlan_objmgr_pdev. 599 * 600 * Following are the conditions needed to assertain that rolling CAC 601 * is enabled: 602 * 1. DFS domain of the PDEV must be FCC or MKK. 603 * 2. User has enabled Rolling CAC configuration. 604 * 3. FW capability to support ADFS. 605 * 606 * Return: True if RCAC support is enabled, false otherwise. 607 */ 608 #ifdef QCA_SUPPORT_ADFS_RCAC 609 bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev); 610 #else 611 static inline bool 612 ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev) 613 { 614 return false; 615 } 616 #endif 617 618 #endif /* _WLAN_DFS_UCFG_API_H_ */ 619