123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- /*
- * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- /**
- * @file cdp_txrx_mon_struct.h
- * @brief Define the monitor mode API structure
- * shared by data path and the OS interface module
- */
- #ifndef _CDP_TXRX_MON_STRUCT_H_
- #define _CDP_TXRX_MON_STRUCT_H_
- /* XXX not really a mode; there are really multiple PHY's */
- enum cdp_mon_phymode {
- /* autoselect */
- CDP_IEEE80211_MODE_AUTO = 0,
- /* 5GHz, OFDM */
- CDP_IEEE80211_MODE_11A = 1,
- /* 2GHz, CCK */
- CDP_IEEE80211_MODE_11B = 2,
- /* 2GHz, OFDM */
- CDP_IEEE80211_MODE_11G = 3,
- /* 2GHz, GFSK */
- CDP_IEEE80211_MODE_FH = 4,
- /* 5GHz, OFDM, 2x clock dynamic turbo */
- CDP_IEEE80211_MODE_TURBO_A = 5,
- /* 2GHz, OFDM, 2x clock dynamic turbo */
- CDP_IEEE80211_MODE_TURBO_G = 6,
- /* 5Ghz, HT20 */
- CDP_IEEE80211_MODE_11NA_HT20 = 7,
- /* 2Ghz, HT20 */
- CDP_IEEE80211_MODE_11NG_HT20 = 8,
- /* 5Ghz, HT40 (ext ch +1) */
- CDP_IEEE80211_MODE_11NA_HT40PLUS = 9,
- /* 5Ghz, HT40 (ext ch -1) */
- CDP_IEEE80211_MODE_11NA_HT40MINUS = 10,
- /* 2Ghz, HT40 (ext ch +1) */
- CDP_IEEE80211_MODE_11NG_HT40PLUS = 11,
- /* 2Ghz, HT40 (ext ch -1) */
- CDP_IEEE80211_MODE_11NG_HT40MINUS = 12,
- /* 2Ghz, Auto HT40 */
- CDP_IEEE80211_MODE_11NG_HT40 = 13,
- /* 5Ghz, Auto HT40 */
- CDP_IEEE80211_MODE_11NA_HT40 = 14,
- /* 5Ghz, VHT20 */
- CDP_IEEE80211_MODE_11AC_VHT20 = 15,
- /* 5Ghz, VHT40 (Ext ch +1) */
- CDP_IEEE80211_MODE_11AC_VHT40PLUS = 16,
- /* 5Ghz VHT40 (Ext ch -1) */
- CDP_IEEE80211_MODE_11AC_VHT40MINUS = 17,
- /* 5Ghz, VHT40 */
- CDP_IEEE80211_MODE_11AC_VHT40 = 18,
- /* 5Ghz, VHT80 */
- CDP_IEEE80211_MODE_11AC_VHT80 = 19,
- /* 5Ghz, VHT160 */
- CDP_IEEE80211_MODE_11AC_VHT160 = 20,
- /* 5Ghz, VHT80_80 */
- CDP_IEEE80211_MODE_11AC_VHT80_80 = 21,
- };
- enum {
- CDP_PKT_TYPE_OFDM = 0,
- CDP_PKT_TYPE_CCK,
- CDP_PKT_TYPE_HT,
- CDP_PKT_TYPE_VHT,
- CDP_PKT_TYPE_HE,
- };
- enum {
- CDP_SGI_0_8_US = 0,
- CDP_SGI_0_4_US,
- CDP_SGI_1_6_US,
- CDP_SGI_3_2_US,
- };
- enum {
- CDP_RX_TYPE_SU = 0,
- CDP_RX_TYPE_MU_MIMO,
- CDP_RX_TYPE_MU_OFDMA,
- CDP_RX_TYPE_MU_OFDMA_MIMO,
- };
- enum {
- CDP_FULL_RX_BW_20 = 0,
- CDP_FULL_RX_BW_40,
- CDP_FULL_RX_BW_80,
- CDP_FULL_RX_BW_160,
- };
- struct cdp_mon_status {
- int rs_numchains;
- int rs_flags;
- #define IEEE80211_RX_FCS_ERROR 0x01
- #define IEEE80211_RX_MIC_ERROR 0x02
- #define IEEE80211_RX_DECRYPT_ERROR 0x04
- /* holes in flags here between, ATH_RX_XXXX to IEEE80211_RX_XXX */
- #define IEEE80211_RX_KEYMISS 0x200
- int rs_rssi; /* RSSI (noise floor ajusted) */
- int rs_abs_rssi; /* absolute RSSI */
- int rs_datarate; /* data rate received */
- int rs_rateieee;
- int rs_ratephy1;
- int rs_ratephy2;
- int rs_ratephy3;
- /* Keep the same as ATH_MAX_ANTENNA */
- #define IEEE80211_MAX_ANTENNA 3
- /* RSSI (noise floor ajusted) */
- u_int8_t rs_rssictl[IEEE80211_MAX_ANTENNA];
- /* RSSI (noise floor ajusted) */
- u_int8_t rs_rssiextn[IEEE80211_MAX_ANTENNA];
- /* rs_rssi is valid or not */
- u_int8_t rs_isvalidrssi;
- enum cdp_mon_phymode rs_phymode;
- int rs_freq;
- union {
- u_int8_t data[8];
- u_int64_t tsf;
- } rs_tstamp;
- /*
- * Detail channel structure of recv frame.
- * It could be NULL if not available
- */
- #ifdef ATH_SUPPORT_AOW
- u_int16_t rs_rxseq; /* WLAN Sequence number */
- #endif
- #ifdef ATH_VOW_EXT_STATS
- /* Lower 16 bits holds the udp checksum offset in the data pkt */
- u_int32_t vow_extstats_offset;
- /* Higher 16 bits contains offset in the data pkt at which vow
- * ext stats are embedded
- */
- #endif
- u_int8_t rs_isaggr;
- u_int8_t rs_isapsd;
- int16_t rs_noisefloor;
- u_int16_t rs_channel;
- #ifdef ATH_SUPPORT_TxBF
- u_int32_t rs_rpttstamp; /* txbf report time stamp*/
- #endif
- /* The following counts are meant to assist in stats calculation.
- * These variables are incremented only in specific situations, and
- * should not be relied upon for any purpose other than the original
- * stats related purpose they have been introduced for.
- */
- u_int16_t rs_cryptodecapcount; /* Crypto bytes decapped/demic'ed. */
- u_int8_t rs_padspace; /* No. of padding bytes present after
- header in wbuf. */
- u_int8_t rs_qosdecapcount; /* QoS/HTC bytes decapped. */
- /* End of stats calculation related counts. */
- /*
- * uint8_t rs_lsig[IEEE80211_LSIG_LEN];
- * uint8_t rs_htsig[IEEE80211_HTSIG_LEN];
- * uint8_t rs_servicebytes[IEEE80211_SB_LEN];
- * uint8_t rs_fcs_error;
- */
- /* cdp convergence monitor mode status */
- union {
- u_int8_t cdp_data[8];
- u_int64_t cdp_tsf;
- } cdp_rs_tstamp;
- uint8_t cdp_rs_pream_type;
- uint32_t cdp_rs_user_rssi;
- uint8_t cdp_rs_stbc;
- uint8_t cdp_rs_sgi;
- uint32_t cdf_rs_rate_mcs;
- uint32_t cdp_rs_reception_type;
- uint32_t cdp_rs_bw;
- uint32_t cdp_rs_nss;
- uint8_t cdp_rs_fcs_err;
- };
- enum {
- CDP_MON_PPDU_START = 0,
- CDP_MON_PPDU_END,
- };
- /**
- * struct cdp_pdev_mon_stats
- * @status_ppdu_state: state on PPDU start and end
- * @status_ppdu_start: status ring PPDU start TLV count
- * @status_ppdu_end: status ring PPDU end TLV count
- * @status_ppdu_compl: status ring matching start and end count on PPDU
- * @status_ppdu_start_mis: status ring missing start TLV count on PPDU
- * @status_ppdu_end_mis: status ring missing end TLV count on PPDU
- * @status_ppdu_done: status ring PPDU done TLV count
- * @dest_ppdu_done: destination ring PPDU count
- * @dest_mpdu_done: destination ring MPDU count
- */
- struct cdp_pdev_mon_stats {
- #ifndef REMOVE_MON_DBG_STATS
- uint32_t status_ppdu_state;
- uint32_t status_ppdu_start;
- uint32_t status_ppdu_end;
- uint32_t status_ppdu_compl;
- uint32_t status_ppdu_start_mis;
- uint32_t status_ppdu_end_mis;
- #endif
- uint32_t status_ppdu_done;
- uint32_t dest_ppdu_done;
- uint32_t dest_mpdu_done;
- uint32_t dest_mpdu_drop;
- };
- #endif
|