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