195752b75SSven Eckelmann /* 295752b75SSven Eckelmann * Copyright (c) 2013 Qualcomm Atheros, Inc. 395752b75SSven Eckelmann * 495752b75SSven Eckelmann * Permission to use, copy, modify, and/or distribute this software for any 595752b75SSven Eckelmann * purpose with or without fee is hereby granted, provided that the above 695752b75SSven Eckelmann * copyright notice and this permission notice appear in all copies. 795752b75SSven Eckelmann * 895752b75SSven Eckelmann * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 995752b75SSven Eckelmann * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1095752b75SSven Eckelmann * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1195752b75SSven Eckelmann * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1295752b75SSven Eckelmann * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1395752b75SSven Eckelmann * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1495752b75SSven Eckelmann * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1595752b75SSven Eckelmann */ 1695752b75SSven Eckelmann 1795752b75SSven Eckelmann #ifndef SPECTRAL_COMMON_H 1895752b75SSven Eckelmann #define SPECTRAL_COMMON_H 1995752b75SSven Eckelmann 2095752b75SSven Eckelmann #define SPECTRAL_HT20_NUM_BINS 56 2195752b75SSven Eckelmann #define SPECTRAL_HT20_40_NUM_BINS 128 2295752b75SSven Eckelmann 23855aed12SSimon Wunderlich /* TODO: could possibly be 512, but no samples this large 24855aed12SSimon Wunderlich * could be acquired so far. 25855aed12SSimon Wunderlich */ 26855aed12SSimon Wunderlich #define SPECTRAL_ATH10K_MAX_NUM_BINS 256 27855aed12SSimon Wunderlich 2895752b75SSven Eckelmann /* FFT sample format given to userspace via debugfs. 2995752b75SSven Eckelmann * 3095752b75SSven Eckelmann * Please keep the type/length at the front position and change 3195752b75SSven Eckelmann * other fields after adding another sample type 3295752b75SSven Eckelmann * 3395752b75SSven Eckelmann * TODO: this might need rework when switching to nl80211-based 3495752b75SSven Eckelmann * interface. 3595752b75SSven Eckelmann */ 3695752b75SSven Eckelmann enum ath_fft_sample_type { 3795752b75SSven Eckelmann ATH_FFT_SAMPLE_HT20 = 1, 3895752b75SSven Eckelmann ATH_FFT_SAMPLE_HT20_40, 39855aed12SSimon Wunderlich ATH_FFT_SAMPLE_ATH10K, 409d11b7bfSKarthikeyan Periyasamy ATH_FFT_SAMPLE_ATH11K 4195752b75SSven Eckelmann }; 4295752b75SSven Eckelmann 4395752b75SSven Eckelmann struct fft_sample_tlv { 4495752b75SSven Eckelmann u8 type; /* see ath_fft_sample */ 4595752b75SSven Eckelmann __be16 length; 4695752b75SSven Eckelmann /* type dependent data follows */ 4795752b75SSven Eckelmann } __packed; 4895752b75SSven Eckelmann 4995752b75SSven Eckelmann struct fft_sample_ht20 { 5095752b75SSven Eckelmann struct fft_sample_tlv tlv; 5195752b75SSven Eckelmann 5295752b75SSven Eckelmann u8 max_exp; 5395752b75SSven Eckelmann 5495752b75SSven Eckelmann __be16 freq; 5595752b75SSven Eckelmann s8 rssi; 5695752b75SSven Eckelmann s8 noise; 5795752b75SSven Eckelmann 5895752b75SSven Eckelmann __be16 max_magnitude; 5995752b75SSven Eckelmann u8 max_index; 6095752b75SSven Eckelmann u8 bitmap_weight; 6195752b75SSven Eckelmann 6295752b75SSven Eckelmann __be64 tsf; 6395752b75SSven Eckelmann 6495752b75SSven Eckelmann u8 data[SPECTRAL_HT20_NUM_BINS]; 6595752b75SSven Eckelmann } __packed; 6695752b75SSven Eckelmann 6795752b75SSven Eckelmann struct fft_sample_ht20_40 { 6895752b75SSven Eckelmann struct fft_sample_tlv tlv; 6995752b75SSven Eckelmann 7095752b75SSven Eckelmann u8 channel_type; 7195752b75SSven Eckelmann __be16 freq; 7295752b75SSven Eckelmann 7395752b75SSven Eckelmann s8 lower_rssi; 7495752b75SSven Eckelmann s8 upper_rssi; 7595752b75SSven Eckelmann 7695752b75SSven Eckelmann __be64 tsf; 7795752b75SSven Eckelmann 7895752b75SSven Eckelmann s8 lower_noise; 7995752b75SSven Eckelmann s8 upper_noise; 8095752b75SSven Eckelmann 8195752b75SSven Eckelmann __be16 lower_max_magnitude; 8295752b75SSven Eckelmann __be16 upper_max_magnitude; 8395752b75SSven Eckelmann 8495752b75SSven Eckelmann u8 lower_max_index; 8595752b75SSven Eckelmann u8 upper_max_index; 8695752b75SSven Eckelmann 8795752b75SSven Eckelmann u8 lower_bitmap_weight; 8895752b75SSven Eckelmann u8 upper_bitmap_weight; 8995752b75SSven Eckelmann 9095752b75SSven Eckelmann u8 max_exp; 9195752b75SSven Eckelmann 9295752b75SSven Eckelmann u8 data[SPECTRAL_HT20_40_NUM_BINS]; 9395752b75SSven Eckelmann } __packed; 9495752b75SSven Eckelmann 95855aed12SSimon Wunderlich struct fft_sample_ath10k { 96855aed12SSimon Wunderlich struct fft_sample_tlv tlv; 97855aed12SSimon Wunderlich u8 chan_width_mhz; 98855aed12SSimon Wunderlich __be16 freq1; 99855aed12SSimon Wunderlich __be16 freq2; 100855aed12SSimon Wunderlich __be16 noise; 101855aed12SSimon Wunderlich __be16 max_magnitude; 102855aed12SSimon Wunderlich __be16 total_gain_db; 103855aed12SSimon Wunderlich __be16 base_pwr_db; 104855aed12SSimon Wunderlich __be64 tsf; 105855aed12SSimon Wunderlich s8 max_index; 106855aed12SSimon Wunderlich u8 rssi; 107855aed12SSimon Wunderlich u8 relpwr_db; 108855aed12SSimon Wunderlich u8 avgpwr_db; 109855aed12SSimon Wunderlich u8 max_exp; 110855aed12SSimon Wunderlich 111*cfb72c08SGustavo A. R. Silva u8 data[]; 112855aed12SSimon Wunderlich } __packed; 113855aed12SSimon Wunderlich 1149d11b7bfSKarthikeyan Periyasamy struct fft_sample_ath11k { 1159d11b7bfSKarthikeyan Periyasamy struct fft_sample_tlv tlv; 1169d11b7bfSKarthikeyan Periyasamy u8 chan_width_mhz; 1179d11b7bfSKarthikeyan Periyasamy s8 max_index; 1189d11b7bfSKarthikeyan Periyasamy u8 max_exp; 1199d11b7bfSKarthikeyan Periyasamy __be16 freq1; 1209d11b7bfSKarthikeyan Periyasamy __be16 freq2; 1219d11b7bfSKarthikeyan Periyasamy __be16 max_magnitude; 1229d11b7bfSKarthikeyan Periyasamy __be16 rssi; 1239d11b7bfSKarthikeyan Periyasamy __be32 tsf; 1249d11b7bfSKarthikeyan Periyasamy __be32 noise; 1259d11b7bfSKarthikeyan Periyasamy 126*cfb72c08SGustavo A. R. Silva u8 data[]; 1279d11b7bfSKarthikeyan Periyasamy } __packed; 1289d11b7bfSKarthikeyan Periyasamy 12995752b75SSven Eckelmann #endif /* SPECTRAL_COMMON_H */ 130