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_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 * @enable: disable/enable radar 167 * 168 * This is called each time a channel change occurs, to (potentially) enable 169 * the radar code. 170 */ 171 QDF_STATUS tgt_dfs_radar_enable( 172 struct wlan_objmgr_pdev *pdev, 173 int no_cac, uint32_t opmode, bool enable); 174 175 /** 176 * tgt_dfs_control()- Used to process ioctls related to DFS. 177 * @pdev: Pointer to DFS pdev object. 178 * @id: Command type. 179 * @indata: Input buffer. 180 * @insize: size of the input buffer. 181 * @outdata: A buffer for the results. 182 * @outsize: Size of the output buffer. 183 */ 184 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 185 u_int id, 186 void *indata, 187 uint32_t insize, 188 void *outdata, 189 uint32_t *outsize, 190 int *error); 191 192 /** 193 * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions 194 * @pdev: Pointer to DFS pdev object. 195 * 196 * Wrapper function for dfs_get_radars(). This function called from 197 * outside of DFS component. 198 */ 199 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev); 200 201 /** 202 * tgt_dfs_process_radar_ind() - Process radar found indication. 203 * @pdev: Pointer to DFS pdev object. 204 * @radar_found: radar found info. 205 * 206 * Process radar found indication. 207 * 208 * Return QDF_STATUS. 209 */ 210 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev, 211 struct radar_found_info *radar_found); 212 #else 213 static inline QDF_STATUS tgt_dfs_set_current_channel( 214 struct wlan_objmgr_pdev *pdev, 215 uint16_t dfs_ch_freq, 216 uint64_t dfs_ch_flags, 217 uint16_t dfs_ch_flagext, 218 uint8_t dfs_ch_ieee, 219 uint8_t dfs_ch_vhtop_ch_freq_seg1, 220 uint8_t dfs_ch_vhtop_ch_freq_seg2) 221 { 222 return QDF_STATUS_SUCCESS; 223 } 224 225 static inline QDF_STATUS tgt_dfs_radar_enable( 226 struct wlan_objmgr_pdev *pdev, 227 int no_cac, uint32_t opmode, bool enable) 228 { 229 return QDF_STATUS_SUCCESS; 230 } 231 232 static inline QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 233 u_int id, 234 void *indata, 235 uint32_t insize, 236 void *outdata, 237 uint32_t *outsize, 238 int *error) 239 { 240 return QDF_STATUS_SUCCESS; 241 } 242 243 static inline QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev) 244 { 245 return QDF_STATUS_SUCCESS; 246 } 247 248 static inline QDF_STATUS tgt_dfs_process_radar_ind( 249 struct wlan_objmgr_pdev *pdev, 250 struct radar_found_info *radar_found) 251 { 252 return QDF_STATUS_SUCCESS; 253 } 254 #endif 255 256 /** 257 * tgt_dfs_process_phyerr() - Process phyerr. 258 * @pdev: Pointer to DFS pdev object. 259 * @buf: Phyerr buffer. 260 * @datalen: phyerr buffer length. 261 * @r_rssi: RSSI. 262 * @r_ext_rssi: Extension channel RSSI. 263 * @r_rs_tstamp: Timestamp. 264 * @r_fulltsf: TSF64. 265 * 266 * Wrapper function for dfs_process_phyerr(). This function called from 267 * outside of DFS component. 268 */ 269 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev, 270 void *buf, 271 uint16_t datalen, 272 uint8_t r_rssi, 273 uint8_t r_ext_rssi, 274 uint32_t r_rs_tstamp, 275 uint64_t r_fulltsf); 276 277 /** 278 * tgt_dfs_process_phyerr_filter_offload() - Process radar event. 279 * Wrapper function for dfs_process_phyerr_filter_offload(). This function 280 * called from outside of DFS component. 281 * @pdev: Pointer to DFS pdev object. 282 * @wlan_radar_event: pointer to radar_event_info. 283 * 284 * Return: QDF_STATUS 285 */ 286 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev, 287 struct radar_event_info *wlan_radar_event); 288 289 /** 290 * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload. 291 * @psoc: Pointer to psoc object. 292 * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload. 293 * 294 * Return: QDF_STATUS 295 */ 296 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc, 297 bool *is_phyerr_filter_offload); 298 299 /** 300 * tgt_dfs_destroy_object() - Destroys the DFS object. 301 * @pdev: Pointer to DFS pdev object. 302 * 303 * Wrapper function for dfs_destroy_object(). This function called from 304 * outside of DFS component. 305 */ 306 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev); 307 308 #ifdef QCA_MCL_DFS_SUPPORT 309 /** 310 * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold. 311 * @pdev: Pointer to DFS pdev object. 312 * 313 * Return QDF_STATUS. 314 */ 315 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev); 316 #else 317 static inline QDF_STATUS tgt_dfs_set_tx_leakage_threshold 318 (struct wlan_objmgr_pdev *pdev) 319 { 320 return QDF_STATUS_SUCCESS; 321 } 322 #endif 323 324 /** 325 * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running. 326 * @pdev: Pointer to DFS pdev object. 327 * @is_precac_timer_running: Pointer to save precac timer value. 328 * 329 * Wrapper function for dfs_is_precac_timer_running(). This function called from 330 * outside of DFS component. 331 */ 332 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev, 333 bool *is_precac_timer_running); 334 335 /** 336 * tgt_dfs_set_agile_precac_state() - set state for Agile Precac. 337 * 338 * @pdev: Pointer to DFS pdev object. 339 * @agile_precac_state: Agile Precac state 340 * 341 * wrapper function for dfs_set_agile_precac_state. 342 * This function called from outside of dfs component. 343 */ 344 QDF_STATUS tgt_dfs_set_agile_precac_state(struct wlan_objmgr_pdev *pdev, 345 int agile_precac_state); 346 347 /** 348 * tgt_dfs_agile_precac_start() - Start agile precac 349 * 350 * @pdev: Pointer to DFS pdev object. 351 * 352 * wrapper function for dfs_set_agile_precac_state. 353 * This function called from outside of dfs component. 354 */ 355 QDF_STATUS tgt_dfs_agile_precac_start(struct wlan_objmgr_pdev *pdev); 356 357 /** 358 * tgt_dfs_ocac_complete() - Process off channel cac complete indication. 359 * @pdev: Pointer to DFS pdev object. 360 * @vdev_adfs_complete_status: Off channel CAC complete status. 361 * 362 * wrapper function for dfs_set_agile_precac_state. 363 * This function called from outside of dfs component. 364 */ 365 QDF_STATUS tgt_dfs_ocac_complete(struct wlan_objmgr_pdev *pdev, 366 struct vdev_adfs_complete_status *ocac_status); 367 368 /** 369 * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac. 370 * @pdev: Pointer to DFS pdev object. 371 * @chan_mode: Channel mode. 372 * @ch_freq_seg1: Segment1 channel freq. 373 * @cfreq1: cfreq1. 374 * @cfreq2: cfreq2. 375 * @phy_mode: Precac phymode. 376 * @dfs_set_cfreq2: Precac cfreq2 377 * @set_agile: Agile mode flag. 378 * 379 * wrapper function for dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer(). 380 * This function called from outside of dfs component. 381 */ 382 #ifdef CONFIG_CHAN_NUM_API 383 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev, 384 uint32_t chan_mode, 385 uint8_t ch_freq_seg1, 386 uint32_t *cfreq1, 387 uint32_t *cfreq2, 388 uint32_t *phy_mode, 389 bool *dfs_set_cfreq2, 390 bool *set_agile); 391 #endif 392 393 /** 394 * tgt_dfs_find_vht80_precac_chan_freq() - Find VHT80 channel for precac 395 * @pdev: Pointer to DFS pdev object. 396 * @chan_mode: Channel mode. 397 * @ch_freq_seg1_mhz: Segment1 channel freq in MHZ. 398 * @cfreq1: cfreq1. 399 * @cfreq2: cfreq2. 400 * @phy_mode: Precac phymode. 401 * @dfs_set_cfreq2: Precac cfreq2 402 * @set_agile: Agile mode flag. 403 * 404 * wrapper function for dfs_find_vht80_chan_for_precac_for_freq(). 405 */ 406 #ifdef CONFIG_CHAN_FREQ_API 407 QDF_STATUS 408 tgt_dfs_find_vht80_precac_chan_freq(struct wlan_objmgr_pdev *pdev, 409 uint32_t chan_mode, 410 uint16_t ch_freq_mhz_seg1, 411 uint32_t *cfreq1, 412 uint32_t *cfreq2, 413 uint32_t *phy_mode, 414 bool *dfs_set_cfreq2, 415 bool *set_agile); 416 #endif 417 418 /** 419 * tgt_dfs_cac_complete() - Process cac complete indication. 420 * @pdev: Pointer to DFS pdev object. 421 * @vdev_id: vdev id. 422 * 423 * Process cac complete indication from firmware. 424 * 425 * Return QDF_STATUS. 426 */ 427 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev, 428 uint32_t vdev_id); 429 430 /** 431 * tgt_dfs_reg_ev_handler() - Register dfs events. 432 * @psoc: Pointer to psoc. 433 * 434 * Register dfs events. 435 * 436 * Return: QDF_STATUS. 437 */ 438 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc); 439 440 /** 441 * tgt_dfs_stop() - Clear dfs timers. 442 * @dfs: Pointer to wlan_dfs structure. 443 */ 444 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev); 445 446 /** 447 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar 448 * command. 449 * @pdev: Pointer to DFS pdev object. 450 * 451 * Process to emulate dfs bangradar command. 452 * 453 * Return: QDF_STATUS. 454 */ 455 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev, 456 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 457 458 #ifdef QCA_MCL_DFS_SUPPORT 459 /** 460 * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload 461 * @pdev: Pointer to DFS pdev object. 462 * 463 * Return: QDF_STATUS 464 */ 465 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev); 466 #else 467 static inline QDF_STATUS tgt_dfs_set_phyerr_filter_offload 468 (struct wlan_objmgr_pdev *pdev) 469 { 470 return QDF_STATUS_SUCCESS; 471 } 472 #endif 473 474 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 475 /** 476 * tgt_dfs_send_avg_params_to_fw() - send average radar parameters to fw. 477 * @pdev: Pointer to DFS pdev object. 478 * @params: Pointer to dfs radar average parameters. 479 * 480 * Return: QDF_STATUS 481 */ 482 QDF_STATUS 483 tgt_dfs_send_avg_params_to_fw(struct wlan_objmgr_pdev *pdev, 484 struct dfs_radar_found_params *params); 485 #endif 486 487 /** 488 * tgt_dfs_action_on_status_from_fw() - trigger the action to be taken based on 489 * host dfs status received from fw. 490 * @pdev: Pointer to pdev object. 491 * @status: Pointer to the host dfs status received from fw. 492 * 493 * Return: QDF_STATUS 494 */ 495 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 496 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 497 uint32_t *status); 498 #else 499 static inline 500 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 501 uint32_t *status) 502 { 503 return QDF_STATUS_SUCCESS; 504 } 505 #endif 506 507 /** 508 * tgt_dfs_is_radar_enabled() - checks if radar detection is enabled. 509 * @pdev: Pointer to pdev object. 510 * @ignore_dfs: Pointer to check the value. If 1, radar detection is disabled. 511 */ 512 void tgt_dfs_is_radar_enabled(struct wlan_objmgr_pdev *pdev, int *ignore_dfs); 513 514 /** 515 * tgt_dfs_reset_spoof_test() - reset the dfs spoof check variables 516 * @pdev: Pointer to pdev object. 517 * 518 * Return: QDF_STATUS 519 */ 520 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 521 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev); 522 #else 523 static inline 524 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev) 525 { 526 return QDF_STATUS_SUCCESS; 527 } 528 #endif 529 530 /** 531 * tgt_dfs_enable_stadfs() - Enable/Disable STADFS capability. 532 * @pdev: Pointer to DFS pdev object. 533 * @val: input value. 534 */ 535 void tgt_dfs_enable_stadfs(struct wlan_objmgr_pdev *pdev, bool val); 536 537 /** 538 * tgt_dfs_is_stadfs_enabled() - Get STADFS capability 539 * @pdev: Pointer to DFS pdev object. 540 * 541 * Return: true if STADFS is enabled, else false. 542 */ 543 bool tgt_dfs_is_stadfs_enabled(struct wlan_objmgr_pdev *pdev); 544 545 /** 546 * tgt_dfs_is_pdev_5ghz() - Check if the input pdev is 5GHZ. 547 * @pdev: Pointer to DFS pdev object. 548 * 549 * Return: true if the pdev supports 5GHz, else false. 550 */ 551 bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev); 552 553 #if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD) 554 /** 555 * tgt_dfs_send_usenol_pdev_param() - Send usenol pdev param to FW. 556 * @pdev: Pointer to pdev object. 557 * @usenol: Value of usenol 558 * 559 * Return: QDF_STATUS 560 */ 561 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 562 bool usenol); 563 564 /** 565 * tgt_dfs_send_subchan_marking() - Send subchannel marking pdev param to FW. 566 * @pdev: Pointer to pdev object. 567 * @subchanmark: Value of subchannel_marking. 568 * 569 * Return: QDF_STATUS 570 */ 571 QDF_STATUS tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, 572 bool subchanmark); 573 #else 574 static inline 575 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 576 bool usenol) 577 { 578 return QDF_STATUS_SUCCESS; 579 } 580 581 static inline QDF_STATUS 582 tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, bool subchanmark) 583 { 584 return QDF_STATUS_SUCCESS; 585 } 586 #endif 587 #ifdef QCA_SUPPORT_AGILE_DFS 588 /** 589 * tgt_dfs_set_fw_adfs_support() - Set FW aDFS support in dfs object. 590 * @pdev: Pointer to pdev object. 591 * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz. 592 * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz. 593 * 594 * Return: void. 595 */ 596 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 597 bool fw_adfs_support_160, 598 bool fw_adfs_support_non_160); 599 #else 600 static inline 601 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 602 bool fw_adfs_support_160, 603 bool fw_adfs_support_non_160) 604 { 605 } 606 #endif 607 608 /** 609 * tgt_dfs_init_tmp_psoc_nol() - Init temporary psoc NOL structure. 610 * @pdev: Pointer to pdev object. 611 * @num_radios: Number of radios in the psoc. 612 * 613 * Return: void. 614 */ 615 void tgt_dfs_init_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev, 616 uint8_t num_radios); 617 618 /** 619 * tgt_dfs_deinit_tmp_psoc_nol() - De-init temporary psoc NOL structure. 620 * @pdev: Pointer to pdev object. 621 * 622 * Return: void. 623 */ 624 void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev); 625 626 /** 627 * tgt_dfs_save_dfs_nol_in_psoc() - Save NOL data of given pdev. 628 * @pdev: Pointer to pdev object. 629 * @pdev_id: The pdev ID which will have the NOL data. 630 * @low_5ghz_freq: The low 5GHz frequency value of the target pdev id. 631 * @high_5ghz_freq: The high 5GHz frequency value of the target pdev id. 632 * 633 * Based on the frequency of the NOL channel, copy it to the target pdev_id 634 * structure in psoc. 635 * 636 * Return: void. 637 */ 638 void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev, 639 uint8_t pdev_id, 640 uint16_t low_5ghz_freq, 641 uint16_t high_5ghz_freq); 642 643 /** 644 * tgt_dfs_reinit_nol_from_psoc_copy() - Reinit saved NOL data to corresponding 645 * pdevs. 646 * @pdev: Pointer to pdev object. 647 * @pdev_id: pdev_id of the given pdev. 648 * 649 * Return: void. 650 */ 651 void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev, 652 uint8_t pdev_id); 653 654 /** 655 * tgt_dfs_reinit_precac_lists() - Reinit preCAC lists. 656 * @src_pdev: Source pdev object from which the preCAC list is copied. 657 * @dest_pdev: Destination pdev object to which the preCAC list is copied. 658 * @low_5g_freq: Low 5G frequency value of the destination DFS. 659 * @high_5g_freq: High 5G frequency value of the destination DFS. 660 * 661 * Copy all the preCAC list entries from the source pdev object to the 662 * destination pdev object which fall within the frequency range of 663 * low_5g_freq and high_5g_freq. 664 * 665 * Return: None (void). 666 */ 667 void tgt_dfs_reinit_precac_lists(struct wlan_objmgr_pdev *src_pdev, 668 struct wlan_objmgr_pdev *dest_pdev, 669 uint16_t low_5g_freq, 670 uint16_t high_5g_freq); 671 672 /** 673 * tgt_dfs_complete_deferred_tasks() - Process HW mode switch completion and 674 * handle deferred tasks. 675 * @pdev: Pointer to primary pdev object. 676 * 677 * Return: void. 678 */ 679 void tgt_dfs_complete_deferred_tasks(struct wlan_objmgr_pdev *pdev); 680 #endif /* _WLAN_DFS_TGT_API_H_ */ 681