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