1 /* 2 * Copyright (c) 2011-2012, 2016-2018 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: This file has dfs capability, dfs pulse structures. 20 */ 21 22 #ifndef _DFS_STRUCTS_H_ 23 #define _DFS_STRUCTS_H_ 24 25 /* 26 * This represents the general case of the radar PHY configuration, 27 * across all chips. 28 * 29 * It's then up to each chip layer to translate to/from this 30 * (eg to HAL_PHYERR_PARAM for the HAL case.) 31 */ 32 33 #define WLAN_DFS_PHYERR_PARAM_NOVAL 0xFFFF 34 #define WLAN_DFS_PHYERR_PARAM_ENABLE 0x8000 35 36 /* 37 * For the dfs_nol_clist_update() method - this is the 38 * update command. 39 */ 40 enum { 41 DFS_NOL_CLIST_CMD_NONE = 0x0, 42 DFS_NOL_CLIST_CMD_UPDATE = 0x1, 43 }; 44 45 /** 46 * struct dfs_pulse - DFS pulses. 47 * @rp_numpulses: Num of pulses in radar burst. 48 * @rp_pulsedur: Duration of each pulse in usecs. 49 * @rp_pulsefreq: Frequency of pulses in burst. 50 * @rp_max_pulsefreq: Frequency of pulses in burst. 51 * @rp_patterntype: fixed or variable pattern type. 52 * @rp_pulsevar: Time variation of pulse duration for matched 53 * filter (single-sided) in usecs. 54 * @rp_threshold: Threshold for MF output to indicate radar match. 55 * @rp_mindur: Min pulse duration to be considered for this pulse 56 * type. 57 * @rp_maxdur: Min pulse duration to be considered for this pulse 58 * type. 59 * @rp_rssithresh: Minimum rssi to be considered a radar pulse. 60 * @rp_meanoffset: Offset for timing adjustment. 61 * @rp_rssimargin: rssi threshold margin. In Turbo Mode HW reports 62 * rssi 3dBm. lower than in non TURBO mode. This 63 * will be used to offset that diff. 64 * @rp_ignore_pri_window: Ignore PRI window. 65 * @rp_sidx_spread: To reduce false detection use sidx spread. For HT160, 66 * for consistency, push all pulses at center of the 67 * channel to 80MHz ext when both segments are DFS. 68 * Maximum SIDX value spread in a matched sequence 69 * excluding FCC Bin 5. 70 * @rp_check_delta_peak: This is mainly used for ETSI Type 4 5MHz chirp pulses 71 * which HW cnanot identify. 72 * Reliably as chirping but can correctly characterize 73 * these with delta_peak non-zero. 74 * Is delta_peak check required for this filter. 75 * @rp_pulseid: Unique ID for identifying filter. 76 */ 77 struct dfs_pulse { 78 uint32_t rp_numpulses; 79 uint32_t rp_pulsedur; 80 uint32_t rp_pulsefreq; 81 uint32_t rp_max_pulsefreq; 82 uint32_t rp_patterntype; 83 uint32_t rp_pulsevar; 84 uint32_t rp_threshold; 85 uint32_t rp_mindur; 86 uint32_t rp_maxdur; 87 uint32_t rp_rssithresh; 88 uint32_t rp_meanoffset; 89 int32_t rp_rssimargin; 90 uint32_t rp_ignore_pri_window; 91 uint16_t rp_sidx_spread; 92 int8_t rp_check_delta_peak; 93 uint16_t rp_pulseid; 94 }; 95 96 /** 97 * struct dfs_bin5pulse - DFS bin5 pulse. 98 * @b5_threshold: Number of bin5 pulses to indicate detection. 99 * @b5_mindur: Min duration for a bin5 pulse. 100 * @b5_maxdur: Max duration for a bin5 pulse. 101 * @b5_timewindow: Window over which to count bin5 pulses. 102 * @b5_rssithresh: Min rssi to be considered a pulse. 103 * @b5_rssimargin: rssi threshold margin. In Turbo Mode HW reports rssi 3dB 104 */ 105 struct dfs_bin5pulse { 106 uint32_t b5_threshold; 107 uint32_t b5_mindur; 108 uint32_t b5_maxdur; 109 uint32_t b5_timewindow; 110 uint32_t b5_rssithresh; 111 uint32_t b5_rssimargin; 112 }; 113 114 /** 115 * wlan_dfs_phyerr_init_noval() - Fill wlan_dfs_phyerr_param with 0xFF. 116 * @pe: Pointer to wlan_dfs_phyerr_param structure. 117 */ 118 static inline void wlan_dfs_phyerr_init_noval(struct wlan_dfs_phyerr_param *pe) 119 { 120 pe->pe_firpwr = WLAN_DFS_PHYERR_PARAM_NOVAL; 121 pe->pe_rrssi = WLAN_DFS_PHYERR_PARAM_NOVAL; 122 pe->pe_height = WLAN_DFS_PHYERR_PARAM_NOVAL; 123 pe->pe_prssi = WLAN_DFS_PHYERR_PARAM_NOVAL; 124 pe->pe_inband = WLAN_DFS_PHYERR_PARAM_NOVAL; 125 pe->pe_relpwr = WLAN_DFS_PHYERR_PARAM_NOVAL; 126 pe->pe_relstep = WLAN_DFS_PHYERR_PARAM_NOVAL; 127 pe->pe_maxlen = WLAN_DFS_PHYERR_PARAM_NOVAL; 128 } 129 130 /** 131 * struct wlan_dfs_radar_tab_info - Radar table information. 132 * @dfsdomain: DFS domain. 133 * @numradars: Number of radars. 134 * @dfs_radars: Pointer to dfs_pulse structure. 135 * @numb5radars: NUM5 radars. 136 * @b5pulses: BIN5 radars. 137 * @dfs_defaultparams: phyerr params. 138 */ 139 struct wlan_dfs_radar_tab_info { 140 uint32_t dfsdomain; 141 int numradars; 142 struct dfs_pulse *dfs_radars; 143 int numb5radars; 144 struct dfs_bin5pulse *b5pulses; 145 struct wlan_dfs_phyerr_param dfs_defaultparams; 146 }; 147 148 #endif /* _DFS_STRUCTS_H_ */ 149