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