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