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