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