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