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