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 * 4). Detector ID. 51 * 52 * The packed argument structure is: 53 * 54 * ------------------------------32 bits arg---------------------------- 55 * 56 * ------------19 bits-------|--2 bits-|-------8 bits------|1 bit|2 bits| 57 * ______________________________________________________________________ 58 *| | | | | | | | | | | | | | | | | | 59 *|------19 Unused bits------| x | | x |x|x|x| |x|x|x|x| |x| x | x | x | 60 *|__________________________|___|_|___|_|_|_|_|_|_|_|_|_|_|_____|___|___| 61 * 62 * |_________|___________________|_____|_______| 63 * det.ID freq.offset Chirp seg.ID 64 * 65 * @DFS_UNIT_TEST_NUM_ARGS: Number of arguments for bangradar unit test 66 * command. 67 * @DFS_MAX_NUM_UNIT_TEST_ARGS: Maximum number of arguments for unit test 68 * command in radar simulation. 69 */ 70 enum { 71 IDX_CMD_ID = 0, 72 IDX_PDEV_ID, 73 IDX_RADAR_PARAM1_ID, 74 DFS_UNIT_TEST_NUM_ARGS, 75 DFS_MAX_NUM_UNIT_TEST_ARGS = DFS_UNIT_TEST_NUM_ARGS 76 }; 77 78 #define SEG_ID_SHIFT 0 79 #define IS_CHIRP_SHIFT 2 80 #define FREQ_OFF_SHIFT 3 81 #define DET_ID_SHIFT 11 82 #define SEG_ID_MASK 0x03 83 #define IS_CHIRP_MASK 0x01 84 #define FREQ_OFFSET_MASK 0xFF 85 #define DET_ID_MASK 0x03 86 87 /** 88 * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send 89 * WMI command to firmware from host 90 * and simulate bangradar event. 91 * @vdev_id: vdev id 92 * @num_args: number of arguments 93 * @args: arguments 94 */ 95 struct dfs_emulate_bang_radar_test_cmd { 96 uint32_t vdev_id; 97 uint32_t num_args; 98 uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS]; 99 }; 100 101 /** 102 * struct vdev_adfs_complete_status - OCAC complete status event param 103 * @vdev_id: Physical device identifier 104 * @chan_freq: Channel number 105 * @chan_width: Channel Width 106 * @center_freq1 : For 20/40/80/160Mhz, it is the center of the corresponding 107 * band. For 80P80/165MHz, it is the center of the left 80MHz. 108 * @center_freq2 : It is valid and non-zero only for 80P80/165MHz. It indicates 109 * the Center Frequency of the right 80MHz segment. 110 * @ocac_status: off channel cac status 111 */ 112 struct vdev_adfs_complete_status { 113 uint32_t vdev_id; 114 uint32_t chan_freq; 115 uint32_t chan_width; 116 uint32_t center_freq1; 117 uint32_t center_freq2; 118 uint32_t ocac_status; 119 }; 120 121 extern struct dfs_to_mlme global_dfs_to_mlme; 122 123 /** 124 * tgt_dfs_set_current_channel() - Fill dfs channel structure from 125 * dfs_channel structure. 126 * @pdev: Pointer to DFS pdev object. 127 * @dfs_ch_freq: Frequency in Mhz. 128 * @dfs_ch_flags: Channel flags. 129 * @dfs_ch_flagext: Extended channel flags. 130 * @dfs_ch_ieee: IEEE channel number. 131 * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1. 132 * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2. 133 */ 134 #ifdef DFS_COMPONENT_ENABLE 135 #ifdef CONFIG_CHAN_NUM_API 136 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev, 137 uint16_t dfs_ch_freq, 138 uint64_t dfs_ch_flags, 139 uint16_t dfs_ch_flagext, 140 uint8_t dfs_ch_ieee, 141 uint8_t dfs_ch_vhtop_ch_freq_seg1, 142 uint8_t dfs_ch_vhtop_ch_freq_seg2); 143 #endif 144 145 /** 146 * tgt_dfs_set_current_channel_for_freq() - Fill dfs channel structure from 147 * dfs_channel structure. 148 * @pdev: Pointer to DFS pdev object. 149 * @dfs_ch_freq: Frequency in Mhz. 150 * @dfs_ch_flags: Channel flags. 151 * @dfs_ch_flagext: Extended channel flags. 152 * @dfs_ch_ieee: IEEE channel number. 153 * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1. 154 * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2. 155 * @dfs_ch_mhz_freq_seg1: Channel center frequency of primary segment in MHZ. 156 * @dfs_ch_mhz_freq_seg2: Channel center frequency of secondary segment in MHZ 157 * applicable only for 80+80MHZ mode of operation. 158 * @is_channel_updated: Boolean to represent channel update. 159 */ 160 #ifdef CONFIG_CHAN_FREQ_API 161 QDF_STATUS 162 tgt_dfs_set_current_channel_for_freq(struct wlan_objmgr_pdev *pdev, 163 uint16_t dfs_ch_freq, 164 uint64_t dfs_ch_flags, 165 uint16_t dfs_ch_flagext, 166 uint8_t dfs_ch_ieee, 167 uint8_t dfs_ch_vhtop_ch_freq_seg1, 168 uint8_t dfs_ch_vhtop_ch_freq_seg2, 169 uint16_t dfs_ch_mhz_freq_seg1, 170 uint16_t dfs_ch_mhz_freq_seg2, 171 bool *is_channel_updated); 172 #endif 173 174 /** 175 * tgt_dfs_radar_enable() - Enables the radar. 176 * @pdev: Pointer to DFS pdev object. 177 * @no_cac: If no_cac is 0, it cancels the CAC. 178 * @enable: disable/enable radar 179 * 180 * This is called each time a channel change occurs, to (potentially) enable 181 * the radar code. 182 */ 183 QDF_STATUS tgt_dfs_radar_enable( 184 struct wlan_objmgr_pdev *pdev, 185 int no_cac, uint32_t opmode, bool enable); 186 187 /** 188 * tgt_dfs_control()- Used to process ioctls related to DFS. 189 * @pdev: Pointer to DFS pdev object. 190 * @id: Command type. 191 * @indata: Input buffer. 192 * @insize: size of the input buffer. 193 * @outdata: A buffer for the results. 194 * @outsize: Size of the output buffer. 195 */ 196 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 197 u_int id, 198 void *indata, 199 uint32_t insize, 200 void *outdata, 201 uint32_t *outsize, 202 int *error); 203 204 /** 205 * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions 206 * @pdev: Pointer to DFS pdev object. 207 * 208 * Wrapper function for dfs_get_radars(). This function called from 209 * outside of DFS component. 210 */ 211 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev); 212 213 /** 214 * tgt_dfs_process_radar_ind() - Process radar found indication. 215 * @pdev: Pointer to DFS pdev object. 216 * @radar_found: radar found info. 217 * 218 * Process radar found indication. 219 * 220 * Return QDF_STATUS. 221 */ 222 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev, 223 struct radar_found_info *radar_found); 224 #else 225 static inline QDF_STATUS tgt_dfs_set_current_channel( 226 struct wlan_objmgr_pdev *pdev, 227 uint16_t dfs_ch_freq, 228 uint64_t dfs_ch_flags, 229 uint16_t dfs_ch_flagext, 230 uint8_t dfs_ch_ieee, 231 uint8_t dfs_ch_vhtop_ch_freq_seg1, 232 uint8_t dfs_ch_vhtop_ch_freq_seg2) 233 { 234 return QDF_STATUS_SUCCESS; 235 } 236 237 static inline QDF_STATUS tgt_dfs_radar_enable( 238 struct wlan_objmgr_pdev *pdev, 239 int no_cac, uint32_t opmode, bool enable) 240 { 241 return QDF_STATUS_SUCCESS; 242 } 243 244 static inline QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 245 u_int id, 246 void *indata, 247 uint32_t insize, 248 void *outdata, 249 uint32_t *outsize, 250 int *error) 251 { 252 return QDF_STATUS_SUCCESS; 253 } 254 255 static inline QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev) 256 { 257 return QDF_STATUS_SUCCESS; 258 } 259 260 static inline QDF_STATUS tgt_dfs_process_radar_ind( 261 struct wlan_objmgr_pdev *pdev, 262 struct radar_found_info *radar_found) 263 { 264 return QDF_STATUS_SUCCESS; 265 } 266 #endif 267 268 /** 269 * tgt_dfs_process_phyerr() - Process phyerr. 270 * @pdev: Pointer to DFS pdev object. 271 * @buf: Phyerr buffer. 272 * @datalen: phyerr buffer length. 273 * @r_rssi: RSSI. 274 * @r_ext_rssi: Extension channel RSSI. 275 * @r_rs_tstamp: Timestamp. 276 * @r_fulltsf: TSF64. 277 * 278 * Wrapper function for dfs_process_phyerr(). This function called from 279 * outside of DFS component. 280 */ 281 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev, 282 void *buf, 283 uint16_t datalen, 284 uint8_t r_rssi, 285 uint8_t r_ext_rssi, 286 uint32_t r_rs_tstamp, 287 uint64_t r_fulltsf); 288 289 /** 290 * tgt_dfs_process_phyerr_filter_offload() - Process radar event. 291 * Wrapper function for dfs_process_phyerr_filter_offload(). This function 292 * called from outside of DFS component. 293 * @pdev: Pointer to DFS pdev object. 294 * @wlan_radar_event: pointer to radar_event_info. 295 * 296 * Return: QDF_STATUS 297 */ 298 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev, 299 struct radar_event_info *wlan_radar_event); 300 301 /** 302 * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload. 303 * @psoc: Pointer to psoc object. 304 * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload. 305 * 306 * Return: QDF_STATUS 307 */ 308 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc, 309 bool *is_phyerr_filter_offload); 310 311 /** 312 * tgt_dfs_destroy_object() - Destroys the DFS object. 313 * @pdev: Pointer to DFS pdev object. 314 * 315 * Wrapper function for dfs_destroy_object(). This function called from 316 * outside of DFS component. 317 */ 318 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev); 319 320 #ifdef QCA_MCL_DFS_SUPPORT 321 /** 322 * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold. 323 * @pdev: Pointer to DFS pdev object. 324 * 325 * Return QDF_STATUS. 326 */ 327 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev); 328 #else 329 static inline QDF_STATUS tgt_dfs_set_tx_leakage_threshold 330 (struct wlan_objmgr_pdev *pdev) 331 { 332 return QDF_STATUS_SUCCESS; 333 } 334 #endif 335 336 /** 337 * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running. 338 * @pdev: Pointer to DFS pdev object. 339 * @is_precac_timer_running: Pointer to save precac timer value. 340 * 341 * Wrapper function for dfs_is_precac_timer_running(). This function called from 342 * outside of DFS component. 343 */ 344 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev, 345 bool *is_precac_timer_running); 346 347 /** 348 * tgt_dfs_set_agile_precac_state() - set state for Agile Precac. 349 * 350 * @pdev: Pointer to DFS pdev object. 351 * @agile_precac_state: Agile Precac state 352 * 353 * wrapper function for dfs_set_agile_precac_state. 354 * This function called from outside of dfs component. 355 */ 356 QDF_STATUS tgt_dfs_set_agile_precac_state(struct wlan_objmgr_pdev *pdev, 357 int agile_precac_state); 358 359 /** 360 * tgt_dfs_agile_precac_start() - Start agile precac 361 * 362 * @pdev: Pointer to DFS pdev object. 363 * 364 * wrapper function for dfs_set_agile_precac_state. 365 * This function called from outside of dfs component. 366 */ 367 QDF_STATUS tgt_dfs_agile_precac_start(struct wlan_objmgr_pdev *pdev); 368 369 /** 370 * tgt_dfs_ocac_complete() - Process off channel cac complete indication. 371 * @pdev: Pointer to DFS pdev object. 372 * @vdev_adfs_complete_status: Off channel CAC complete status. 373 * 374 * wrapper function for dfs_set_agile_precac_state. 375 * This function called from outside of dfs component. 376 */ 377 QDF_STATUS tgt_dfs_ocac_complete(struct wlan_objmgr_pdev *pdev, 378 struct vdev_adfs_complete_status *ocac_status); 379 380 /** 381 * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac. 382 * @pdev: Pointer to DFS pdev object. 383 * @chan_mode: Channel mode. 384 * @ch_freq_seg1: Segment1 channel freq. 385 * @cfreq1: cfreq1. 386 * @cfreq2: cfreq2. 387 * @phy_mode: Precac phymode. 388 * @dfs_set_cfreq2: Precac cfreq2 389 * @set_agile: Agile mode flag. 390 * 391 * wrapper function for dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer(). 392 * This function called from outside of dfs component. 393 */ 394 #ifdef CONFIG_CHAN_NUM_API 395 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev, 396 uint32_t chan_mode, 397 uint8_t ch_freq_seg1, 398 uint32_t *cfreq1, 399 uint32_t *cfreq2, 400 uint32_t *phy_mode, 401 bool *dfs_set_cfreq2, 402 bool *set_agile); 403 #endif 404 405 /** 406 * tgt_dfs_find_vht80_precac_chan_freq() - Find VHT80 channel for precac 407 * @pdev: Pointer to DFS pdev object. 408 * @chan_mode: Channel mode. 409 * @ch_freq_seg1_mhz: Segment1 channel freq in MHZ. 410 * @cfreq1: cfreq1. 411 * @cfreq2: cfreq2. 412 * @phy_mode: Precac phymode. 413 * @dfs_set_cfreq2: Precac cfreq2 414 * @set_agile: Agile mode flag. 415 * 416 * wrapper function for dfs_find_vht80_chan_for_precac_for_freq(). 417 */ 418 #ifdef CONFIG_CHAN_FREQ_API 419 QDF_STATUS 420 tgt_dfs_find_vht80_precac_chan_freq(struct wlan_objmgr_pdev *pdev, 421 uint32_t chan_mode, 422 uint16_t ch_freq_mhz_seg1, 423 uint32_t *cfreq1, 424 uint32_t *cfreq2, 425 uint32_t *phy_mode, 426 bool *dfs_set_cfreq2, 427 bool *set_agile); 428 #endif 429 430 /** 431 * tgt_dfs_cac_complete() - Process cac complete indication. 432 * @pdev: Pointer to DFS pdev object. 433 * @vdev_id: vdev id. 434 * 435 * Process cac complete indication from firmware. 436 * 437 * Return QDF_STATUS. 438 */ 439 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev, 440 uint32_t vdev_id); 441 442 /** 443 * tgt_dfs_reg_ev_handler() - Register dfs events. 444 * @psoc: Pointer to psoc. 445 * 446 * Register dfs events. 447 * 448 * Return: QDF_STATUS. 449 */ 450 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc); 451 452 /** 453 * tgt_dfs_stop() - Clear dfs timers. 454 * @dfs: Pointer to wlan_dfs structure. 455 */ 456 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev); 457 458 /** 459 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar 460 * command. 461 * @pdev: Pointer to DFS pdev object. 462 * 463 * Process to emulate dfs bangradar command. 464 * 465 * Return: QDF_STATUS. 466 */ 467 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev, 468 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 469 470 #ifdef QCA_MCL_DFS_SUPPORT 471 /** 472 * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload 473 * @pdev: Pointer to DFS pdev object. 474 * 475 * Return: QDF_STATUS 476 */ 477 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev); 478 #else 479 static inline QDF_STATUS tgt_dfs_set_phyerr_filter_offload 480 (struct wlan_objmgr_pdev *pdev) 481 { 482 return QDF_STATUS_SUCCESS; 483 } 484 #endif 485 486 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 487 /** 488 * tgt_dfs_send_avg_params_to_fw() - send average radar parameters to fw. 489 * @pdev: Pointer to DFS pdev object. 490 * @params: Pointer to dfs radar average parameters. 491 * 492 * Return: QDF_STATUS 493 */ 494 QDF_STATUS 495 tgt_dfs_send_avg_params_to_fw(struct wlan_objmgr_pdev *pdev, 496 struct dfs_radar_found_params *params); 497 #endif 498 499 /** 500 * tgt_dfs_action_on_status_from_fw() - trigger the action to be taken based on 501 * host dfs status received from fw. 502 * @pdev: Pointer to pdev object. 503 * @status: Pointer to the host dfs status received from fw. 504 * 505 * Return: QDF_STATUS 506 */ 507 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 508 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 509 uint32_t *status); 510 #else 511 static inline 512 QDF_STATUS tgt_dfs_action_on_status_from_fw(struct wlan_objmgr_pdev *pdev, 513 uint32_t *status) 514 { 515 return QDF_STATUS_SUCCESS; 516 } 517 #endif 518 519 /** 520 * tgt_dfs_is_radar_enabled() - checks if radar detection is enabled. 521 * @pdev: Pointer to pdev object. 522 * @ignore_dfs: Pointer to check the value. If 1, radar detection is disabled. 523 */ 524 void tgt_dfs_is_radar_enabled(struct wlan_objmgr_pdev *pdev, int *ignore_dfs); 525 526 /** 527 * tgt_dfs_reset_spoof_test() - reset the dfs spoof check variables 528 * @pdev: Pointer to pdev object. 529 * 530 * Return: QDF_STATUS 531 */ 532 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 533 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev); 534 #else 535 static inline 536 QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev) 537 { 538 return QDF_STATUS_SUCCESS; 539 } 540 #endif 541 542 /** 543 * tgt_dfs_enable_stadfs() - Enable/Disable STADFS capability. 544 * @pdev: Pointer to DFS pdev object. 545 * @val: input value. 546 */ 547 void tgt_dfs_enable_stadfs(struct wlan_objmgr_pdev *pdev, bool val); 548 549 /** 550 * tgt_dfs_is_stadfs_enabled() - Get STADFS capability 551 * @pdev: Pointer to DFS pdev object. 552 * 553 * Return: true if STADFS is enabled, else false. 554 */ 555 bool tgt_dfs_is_stadfs_enabled(struct wlan_objmgr_pdev *pdev); 556 557 /** 558 * tgt_dfs_is_pdev_5ghz() - Check if the input pdev is 5GHZ. 559 * @pdev: Pointer to DFS pdev object. 560 * 561 * Return: true if the pdev supports 5GHz, else false. 562 */ 563 bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev); 564 565 #if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD) 566 /** 567 * tgt_dfs_send_usenol_pdev_param() - Send usenol pdev param to FW. 568 * @pdev: Pointer to pdev object. 569 * @usenol: Value of usenol 570 * 571 * Return: QDF_STATUS 572 */ 573 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 574 bool usenol); 575 576 /** 577 * tgt_dfs_send_subchan_marking() - Send subchannel marking pdev param to FW. 578 * @pdev: Pointer to pdev object. 579 * @subchanmark: Value of subchannel_marking. 580 * 581 * Return: QDF_STATUS 582 */ 583 QDF_STATUS tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, 584 bool subchanmark); 585 #else 586 static inline 587 QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev, 588 bool usenol) 589 { 590 return QDF_STATUS_SUCCESS; 591 } 592 593 static inline QDF_STATUS 594 tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, bool subchanmark) 595 { 596 return QDF_STATUS_SUCCESS; 597 } 598 #endif 599 #ifdef QCA_SUPPORT_AGILE_DFS 600 /** 601 * tgt_dfs_set_fw_adfs_support() - Set FW aDFS support in dfs object. 602 * @pdev: Pointer to pdev object. 603 * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz. 604 * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz. 605 * 606 * Return: void. 607 */ 608 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 609 bool fw_adfs_support_160, 610 bool fw_adfs_support_non_160); 611 #else 612 static inline 613 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev, 614 bool fw_adfs_support_160, 615 bool fw_adfs_support_non_160) 616 { 617 } 618 #endif 619 620 /** 621 * tgt_dfs_init_tmp_psoc_nol() - Init temporary psoc NOL structure. 622 * @pdev: Pointer to pdev object. 623 * @num_radios: Number of radios in the psoc. 624 * 625 * Return: void. 626 */ 627 void tgt_dfs_init_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev, 628 uint8_t num_radios); 629 630 /** 631 * tgt_dfs_deinit_tmp_psoc_nol() - De-init temporary psoc NOL structure. 632 * @pdev: Pointer to pdev object. 633 * 634 * Return: void. 635 */ 636 void tgt_dfs_deinit_tmp_psoc_nol(struct wlan_objmgr_pdev *pdev); 637 638 /** 639 * tgt_dfs_save_dfs_nol_in_psoc() - Save NOL data of given pdev. 640 * @pdev: Pointer to pdev object. 641 * @pdev_id: The pdev ID which will have the NOL data. 642 * 643 * Based on the frequency of the NOL channel, copy it to the target pdev_id 644 * structure in psoc. 645 * 646 * Return: void. 647 */ 648 void tgt_dfs_save_dfs_nol_in_psoc(struct wlan_objmgr_pdev *pdev, 649 uint8_t pdev_id); 650 651 /** 652 * tgt_dfs_reinit_nol_from_psoc_copy() - Reinit saved NOL data to corresponding 653 * pdevs. 654 * @pdev: Pointer to pdev object. 655 * @pdev_id: pdev_id of the given pdev. 656 * @low_5ghz_freq: The low 5GHz frequency value of the target pdev id. 657 * @high_5ghz_freq: The high 5GHz frequency value of the target pdev id. 658 * 659 * Return: void. 660 */ 661 void tgt_dfs_reinit_nol_from_psoc_copy(struct wlan_objmgr_pdev *pdev, 662 uint8_t pdev_id, 663 uint16_t low_5ghz_freq, 664 uint16_t high_5ghz_freq); 665 666 /** 667 * tgt_dfs_reinit_precac_lists() - Reinit preCAC lists. 668 * @src_pdev: Source pdev object from which the preCAC list is copied. 669 * @dest_pdev: Destination pdev object to which the preCAC list is copied. 670 * @low_5g_freq: Low 5G frequency value of the destination DFS. 671 * @high_5g_freq: High 5G frequency value of the destination DFS. 672 * 673 * Copy all the preCAC list entries from the source pdev object to the 674 * destination pdev object which fall within the frequency range of 675 * low_5g_freq and high_5g_freq. 676 * 677 * Return: None (void). 678 */ 679 void tgt_dfs_reinit_precac_lists(struct wlan_objmgr_pdev *src_pdev, 680 struct wlan_objmgr_pdev *dest_pdev, 681 uint16_t low_5g_freq, 682 uint16_t high_5g_freq); 683 684 /** 685 * tgt_dfs_complete_deferred_tasks() - Process HW mode switch completion and 686 * handle deferred tasks. 687 * @pdev: Pointer to primary pdev object. 688 * 689 * Return: void. 690 */ 691 void tgt_dfs_complete_deferred_tasks(struct wlan_objmgr_pdev *pdev); 692 #endif /* _WLAN_DFS_TGT_API_H_ */ 693