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