xref: /wlan-driver/qca-wifi-host-cmn/umac/dfs/core/src/dfs_structs.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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