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