xref: /freebsd/sys/contrib/dev/athk/spectral_common.h (revision ebacd8013fe5f7fdf9f6a5b286f6680dd2891036)
1*ebacd801SBjoern A. Zeeb /*
2*ebacd801SBjoern A. Zeeb  * Copyright (c) 2013 Qualcomm Atheros, Inc.
3*ebacd801SBjoern A. Zeeb  *
4*ebacd801SBjoern A. Zeeb  * Permission to use, copy, modify, and/or distribute this software for any
5*ebacd801SBjoern A. Zeeb  * purpose with or without fee is hereby granted, provided that the above
6*ebacd801SBjoern A. Zeeb  * copyright notice and this permission notice appear in all copies.
7*ebacd801SBjoern A. Zeeb  *
8*ebacd801SBjoern A. Zeeb  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*ebacd801SBjoern A. Zeeb  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*ebacd801SBjoern A. Zeeb  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*ebacd801SBjoern A. Zeeb  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*ebacd801SBjoern A. Zeeb  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*ebacd801SBjoern A. Zeeb  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*ebacd801SBjoern A. Zeeb  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*ebacd801SBjoern A. Zeeb  */
16*ebacd801SBjoern A. Zeeb 
17*ebacd801SBjoern A. Zeeb #ifndef SPECTRAL_COMMON_H
18*ebacd801SBjoern A. Zeeb #define SPECTRAL_COMMON_H
19*ebacd801SBjoern A. Zeeb 
20*ebacd801SBjoern A. Zeeb #define SPECTRAL_HT20_NUM_BINS		56
21*ebacd801SBjoern A. Zeeb #define SPECTRAL_HT20_40_NUM_BINS		128
22*ebacd801SBjoern A. Zeeb 
23*ebacd801SBjoern A. Zeeb /* TODO: could possibly be 512, but no samples this large
24*ebacd801SBjoern A. Zeeb  * could be acquired so far.
25*ebacd801SBjoern A. Zeeb  */
26*ebacd801SBjoern A. Zeeb #define SPECTRAL_ATH10K_MAX_NUM_BINS		256
27*ebacd801SBjoern A. Zeeb 
28*ebacd801SBjoern A. Zeeb /* FFT sample format given to userspace via debugfs.
29*ebacd801SBjoern A. Zeeb  *
30*ebacd801SBjoern A. Zeeb  * Please keep the type/length at the front position and change
31*ebacd801SBjoern A. Zeeb  * other fields after adding another sample type
32*ebacd801SBjoern A. Zeeb  *
33*ebacd801SBjoern A. Zeeb  * TODO: this might need rework when switching to nl80211-based
34*ebacd801SBjoern A. Zeeb  * interface.
35*ebacd801SBjoern A. Zeeb  */
36*ebacd801SBjoern A. Zeeb enum ath_fft_sample_type {
37*ebacd801SBjoern A. Zeeb 	ATH_FFT_SAMPLE_HT20 = 1,
38*ebacd801SBjoern A. Zeeb 	ATH_FFT_SAMPLE_HT20_40,
39*ebacd801SBjoern A. Zeeb 	ATH_FFT_SAMPLE_ATH10K,
40*ebacd801SBjoern A. Zeeb 	ATH_FFT_SAMPLE_ATH11K
41*ebacd801SBjoern A. Zeeb };
42*ebacd801SBjoern A. Zeeb 
43*ebacd801SBjoern A. Zeeb struct fft_sample_tlv {
44*ebacd801SBjoern A. Zeeb 	u8 type;	/* see ath_fft_sample */
45*ebacd801SBjoern A. Zeeb 	__be16 length;
46*ebacd801SBjoern A. Zeeb 	/* type dependent data follows */
47*ebacd801SBjoern A. Zeeb } __packed;
48*ebacd801SBjoern A. Zeeb 
49*ebacd801SBjoern A. Zeeb struct fft_sample_ht20 {
50*ebacd801SBjoern A. Zeeb 	struct fft_sample_tlv tlv;
51*ebacd801SBjoern A. Zeeb 
52*ebacd801SBjoern A. Zeeb 	u8 max_exp;
53*ebacd801SBjoern A. Zeeb 
54*ebacd801SBjoern A. Zeeb 	__be16 freq;
55*ebacd801SBjoern A. Zeeb 	s8 rssi;
56*ebacd801SBjoern A. Zeeb 	s8 noise;
57*ebacd801SBjoern A. Zeeb 
58*ebacd801SBjoern A. Zeeb 	__be16 max_magnitude;
59*ebacd801SBjoern A. Zeeb 	u8 max_index;
60*ebacd801SBjoern A. Zeeb 	u8 bitmap_weight;
61*ebacd801SBjoern A. Zeeb 
62*ebacd801SBjoern A. Zeeb 	__be64 tsf;
63*ebacd801SBjoern A. Zeeb 
64*ebacd801SBjoern A. Zeeb 	u8 data[SPECTRAL_HT20_NUM_BINS];
65*ebacd801SBjoern A. Zeeb } __packed;
66*ebacd801SBjoern A. Zeeb 
67*ebacd801SBjoern A. Zeeb struct fft_sample_ht20_40 {
68*ebacd801SBjoern A. Zeeb 	struct fft_sample_tlv tlv;
69*ebacd801SBjoern A. Zeeb 
70*ebacd801SBjoern A. Zeeb 	u8 channel_type;
71*ebacd801SBjoern A. Zeeb 	__be16 freq;
72*ebacd801SBjoern A. Zeeb 
73*ebacd801SBjoern A. Zeeb 	s8 lower_rssi;
74*ebacd801SBjoern A. Zeeb 	s8 upper_rssi;
75*ebacd801SBjoern A. Zeeb 
76*ebacd801SBjoern A. Zeeb 	__be64 tsf;
77*ebacd801SBjoern A. Zeeb 
78*ebacd801SBjoern A. Zeeb 	s8 lower_noise;
79*ebacd801SBjoern A. Zeeb 	s8 upper_noise;
80*ebacd801SBjoern A. Zeeb 
81*ebacd801SBjoern A. Zeeb 	__be16 lower_max_magnitude;
82*ebacd801SBjoern A. Zeeb 	__be16 upper_max_magnitude;
83*ebacd801SBjoern A. Zeeb 
84*ebacd801SBjoern A. Zeeb 	u8 lower_max_index;
85*ebacd801SBjoern A. Zeeb 	u8 upper_max_index;
86*ebacd801SBjoern A. Zeeb 
87*ebacd801SBjoern A. Zeeb 	u8 lower_bitmap_weight;
88*ebacd801SBjoern A. Zeeb 	u8 upper_bitmap_weight;
89*ebacd801SBjoern A. Zeeb 
90*ebacd801SBjoern A. Zeeb 	u8 max_exp;
91*ebacd801SBjoern A. Zeeb 
92*ebacd801SBjoern A. Zeeb 	u8 data[SPECTRAL_HT20_40_NUM_BINS];
93*ebacd801SBjoern A. Zeeb } __packed;
94*ebacd801SBjoern A. Zeeb 
95*ebacd801SBjoern A. Zeeb struct fft_sample_ath10k {
96*ebacd801SBjoern A. Zeeb 	struct fft_sample_tlv tlv;
97*ebacd801SBjoern A. Zeeb 	u8 chan_width_mhz;
98*ebacd801SBjoern A. Zeeb 	__be16 freq1;
99*ebacd801SBjoern A. Zeeb 	__be16 freq2;
100*ebacd801SBjoern A. Zeeb 	__be16 noise;
101*ebacd801SBjoern A. Zeeb 	__be16 max_magnitude;
102*ebacd801SBjoern A. Zeeb 	__be16 total_gain_db;
103*ebacd801SBjoern A. Zeeb 	__be16 base_pwr_db;
104*ebacd801SBjoern A. Zeeb 	__be64 tsf;
105*ebacd801SBjoern A. Zeeb 	s8 max_index;
106*ebacd801SBjoern A. Zeeb 	u8 rssi;
107*ebacd801SBjoern A. Zeeb 	u8 relpwr_db;
108*ebacd801SBjoern A. Zeeb 	u8 avgpwr_db;
109*ebacd801SBjoern A. Zeeb 	u8 max_exp;
110*ebacd801SBjoern A. Zeeb 
111*ebacd801SBjoern A. Zeeb 	u8 data[0];
112*ebacd801SBjoern A. Zeeb } __packed;
113*ebacd801SBjoern A. Zeeb 
114*ebacd801SBjoern A. Zeeb struct fft_sample_ath11k {
115*ebacd801SBjoern A. Zeeb 	struct fft_sample_tlv tlv;
116*ebacd801SBjoern A. Zeeb 	u8 chan_width_mhz;
117*ebacd801SBjoern A. Zeeb 	s8 max_index;
118*ebacd801SBjoern A. Zeeb 	u8 max_exp;
119*ebacd801SBjoern A. Zeeb 	__be16 freq1;
120*ebacd801SBjoern A. Zeeb 	__be16 freq2;
121*ebacd801SBjoern A. Zeeb 	__be16 max_magnitude;
122*ebacd801SBjoern A. Zeeb 	__be16 rssi;
123*ebacd801SBjoern A. Zeeb 	__be32 tsf;
124*ebacd801SBjoern A. Zeeb 	__be32 noise;
125*ebacd801SBjoern A. Zeeb 
126*ebacd801SBjoern A. Zeeb 	u8 data[0];
127*ebacd801SBjoern A. Zeeb } __packed;
128*ebacd801SBjoern A. Zeeb 
129*ebacd801SBjoern A. Zeeb #endif /* SPECTRAL_COMMON_H */
130