1 /* 2 * Copyright (c) 2016-2019 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_TGT_API_H_ 26 #define _WLAN_DFS_TGT_API_H_ 27 28 #include <wlan_dfs_public_struct.h> 29 30 #define WLAN_DFS_RESET_TIME_S 7 31 #define WLAN_DFS_WAIT (60 + WLAN_DFS_RESET_TIME_S) /* 60 seconds */ 32 #define WLAN_DFS_WAIT_MS ((WLAN_DFS_WAIT) * 1000) /*in MS*/ 33 34 /* Command id to send test radar to firmware */ 35 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0 36 37 /* Segment ID corresponding to primary segment */ 38 #define SEG_ID_PRIMARY 0 39 40 /* Segment ID corresponding to secondary segment */ 41 #define SEG_ID_SECONDARY 1 42 43 /* dfs_radar_args_for_unit_test: Radar parameters to be sent in unit test cmd. 44 * @IDX_CMD_ID: Index id pointing to command id value 45 * @IDX_PDEV_ID: Index id pointing to pdev id value 46 * @IDX_RADAR_PARAM1_ID: Index pointing to packed arguments value that includes 47 * 1). Segment ID, 48 * 2). Chirp information (is chirp or non chirp), 49 * 3). Frequency offset. 50 * 51 * The packed argument structure is: 52 * 53 * ------------------------------32 bits arg------------------------- 54 * 55 * ------------21 bits-------------|-------8 bits------|1 bit|2 bits| 56 * __________________________________________________________________ 57 *| | | | | | | | | | | | | | | 58 *|---------21 Unused bits---------|x|x|x| |x|x|x|x| |x| x | x | x | 59 *|________________________________|_|_|_|_|_|_|_|_|_|_|_____|___|___| 60 * 61 * |___________________|_____|_______| 62 * freq.offset Chirp segID 63 * 64 * @DFS_UNIT_TEST_NUM_ARGS: Number of arguments for bangradar unit test 65 * command. 66 * @DFS_MAX_NUM_UNIT_TEST_ARGS: Maximum number of arguments for unit test 67 * command in radar simulation. 68 */ 69 enum { 70 IDX_CMD_ID = 0, 71 IDX_PDEV_ID, 72 IDX_RADAR_PARAM1_ID, 73 DFS_UNIT_TEST_NUM_ARGS, 74 DFS_MAX_NUM_UNIT_TEST_ARGS = DFS_UNIT_TEST_NUM_ARGS 75 }; 76 77 #define SEG_ID_SIZE 2 78 #define IS_CHIRP_SIZE 1 79 #define MASK 0xFF 80 81 /** 82 * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send 83 * WMI command to firmware from host 84 * and simulate bangradar event. 85 * @vdev_id: vdev id 86 * @num_args: number of arguments 87 * @args: arguments 88 */ 89 struct dfs_emulate_bang_radar_test_cmd { 90 uint32_t vdev_id; 91 uint32_t num_args; 92 uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS]; 93 }; 94 95 /** 96 * struct vdev_adfs_complete_status - OCAC complete status event param 97 * @vdev_id: Physical device identifier 98 * @chan_freq: Channel number 99 * @chan_width: Channel Width 100 * @center_freq: Center channel number 101 * @ocac_status: off channel cac status 102 */ 103 struct vdev_adfs_complete_status { 104 uint32_t vdev_id; 105 uint32_t chan_freq; 106 uint32_t chan_width; 107 uint32_t center_freq; 108 uint32_t ocac_status; 109 }; 110 111 extern struct dfs_to_mlme global_dfs_to_mlme; 112 113 /** 114 * tgt_dfs_set_current_channel() - Fill dfs channel structure from 115 * dfs_channel structure. 116 * @pdev: Pointer to DFS pdev object. 117 * @dfs_ch_freq: Frequency in Mhz. 118 * @dfs_ch_flags: Channel flags. 119 * @dfs_ch_flagext: Extended channel flags. 120 * @dfs_ch_ieee: IEEE channel number. 121 * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1. 122 * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2. 123 */ 124 #ifdef DFS_COMPONENT_ENABLE 125 #ifdef CONFIG_CHAN_NUM_API 126 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev, 127 uint16_t dfs_ch_freq, 128 uint64_t dfs_ch_flags, 129 uint16_t dfs_ch_flagext, 130 uint8_t dfs_ch_ieee, 131 uint8_t dfs_ch_vhtop_ch_freq_seg1, 132 uint8_t dfs_ch_vhtop_ch_freq_seg2); 133 #endif 134 135 /** 136 * tgt_dfs_set_current_channel_for_freq() - Fill dfs channel structure from 137 * dfs_channel structure. 138 * @pdev: Pointer to DFS pdev object. 139 * @dfs_ch_freq: Frequency in Mhz. 140 * @dfs_ch_flags: Channel flags. 141 * @dfs_ch_flagext: Extended channel flags. 142 * @dfs_ch_ieee: IEEE channel number. 143 * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1. 144 * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2. 145 * @dfs_ch_mhz_freq_seg1: Channel center frequency of primary segment in MHZ. 146 * @dfs_ch_mhz_freq_seg2: Channel center frequency of secondary segment in MHZ 147 * applicable only for 80+80MHZ mode of operation. 148 */ 149 #ifdef CONFIG_CHAN_FREQ_API 150 QDF_STATUS 151 tgt_dfs_set_current_channel_for_freq(struct wlan_objmgr_pdev *pdev, 152 uint16_t dfs_ch_freq, 153 uint64_t dfs_ch_flags, 154 uint16_t dfs_ch_flagext, 155 uint8_t dfs_ch_ieee, 156 uint8_t dfs_ch_vhtop_ch_freq_seg1, 157 uint8_t dfs_ch_vhtop_ch_freq_seg2, 158 uint16_t dfs_ch_mhz_freq_seg1, 159 uint16_t dfs_ch_mhz_freq_seg2); 160 #endif 161 162 /** 163 * tgt_dfs_radar_enable() - Enables the radar. 164 * @pdev: Pointer to DFS pdev object. 165 * @no_cac: If no_cac is 0, it cancels the CAC. 166 * 167 * This is called each time a channel change occurs, to (potentially) enable 168 * the radar code. 169 */ 170 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev, 171 int no_cac, uint32_t opmode); 172 173 /** 174 * tgt_dfs_control()- Used to process ioctls related to DFS. 175 * @pdev: Pointer to DFS pdev object. 176 * @id: Command type. 177 * @indata: Input buffer. 178 * @insize: size of the input buffer. 179 * @outdata: A buffer for the results. 180 * @outsize: Size of the output buffer. 181 */ 182 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 183 u_int id, 184 void *indata, 185 uint32_t insize, 186 void *outdata, 187 uint32_t *outsize, 188 int *error); 189 190 /** 191 * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions 192 * @pdev: Pointer to DFS pdev object. 193 * 194 * Wrapper function for dfs_get_radars(). This function called from 195 * outside of DFS component. 196 */ 197 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev); 198 199 /** 200 * tgt_dfs_process_radar_ind() - Process radar found indication. 201 * @pdev: Pointer to DFS pdev object. 202 * @radar_found: radar found info. 203 * 204 * Process radar found indication. 205 * 206 * Return QDF_STATUS. 207 */ 208 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev, 209 struct radar_found_info *radar_found); 210 #else 211 static inline QDF_STATUS tgt_dfs_set_current_channel( 212 struct wlan_objmgr_pdev *pdev, 213 uint16_t dfs_ch_freq, 214 uint64_t dfs_ch_flags, 215 uint16_t dfs_ch_flagext, 216 uint8_t dfs_ch_ieee, 217 uint8_t dfs_ch_vhtop_ch_freq_seg1, 218 uint8_t dfs_ch_vhtop_ch_freq_seg2) 219 { 220 return QDF_STATUS_SUCCESS; 221 } 222 223 static inline QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev, 224 int no_cac, uint32_t opmode) 225 { 226 return QDF_STATUS_SUCCESS; 227 } 228 229 static inline QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 230 u_int id, 231 void *indata, 232 uint32_t insize, 233 void *outdata, 234 uint32_t *outsize, 235 int *error) 236 { 237 return QDF_STATUS_SUCCESS; 238 } 239 240 static inline QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev) 241 { 242 return QDF_STATUS_SUCCESS; 243 } 244 245 static inline QDF_STATUS tgt_dfs_process_radar_ind( 246 struct wlan_objmgr_pdev *pdev, 247 struct radar_found_info *radar_found) 248 { 249 return QDF_STATUS_SUCCESS; 250 } 251 #endif 252 253 /** 254 * tgt_dfs_process_phyerr() - Process phyerr. 255 * @pdev: Pointer to DFS pdev object. 256 * @buf: Phyerr buffer. 257 * @datalen: phyerr buffer length. 258 * @r_rssi: RSSI. 259 * @r_ext_rssi: Extension channel RSSI. 260 * @r_rs_tstamp: Timestamp. 261 * @r_fulltsf: TSF64. 262 * 263 * Wrapper function for dfs_process_phyerr(). This function called from 264 * outside of DFS component. 265 */ 266 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev, 267 void *buf, 268 uint16_t datalen, 269 uint8_t r_rssi, 270 uint8_t r_ext_rssi, 271 uint32_t r_rs_tstamp, 272 uint64_t r_fulltsf); 273 274 /** 275 * tgt_dfs_process_phyerr_filter_offload() - Process radar event. 276 * Wrapper function for dfs_process_phyerr_filter_offload(). This function 277 * called from outside of DFS component. 278 * @pdev: Pointer to DFS pdev object. 279 * @wlan_radar_event: pointer to radar_event_info. 280 * 281 * Return: QDF_STATUS 282 */ 283 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev, 284 struct radar_event_info *wlan_radar_event); 285 286 /** 287 * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload. 288 * @psoc: Pointer to psoc object. 289 * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload. 290 * 291 * Return: QDF_STATUS 292 */ 293 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc, 294 bool *is_phyerr_filter_offload); 295 296 /** 297 * tgt_dfs_destroy_object() - Destroys the DFS object. 298 * @pdev: Pointer to DFS pdev object. 299 * 300 * Wrapper function for dfs_destroy_object(). This function called from 301 * outside of DFS component. 302 */ 303 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev); 304 305 #ifdef QCA_MCL_DFS_SUPPORT 306 /** 307 * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold. 308 * @pdev: Pointer to DFS pdev object. 309 * 310 * Return QDF_STATUS. 311 */ 312 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev); 313 #else 314 static inline QDF_STATUS tgt_dfs_set_tx_leakage_threshold 315 (struct wlan_objmgr_pdev *pdev) 316 { 317 return QDF_STATUS_SUCCESS; 318 } 319 #endif 320 321 /** 322 * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running. 323 * @pdev: Pointer to DFS pdev object. 324 * @is_precac_timer_running: Pointer to save precac timer value. 325 * 326 * Wrapper function for dfs_is_precac_timer_running(). This function called from 327 * outside of DFS component. 328 */ 329 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev, 330 bool *is_precac_timer_running); 331 332 /** 333 * tgt_dfs_set_agile_precac_state() - set state for Agile Precac. 334 * 335 * @pdev: Pointer to DFS pdev object. 336 * @agile_precac_state: Agile Precac state 337 * 338 * wrapper function for dfs_set_agile_precac_state. 339 * This function called from outside of dfs component. 340 */ 341 QDF_STATUS tgt_dfs_set_agile_precac_state(struct wlan_objmgr_pdev *pdev, 342 int agile_precac_state); 343 344 /** 345 * tgt_dfs_agile_precac_start() - Start agile precac 346 * 347 * @pdev: Pointer to DFS pdev object. 348 * 349 * wrapper function for dfs_set_agile_precac_state. 350 * This function called from outside of dfs component. 351 */ 352 QDF_STATUS tgt_dfs_agile_precac_start(struct wlan_objmgr_pdev *pdev); 353 354 /** 355 * tgt_dfs_ocac_complete() - Process off channel cac complete indication. 356 * @pdev: Pointer to DFS pdev object. 357 * @vdev_adfs_complete_status: Off channel CAC complete status. 358 * 359 * wrapper function for dfs_set_agile_precac_state. 360 * This function called from outside of dfs component. 361 */ 362 QDF_STATUS tgt_dfs_ocac_complete(struct wlan_objmgr_pdev *pdev, 363 struct vdev_adfs_complete_status *ocac_status); 364 365 /** 366 * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac. 367 * @pdev: Pointer to DFS pdev object. 368 * @chan_mode: Channel mode. 369 * @ch_freq_seg1: Segment1 channel freq. 370 * @cfreq1: cfreq1. 371 * @cfreq2: cfreq2. 372 * @phy_mode: Precac phymode. 373 * @dfs_set_cfreq2: Precac cfreq2 374 * @set_agile: Agile mode flag. 375 * 376 * wrapper function for dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer(). 377 * This function called from outside of dfs component. 378 */ 379 #ifdef CONFIG_CHAN_NUM_API 380 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev, 381 uint32_t chan_mode, 382 uint8_t ch_freq_seg1, 383 uint32_t *cfreq1, 384 uint32_t *cfreq2, 385 uint32_t *phy_mode, 386 bool *dfs_set_cfreq2, 387 bool *set_agile); 388 #endif 389 390 /** 391 * tgt_dfs_find_vht80_precac_chan_freq() - Find VHT80 channel for precac 392 * @pdev: Pointer to DFS pdev object. 393 * @chan_mode: Channel mode. 394 * @ch_freq_seg1_mhz: Segment1 channel freq in MHZ. 395 * @cfreq1: cfreq1. 396 * @cfreq2: cfreq2. 397 * @phy_mode: Precac phymode. 398 * @dfs_set_cfreq2: Precac cfreq2 399 * @set_agile: Agile mode flag. 400 * 401 * wrapper function for dfs_find_vht80_chan_for_precac_for_freq(). 402 */ 403 #ifdef CONFIG_CHAN_FREQ_API 404 QDF_STATUS 405 tgt_dfs_find_vht80_precac_chan_freq(struct wlan_objmgr_pdev *pdev, 406 uint32_t chan_mode, 407 uint16_t ch_freq_mhz_seg1, 408 uint32_t *cfreq1, 409 uint32_t *cfreq2, 410 uint32_t *phy_mode, 411 bool *dfs_set_cfreq2, 412 bool *set_agile); 413 #endif 414 415 /** 416 * tgt_dfs_cac_complete() - Process cac complete indication. 417 * @pdev: Pointer to DFS pdev object. 418 * @vdev_id: vdev id. 419 * 420 * Process cac complete indication from firmware. 421 * 422 * Return QDF_STATUS. 423 */ 424 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev, 425 uint32_t vdev_id); 426 427 /** 428 * tgt_dfs_reg_ev_handler() - Register dfs events. 429 * @psoc: Pointer to psoc. 430 * 431 * Register dfs events. 432 * 433 * Return: QDF_STATUS. 434 */ 435 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc); 436 437 /** 438 * tgt_dfs_stop() - Clear dfs timers. 439 * @dfs: Pointer to wlan_dfs structure. 440 */ 441 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev); 442 443 /** 444 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar 445 * command. 446 * @pdev: Pointer to DFS pdev object. 447 * 448 * Process to emulate dfs bangradar command. 449 * 450 * Return: QDF_STATUS. 451 */ 452 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev, 453 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 454 455 #ifdef QCA_MCL_DFS_SUPPORT 456 /** 457 * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload 458 * @pdev: Pointer to DFS pdev object. 459 * 460 * Return: QDF_STATUS 461 */ 462 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev); 463 #else 464 static inline QDF_STATUS tgt_dfs_set_phyerr_filter_offload 465 (struct wlan_objmgr_pdev *pdev) 466 { 467 return QDF_STATUS_SUCCESS; 468 } 469 #endif 470 471 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 472 /** 473 * tgt_dfs_send_avg_params_to_fw() - send average radar parameters to fw. 474 * @pdev: Pointer to DFS pdev object. 475 * @params: Pointer to dfs radar average parameters. 476 * 477 * Return: QDF_STATUS 478 */ 479 QDF_STATUS 480 tgt_dfs_send_avg_params_to_fw(struct wlan_objmgr_pdev *pdev, 481 struct dfs_radar_found_params *params); 482 #endif 483 484 /** 485 * tgt_dfs_action_on_status_from_fw() - trigger the action to be taken based on 486 * host dfs status received from fw. 487 * @pdev: Pointer to pdev object. 488 * @status: Pointer to the host dfs status received from fw. 489 * 490 * Return: QDF_STATUS 491 */ 492 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 493 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 494 uint32_t *status); 495 #else 496 static inline 497 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 498 uint32_t *status) 499 { 500 return QDF_STATUS_SUCCESS; 501 } 502 #endif 503 504 /** 505 * tgt_dfs_is_radar_enabled() - checks if radar detection is enabled. 506 * @pdev: Pointer to pdev object. 507 * @ignore_dfs: Pointer to check the value. If 1, radar detection is disabled. 508 */ 509 void tgt_dfs_is_radar_enabled(struct wlan_objmgr_pdev *pdev, int *ignore_dfs); 510 511 /** 512 * tgt_dfs_reset_spoof_test() - reset the dfs spoof check variables 513 * @pdev: Pointer to pdev object. 514 * 515 * Return: QDF_STATUS 516 */ 517 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 518 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev); 519 #else 520 static inline 521 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev) 522 { 523 return QDF_STATUS_SUCCESS; 524 } 525 #endif 526 527 /** 528 * tgt_dfs_enable_stadfs() - Enable/Disable STADFS capability. 529 * @pdev: Pointer to DFS pdev object. 530 * @val: input value. 531 */ 532 void tgt_dfs_enable_stadfs(struct wlan_objmgr_pdev *pdev, bool val); 533 534 /** 535 * tgt_dfs_is_stadfs_enabled() - Get STADFS capability 536 * @pdev: Pointer to DFS pdev object. 537 * 538 * Return: true if STADFS is enabled, else false. 539 */ 540 bool tgt_dfs_is_stadfs_enabled(struct wlan_objmgr_pdev *pdev); 541 542 /** 543 * tgt_dfs_is_pdev_5ghz() - Check if the input pdev is 5GHZ. 544 * @pdev: Pointer to DFS pdev object. 545 * 546 * Return: true if the pdev supports 5GHz, else false. 547 */ 548 bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev); 549 550 #if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD) 551 /** 552 * tgt_dfs_send_usenol_pdev_param() - Send usenol pdev param to FW. 553 * @pdev: Pointer to pdev object. 554 * @usenol: Value of usenol 555 * 556 * Return: QDF_STATUS 557 */ 558 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 559 bool usenol); 560 561 /** 562 * tgt_dfs_send_subchan_marking() - Send subchannel marking pdev param to FW. 563 * @pdev: Pointer to pdev object. 564 * @subchanmark: Value of subchannel_marking. 565 * 566 * Return: QDF_STATUS 567 */ 568 QDF_STATUS tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, 569 bool subchanmark); 570 #else 571 static inline 572 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 573 bool usenol) 574 { 575 return QDF_STATUS_SUCCESS; 576 } 577 578 static inline QDF_STATUS 579 tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, bool subchanmark) 580 { 581 return QDF_STATUS_SUCCESS; 582 } 583 #endif 584 #ifdef QCA_SUPPORT_AGILE_DFS 585 /** 586 * tgt_dfs_set_fw_adfs_support() - Set FW aDFS support in dfs object. 587 * @pdev: Pointer to pdev object. 588 * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz. 589 * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz. 590 * 591 * Return: void. 592 */ 593 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 594 bool fw_adfs_support_160, 595 bool fw_adfs_support_non_160); 596 #else 597 static inline 598 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 599 bool fw_adfs_support_160, 600 bool fw_adfs_support_non_160) 601 { 602 } 603 #endif 604 #endif /* _WLAN_DFS_TGT_API_H_ */ 605