1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name 20*5113495bSYour Name /** 21*5113495bSYour Name * DOC: cdp_txrx_mon_struct.h 22*5113495bSYour Name * Define the monitor mode API structure 23*5113495bSYour Name * shared by data path and the OS interface module 24*5113495bSYour Name */ 25*5113495bSYour Name 26*5113495bSYour Name #ifndef _CDP_TXRX_MON_STRUCT_H_ 27*5113495bSYour Name #define _CDP_TXRX_MON_STRUCT_H_ 28*5113495bSYour Name 29*5113495bSYour Name #ifdef QCA_SUPPORT_LITE_MONITOR 30*5113495bSYour Name 31*5113495bSYour Name #define CDP_LITE_MON_PEER_MAX 16 32*5113495bSYour Name 33*5113495bSYour Name #define CDP_MON_FRM_TYPE_MAX 3 34*5113495bSYour Name #define CDP_MON_FRM_FILTER_MODE_MAX 4 35*5113495bSYour Name 36*5113495bSYour Name #define CDP_LITE_MON_LEN_64B 0x40 37*5113495bSYour Name #define CDP_LITE_MON_LEN_128B 0x80 38*5113495bSYour Name #define CDP_LITE_MON_LEN_256B 0x100 39*5113495bSYour Name #define CDP_LITE_MON_LEN_FULL 0xFFFF 40*5113495bSYour Name 41*5113495bSYour Name #define CDP_LITE_MON_FILTER_ALL 0xFFFF 42*5113495bSYour Name 43*5113495bSYour Name /* This should align with nac mac type enumerations in ieee80211_ioctl.h */ 44*5113495bSYour Name #define CDP_LITE_MON_PEER_MAC_TYPE_CLIENT 2 45*5113495bSYour Name 46*5113495bSYour Name /** 47*5113495bSYour Name * enum cdp_lite_mon_legacy_filter - legacy filters for tx/rx 48*5113495bSYour Name * @LEGACY_FILTER_DISABLED: No filter / filter disabled 49*5113495bSYour Name * @LEGACY_FILTER_MCOPY: M_Copy filter 50*5113495bSYour Name * @LEGACY_FILTER_TX_CAPTURE: Tx_Capture filter 51*5113495bSYour Name * @LEGACY_FILTER_RX_ENH_CAPTURE: Rx Enhance capture filter 52*5113495bSYour Name * @LEGACY_FILTER_ADV_MON_FILTER: Advance Monitor filter 53*5113495bSYour Name * 54*5113495bSYour Name * Use to identify which filter is currently enabled using lite mon 55*5113495bSYour Name */ 56*5113495bSYour Name enum cdp_lite_mon_legacy_filter { 57*5113495bSYour Name LEGACY_FILTER_DISABLED = 0, 58*5113495bSYour Name LEGACY_FILTER_MCOPY = 1, 59*5113495bSYour Name LEGACY_FILTER_TX_CAPTURE = 2, 60*5113495bSYour Name LEGACY_FILTER_RX_ENH_CAPTURE = 3, 61*5113495bSYour Name LEGACY_FILTER_ADV_MON_FILTER = 4, 62*5113495bSYour Name }; 63*5113495bSYour Name 64*5113495bSYour Name /** 65*5113495bSYour Name * enum cdp_lite_mon_level- lite mon frame levels 66*5113495bSYour Name * @CDP_LITE_MON_LEVEL_INVALID: level invalid 67*5113495bSYour Name * @CDP_LITE_MON_LEVEL_MSDU: level msdu 68*5113495bSYour Name * @CDP_LITE_MON_LEVEL_MPDU: level mpdu 69*5113495bSYour Name * @CDP_LITE_MON_LEVEL_PPDU: level ppdu 70*5113495bSYour Name */ 71*5113495bSYour Name enum cdp_lite_mon_level { 72*5113495bSYour Name CDP_LITE_MON_LEVEL_INVALID = 0, 73*5113495bSYour Name CDP_LITE_MON_LEVEL_MSDU = 1, 74*5113495bSYour Name CDP_LITE_MON_LEVEL_MPDU = 2, 75*5113495bSYour Name CDP_LITE_MON_LEVEL_PPDU = 3, 76*5113495bSYour Name }; 77*5113495bSYour Name 78*5113495bSYour Name /** 79*5113495bSYour Name * enum cdp_lite_mon_peer_action- lite mon peer action 80*5113495bSYour Name * @CDP_LITE_MON_PEER_ADD: peer add 81*5113495bSYour Name * @CDP_LITE_MON_PEER_REMOVE: peer remove 82*5113495bSYour Name */ 83*5113495bSYour Name enum cdp_lite_mon_peer_action { 84*5113495bSYour Name CDP_LITE_MON_PEER_ADD = 0, 85*5113495bSYour Name CDP_LITE_MON_PEER_REMOVE = 1, 86*5113495bSYour Name }; 87*5113495bSYour Name 88*5113495bSYour Name /** 89*5113495bSYour Name * enum cdp_lite_mon_direction - lite mon config direction 90*5113495bSYour Name * @CDP_LITE_MON_DIRECTION_RX: lite mon config direction rx 91*5113495bSYour Name * @CDP_LITE_MON_DIRECTION_TX: lite mon config direction tx 92*5113495bSYour Name */ 93*5113495bSYour Name enum cdp_lite_mon_direction { 94*5113495bSYour Name CDP_LITE_MON_DIRECTION_RX = 1, 95*5113495bSYour Name CDP_LITE_MON_DIRECTION_TX = 2, 96*5113495bSYour Name }; 97*5113495bSYour Name #endif 98*5113495bSYour Name /* MU max user to sniff */ 99*5113495bSYour Name #define CDP_MU_SNIF_USER_MAX 4 100*5113495bSYour Name /* EHT max type and compression mode */ 101*5113495bSYour Name #define CDP_EHT_TYPE_MODE_MAX 3 102*5113495bSYour Name /* Same as MAX_20MHZ_SEGMENTS */ 103*5113495bSYour Name #define CDP_MAX_20MHZ_SEGS 16 104*5113495bSYour Name /* Same as MAX_ANTENNA_EIGHT */ 105*5113495bSYour Name #define CDP_MAX_NUM_ANTENNA 8 106*5113495bSYour Name 107*5113495bSYour Name /* XXX not really a mode; there are really multiple PHY's */ 108*5113495bSYour Name enum cdp_mon_phymode { 109*5113495bSYour Name /* autoselect */ 110*5113495bSYour Name CDP_IEEE80211_MODE_AUTO = 0, 111*5113495bSYour Name /* 5GHz, OFDM */ 112*5113495bSYour Name CDP_IEEE80211_MODE_11A = 1, 113*5113495bSYour Name /* 2GHz, CCK */ 114*5113495bSYour Name CDP_IEEE80211_MODE_11B = 2, 115*5113495bSYour Name /* 2GHz, OFDM */ 116*5113495bSYour Name CDP_IEEE80211_MODE_11G = 3, 117*5113495bSYour Name /* 2GHz, GFSK */ 118*5113495bSYour Name CDP_IEEE80211_MODE_FH = 4, 119*5113495bSYour Name /* 5GHz, OFDM, 2x clock dynamic turbo */ 120*5113495bSYour Name CDP_IEEE80211_MODE_TURBO_A = 5, 121*5113495bSYour Name /* 2GHz, OFDM, 2x clock dynamic turbo */ 122*5113495bSYour Name CDP_IEEE80211_MODE_TURBO_G = 6, 123*5113495bSYour Name /* 5Ghz, HT20 */ 124*5113495bSYour Name CDP_IEEE80211_MODE_11NA_HT20 = 7, 125*5113495bSYour Name /* 2Ghz, HT20 */ 126*5113495bSYour Name CDP_IEEE80211_MODE_11NG_HT20 = 8, 127*5113495bSYour Name /* 5Ghz, HT40 (ext ch +1) */ 128*5113495bSYour Name CDP_IEEE80211_MODE_11NA_HT40PLUS = 9, 129*5113495bSYour Name /* 5Ghz, HT40 (ext ch -1) */ 130*5113495bSYour Name CDP_IEEE80211_MODE_11NA_HT40MINUS = 10, 131*5113495bSYour Name /* 2Ghz, HT40 (ext ch +1) */ 132*5113495bSYour Name CDP_IEEE80211_MODE_11NG_HT40PLUS = 11, 133*5113495bSYour Name /* 2Ghz, HT40 (ext ch -1) */ 134*5113495bSYour Name CDP_IEEE80211_MODE_11NG_HT40MINUS = 12, 135*5113495bSYour Name /* 2Ghz, Auto HT40 */ 136*5113495bSYour Name CDP_IEEE80211_MODE_11NG_HT40 = 13, 137*5113495bSYour Name /* 5Ghz, Auto HT40 */ 138*5113495bSYour Name CDP_IEEE80211_MODE_11NA_HT40 = 14, 139*5113495bSYour Name /* 5Ghz, VHT20 */ 140*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT20 = 15, 141*5113495bSYour Name /* 5Ghz, VHT40 (Ext ch +1) */ 142*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT40PLUS = 16, 143*5113495bSYour Name /* 5Ghz VHT40 (Ext ch -1) */ 144*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT40MINUS = 17, 145*5113495bSYour Name /* 5Ghz, VHT40 */ 146*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT40 = 18, 147*5113495bSYour Name /* 5Ghz, VHT80 */ 148*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT80 = 19, 149*5113495bSYour Name /* 5Ghz, VHT160 */ 150*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT160 = 20, 151*5113495bSYour Name /* 5Ghz, VHT80_80 */ 152*5113495bSYour Name CDP_IEEE80211_MODE_11AC_VHT80_80 = 21, 153*5113495bSYour Name }; 154*5113495bSYour Name 155*5113495bSYour Name enum { 156*5113495bSYour Name CDP_PKT_TYPE_OFDM = 0, 157*5113495bSYour Name CDP_PKT_TYPE_CCK, 158*5113495bSYour Name CDP_PKT_TYPE_HT, 159*5113495bSYour Name CDP_PKT_TYPE_VHT, 160*5113495bSYour Name CDP_PKT_TYPE_HE, 161*5113495bSYour Name CDP_PKT_TYPE_EHT, 162*5113495bSYour Name CDP_PKT_TYPE_NO_SUP, 163*5113495bSYour Name CDP_PKT_TYPE_MAX, 164*5113495bSYour Name }; 165*5113495bSYour Name 166*5113495bSYour Name enum { 167*5113495bSYour Name CDP_SGI_0_8_US = 0, 168*5113495bSYour Name CDP_SGI_0_4_US, 169*5113495bSYour Name CDP_SGI_1_6_US, 170*5113495bSYour Name CDP_SGI_3_2_US, 171*5113495bSYour Name }; 172*5113495bSYour Name 173*5113495bSYour Name enum { 174*5113495bSYour Name CDP_RX_TYPE_SU = 0, 175*5113495bSYour Name CDP_RX_TYPE_MU_MIMO, 176*5113495bSYour Name CDP_RX_TYPE_MU_OFDMA, 177*5113495bSYour Name CDP_RX_TYPE_MU_OFDMA_MIMO, 178*5113495bSYour Name CDP_RX_TYPE_MAX, 179*5113495bSYour Name }; 180*5113495bSYour Name 181*5113495bSYour Name enum { 182*5113495bSYour Name CDP_MU_TYPE_DL = 0, 183*5113495bSYour Name CDP_MU_TYPE_UL, 184*5113495bSYour Name CDP_MU_TYPE_MAX, 185*5113495bSYour Name }; 186*5113495bSYour Name 187*5113495bSYour Name /* 188*5113495bSYour Name *Band Width Types 189*5113495bSYour Name */ 190*5113495bSYour Name enum CMN_BW_TYPES { 191*5113495bSYour Name CMN_BW_20MHZ, 192*5113495bSYour Name CMN_BW_40MHZ, 193*5113495bSYour Name CMN_BW_80MHZ, 194*5113495bSYour Name CMN_BW_160MHZ, 195*5113495bSYour Name CMN_BW_80_80MHZ, 196*5113495bSYour Name #ifdef WLAN_FEATURE_11BE 197*5113495bSYour Name CMN_BW_320MHZ, 198*5113495bSYour Name #endif 199*5113495bSYour Name CMN_BW_CNT, 200*5113495bSYour Name CMN_BW_IDLE = 0xFF, /*default BW state */ 201*5113495bSYour Name }; 202*5113495bSYour Name 203*5113495bSYour Name enum cdp_punctured_modes { 204*5113495bSYour Name NO_PUNCTURE, 205*5113495bSYour Name #ifdef WLAN_FEATURE_11BE 206*5113495bSYour Name PUNCTURED_20MHZ, 207*5113495bSYour Name PUNCTURED_40MHZ, 208*5113495bSYour Name PUNCTURED_80MHZ, 209*5113495bSYour Name PUNCTURED_120MHZ, 210*5113495bSYour Name #endif 211*5113495bSYour Name PUNCTURED_MODE_CNT, 212*5113495bSYour Name }; 213*5113495bSYour Name 214*5113495bSYour Name struct cdp_mon_status { 215*5113495bSYour Name /* bss color value 1-63 used for update on ppdu_desc bsscolor */ 216*5113495bSYour Name uint8_t bsscolor; 217*5113495bSYour Name int rs_numchains; 218*5113495bSYour Name int rs_flags; 219*5113495bSYour Name #define IEEE80211_RX_FCS_ERROR 0x01 220*5113495bSYour Name #define IEEE80211_RX_MIC_ERROR 0x02 221*5113495bSYour Name #define IEEE80211_RX_DECRYPT_ERROR 0x04 222*5113495bSYour Name /* holes in flags here between, ATH_RX_XXXX to IEEE80211_RX_XXX */ 223*5113495bSYour Name #define IEEE80211_RX_KEYMISS 0x200 224*5113495bSYour Name #define IEEE80211_RX_PN_ERROR 0x400 225*5113495bSYour Name int rs_rssi; /* RSSI (noise floor adjusted) */ 226*5113495bSYour Name int rs_abs_rssi; /* absolute RSSI */ 227*5113495bSYour Name int rs_datarate; /* data rate received */ 228*5113495bSYour Name int rs_rateieee; 229*5113495bSYour Name int rs_ratephy1; 230*5113495bSYour Name int rs_ratephy2; 231*5113495bSYour Name int rs_ratephy3; 232*5113495bSYour Name 233*5113495bSYour Name /* Keep the same as ATH_MAX_ANTENNA */ 234*5113495bSYour Name #define IEEE80211_MAX_ANTENNA 3 235*5113495bSYour Name /* RSSI (noise floor adjusted) */ 236*5113495bSYour Name u_int8_t rs_rssictl[IEEE80211_MAX_ANTENNA]; 237*5113495bSYour Name /* RSSI (noise floor adjusted) */ 238*5113495bSYour Name u_int8_t rs_rssiextn[IEEE80211_MAX_ANTENNA]; 239*5113495bSYour Name /* rs_rssi is valid or not */ 240*5113495bSYour Name u_int8_t rs_isvalidrssi; 241*5113495bSYour Name 242*5113495bSYour Name enum cdp_mon_phymode rs_phymode; 243*5113495bSYour Name int rs_freq; 244*5113495bSYour Name 245*5113495bSYour Name union { 246*5113495bSYour Name u_int8_t data[8]; 247*5113495bSYour Name u_int64_t tsf; 248*5113495bSYour Name } rs_tstamp; 249*5113495bSYour Name 250*5113495bSYour Name /* 251*5113495bSYour Name * Detail channel structure of recv frame. 252*5113495bSYour Name * It could be NULL if not available 253*5113495bSYour Name */ 254*5113495bSYour Name 255*5113495bSYour Name 256*5113495bSYour Name #ifdef ATH_SUPPORT_AOW 257*5113495bSYour Name u_int16_t rs_rxseq; /* WLAN Sequence number */ 258*5113495bSYour Name #endif 259*5113495bSYour Name #ifdef ATH_VOW_EXT_STATS 260*5113495bSYour Name /* Lower 16 bits holds the udp checksum offset in the data pkt */ 261*5113495bSYour Name u_int32_t vow_extstats_offset; 262*5113495bSYour Name /* Higher 16 bits contains offset in the data pkt at which vow 263*5113495bSYour Name * ext stats are embedded 264*5113495bSYour Name */ 265*5113495bSYour Name #endif 266*5113495bSYour Name u_int8_t rs_isaggr; 267*5113495bSYour Name u_int8_t rs_isapsd; 268*5113495bSYour Name int16_t rs_noisefloor; 269*5113495bSYour Name u_int16_t rs_channel; 270*5113495bSYour Name #ifdef ATH_SUPPORT_TxBF 271*5113495bSYour Name u_int32_t rs_rpttstamp; /* txbf report time stamp*/ 272*5113495bSYour Name #endif 273*5113495bSYour Name 274*5113495bSYour Name /* The following counts are meant to assist in stats calculation. 275*5113495bSYour Name * These variables are incremented only in specific situations, and 276*5113495bSYour Name * should not be relied upon for any purpose other than the original 277*5113495bSYour Name * stats related purpose they have been introduced for. 278*5113495bSYour Name */ 279*5113495bSYour Name 280*5113495bSYour Name u_int16_t rs_cryptodecapcount; /* Crypto bytes decapped/demic'ed. */ 281*5113495bSYour Name u_int8_t rs_padspace; /* No. of padding bytes present after 282*5113495bSYour Name header in wbuf. */ 283*5113495bSYour Name u_int8_t rs_qosdecapcount; /* QoS/HTC bytes decapped. */ 284*5113495bSYour Name 285*5113495bSYour Name /* End of stats calculation related counts. */ 286*5113495bSYour Name 287*5113495bSYour Name /* 288*5113495bSYour Name * uint8_t rs_lsig[IEEE80211_LSIG_LEN]; 289*5113495bSYour Name * uint8_t rs_htsig[IEEE80211_HTSIG_LEN]; 290*5113495bSYour Name * uint8_t rs_servicebytes[IEEE80211_SB_LEN]; 291*5113495bSYour Name * uint8_t rs_fcs_error; 292*5113495bSYour Name */ 293*5113495bSYour Name 294*5113495bSYour Name /* cdp convergence monitor mode status */ 295*5113495bSYour Name union { 296*5113495bSYour Name u_int8_t cdp_data[8]; 297*5113495bSYour Name u_int64_t cdp_tsf; 298*5113495bSYour Name } cdp_rs_tstamp; 299*5113495bSYour Name 300*5113495bSYour Name uint8_t cdp_rs_pream_type; 301*5113495bSYour Name uint32_t cdp_rs_user_rssi; 302*5113495bSYour Name uint8_t cdp_rs_stbc; 303*5113495bSYour Name uint8_t cdp_rs_sgi; 304*5113495bSYour Name uint32_t cdf_rs_rate_mcs; 305*5113495bSYour Name uint32_t cdp_rs_reception_type; 306*5113495bSYour Name uint32_t cdp_rs_bw; 307*5113495bSYour Name uint32_t cdp_rs_nss; 308*5113495bSYour Name uint8_t cdp_rs_fcs_err; 309*5113495bSYour Name bool cdp_rs_rxdma_err; 310*5113495bSYour Name }; 311*5113495bSYour Name 312*5113495bSYour Name enum { 313*5113495bSYour Name CDP_MON_PPDU_START = 0, 314*5113495bSYour Name CDP_MON_PPDU_END, 315*5113495bSYour Name }; 316*5113495bSYour Name 317*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT 318*5113495bSYour Name /* 319*5113495bSYour Name * enum cdp_mon_phyrx_abort_reason_code: Phy err code to store the reason 320*5113495bSYour Name * why PHY generated an abort request. 321*5113495bSYour Name */ 322*5113495bSYour Name enum cdp_mon_phyrx_abort_reason_code { 323*5113495bSYour Name CDP_PHYRX_ERR_PHY_OFF = 0, 324*5113495bSYour Name CDP_PHYRX_ERR_SYNTH_OFF, 325*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_TIMING, 326*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_SIGNAL_PARITY, 327*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_RATE_ILLEGAL, 328*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_LENGTH_ILLEGAL, 329*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_RESTART, 330*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_SERVICE, 331*5113495bSYour Name CDP_PHYRX_ERR_PPDU_OFDMA_POWER_DROP, 332*5113495bSYour Name CDP_PHYRX_ERR_CCK_BLOKKER, 333*5113495bSYour Name CDP_PHYRX_ERR_CCK_TIMING = 10, 334*5113495bSYour Name CDP_PHYRX_ERR_CCK_HEADER_CRC, 335*5113495bSYour Name CDP_PHYRX_ERR_CCK_RATE_ILLEGAL, 336*5113495bSYour Name CDP_PHYRX_ERR_CCK_LENGTH_ILLEGAL, 337*5113495bSYour Name CDP_PHYRX_ERR_CCK_RESTART, 338*5113495bSYour Name CDP_PHYRX_ERR_CCK_SERVICE, 339*5113495bSYour Name CDP_PHYRX_ERR_CCK_POWER_DROP, 340*5113495bSYour Name CDP_PHYRX_ERR_HT_CRC_ERR, 341*5113495bSYour Name CDP_PHYRX_ERR_HT_LENGTH_ILLEGAL, 342*5113495bSYour Name CDP_PHYRX_ERR_HT_RATE_ILLEGAL, 343*5113495bSYour Name CDP_PHYRX_ERR_HT_ZLF = 20, 344*5113495bSYour Name CDP_PHYRX_ERR_FALSE_RADAR_EXT, 345*5113495bSYour Name CDP_PHYRX_ERR_GREEN_FIELD, 346*5113495bSYour Name CDP_PHYRX_ERR_BW_GT_DYN_BW, 347*5113495bSYour Name CDP_PHYRX_ERR_HT_LSIG_RATE_MISMATCH, 348*5113495bSYour Name CDP_PHYRX_ERR_VHT_CRC_ERROR, 349*5113495bSYour Name CDP_PHYRX_ERR_VHT_SIGA_UNSUPPORTED, 350*5113495bSYour Name CDP_PHYRX_ERR_VHT_LSIG_LEN_INVALID, 351*5113495bSYour Name CDP_PHYRX_ERR_VHT_NDP_OR_ZLF, 352*5113495bSYour Name CDP_PHYRX_ERR_VHT_NSYM_LT_ZERO, 353*5113495bSYour Name CDP_PHYRX_ERR_VHT_RX_EXTRA_SYMBOL_MISMATCH = 30, 354*5113495bSYour Name CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID0, 355*5113495bSYour Name CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID1TO62, 356*5113495bSYour Name CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID63, 357*5113495bSYour Name CDP_PHYRX_ERR_OFDM_LDPC_DECODER_DISABLED, 358*5113495bSYour Name CDP_PHYRX_ERR_DEFER_NAP, 359*5113495bSYour Name CDP_PHYRX_ERR_FDOMAIN_TIMEOUT, 360*5113495bSYour Name CDP_PHYRX_ERR_LSIG_REL_CHECK, 361*5113495bSYour Name CDP_PHYRX_ERR_BT_COLLISION, 362*5113495bSYour Name CDP_PHYRX_ERR_UNSUPPORTED_MU_FEEDBACK, 363*5113495bSYour Name CDP_PHYRX_ERR_PPDU_TX_INTERRUPT_RX = 40, 364*5113495bSYour Name CDP_PHYRX_ERR_UNSUPPORTED_CBF, 365*5113495bSYour Name CDP_PHYRX_ERR_OTHER, 366*5113495bSYour Name CDP_PHYRX_ERR_HE_SIGA_UNSUPPORTED, 367*5113495bSYour Name CDP_PHYRX_ERR_HE_SIGA_CRC_ERROR, 368*5113495bSYour Name CDP_PHYRX_ERR_HE_SIGB_UNSUPPORTED, 369*5113495bSYour Name CDP_PHYRX_ERR_HE_SIGB_CRC_ERROR, 370*5113495bSYour Name CDP_PHYRX_ERR_HE_MU_MODE_UNSUPPORTED, 371*5113495bSYour Name CDP_PHYRX_ERR_HE_NDP_OR_ZLF, 372*5113495bSYour Name CDP_PHYRX_ERR_HE_NSYM_LT_ZERO, 373*5113495bSYour Name CDP_PHYRX_ERR_HE_RU_PARAMS_UNSUPPORTED = 50, 374*5113495bSYour Name CDP_PHYRX_ERR_HE_NUM_USERS_UNSUPPORTED, 375*5113495bSYour Name CDP_PHYRX_ERR_HE_SOUNDING_PARAMS_UNSUPPORTED, 376*5113495bSYour Name CDP_PHYRX_ERR_HE_EXT_SU_UNSUPPORTED, 377*5113495bSYour Name CDP_PHYRX_ERR_HE_TRIG_UNSUPPORTED, 378*5113495bSYour Name CDP_PHYRX_ERR_HE_LSIG_LEN_INVALID = 55, 379*5113495bSYour Name CDP_PHYRX_ERR_HE_LSIG_RATE_MISMATCH, 380*5113495bSYour Name CDP_PHYRX_ERR_OFDMA_SIGNAL_RELIABILITY, 381*5113495bSYour Name CDP_PHYRX_ERR_HT_NSYM_LT_ZERO, 382*5113495bSYour Name CDP_PHYRX_ERR_VHT_LSIG_RATE_MISMATCH, 383*5113495bSYour Name CDP_PHYRX_ERR_VHT_PAID_GID_MISMATCH = 60, 384*5113495bSYour Name CDP_PHYRX_ERR_VHT_UNSUPPORTED_BW, 385*5113495bSYour Name CDP_PHYRX_ERR_VHT_GI_DISAM_MISMATCH, 386*5113495bSYour Name CDP_PHYRX_ERR_RX_WDG_TIMEOUT = 63, 387*5113495bSYour Name CDP_PHYRX_ERR_MAX 388*5113495bSYour Name }; 389*5113495bSYour Name #endif 390*5113495bSYour Name 391*5113495bSYour Name #define MAX_PPDU_ID_HIST 128 392*5113495bSYour Name 393*5113495bSYour Name /** 394*5113495bSYour Name * struct cdp_pdev_mon_stats 395*5113495bSYour Name * @status_ppdu_state: state on PPDU start and end 396*5113495bSYour Name * @status_ppdu_start: status ring PPDU start TLV count 397*5113495bSYour Name * @status_ppdu_end: status ring PPDU end TLV count 398*5113495bSYour Name * @status_ppdu_compl: status ring matching start and end count on PPDU 399*5113495bSYour Name * @status_ppdu_start_mis: status ring missing start TLV count on PPDU 400*5113495bSYour Name * @status_ppdu_end_mis: status ring missing end TLV count on PPDU 401*5113495bSYour Name * @mpdu_cnt_fcs_ok: MPDU ok count per pkt and reception type DL-UL and user 402*5113495bSYour Name * @mpdu_cnt_fcs_err: MPDU err count per pkt and reception type DL-UL and user 403*5113495bSYour Name * @ppdu_eht_type_mode: PPDU count per type compression mode and DL-UL 404*5113495bSYour Name * @end_user_stats_cnt: PPDU end user TLV count 405*5113495bSYour Name * @start_user_info_cnt: PPDU start user info TLV count 406*5113495bSYour Name * @status_ppdu_done: status ring PPDU done TLV count 407*5113495bSYour Name * @dest_ppdu_done: destination ring PPDU count 408*5113495bSYour Name * @dest_mpdu_done: destination ring MPDU count 409*5113495bSYour Name * @dest_mpdu_drop: 410*5113495bSYour Name * @dup_mon_linkdesc_cnt: duplicate link descriptor indications from HW 411*5113495bSYour Name * @dup_mon_buf_cnt: duplicate buffer indications from HW 412*5113495bSYour Name * @dup_mon_sw_desc: Duplicate sw desc from HW 413*5113495bSYour Name * @stat_ring_ppdu_id_hist: 414*5113495bSYour Name * @dest_ring_ppdu_id_hist: 415*5113495bSYour Name * @ppdu_id_hist_idx: 416*5113495bSYour Name * @mon_rx_dest_stuck: 417*5113495bSYour Name * @tlv_tag_status_err: status not correct in the tlv tag 418*5113495bSYour Name * @status_buf_done_war: Number of status ring buffers for which DMA not done 419*5113495bSYour Name * WAR is applied. 420*5113495bSYour Name * @mon_rx_bufs_replenished_dest: Rx buffers replenish count 421*5113495bSYour Name * @mon_rx_bufs_reaped_dest: Rx buffer reap count 422*5113495bSYour Name * @ppdu_id_mismatch: counter to track ppdu id mismatch in 423*5113495bSYour Name * mointor status and monitor destination ring 424*5113495bSYour Name * @ppdu_id_match: counter to track ppdu id match in 425*5113495bSYour Name * mointor status and monitor destination ring 426*5113495bSYour Name * @status_ppdu_drop: Number of ppdu dropped from monitor status ring 427*5113495bSYour Name * @dest_ppdu_drop: Number of ppdu dropped from monitor destination ring 428*5113495bSYour Name * @mon_link_desc_invalid: msdu link desc invalid count 429*5113495bSYour Name * @mon_rx_desc_invalid: rx_desc invalid count 430*5113495bSYour Name * @mon_nbuf_sanity_err: 431*5113495bSYour Name * @mpdu_ppdu_id_mismatch_drop: mpdu's ppdu id did not match destination 432*5113495bSYour Name * ring ppdu id 433*5113495bSYour Name * @mpdu_decap_type_invalid: mpdu decap type invalid count 434*5113495bSYour Name * @rx_undecoded_count: Received undecoded frame count 435*5113495bSYour Name * @rx_undecoded_error: Rx undecoded errors 436*5113495bSYour Name * @rx_hdr_not_received: Rx HDR not received for MPDU 437*5113495bSYour Name * @invalid_dma_length: Invalid length received for packet buffer 438*5113495bSYour Name * @parent_buf_alloc: Numder of parent nbuf allocated for MPDU 439*5113495bSYour Name * @parent_buf_free: Number of parent nbuf freed 440*5113495bSYour Name * @pkt_buf_count: Number of packet buffers received 441*5113495bSYour Name * @mpdus_buf_to_stack: Number of MPDUs delivered to stack 442*5113495bSYour Name * @status_buf_count: Number of status buffer received 443*5113495bSYour Name * @empty_desc_ppdu: Number of empty desc received 444*5113495bSYour Name * @total_ppdu_info_enq: Number of PPDUs enqueued to wq 445*5113495bSYour Name * @total_ppdu_info_drop: Number of PPDUs dropped 446*5113495bSYour Name * @total_ppdu_info_alloc: Number of PPDU info allocated 447*5113495bSYour Name * @total_ppdu_info_free: Number of PPDU info freed 448*5113495bSYour Name * @ppdu_drop_cnt: Total PPDU drop count 449*5113495bSYour Name * @mpdu_drop_cnt: Total MPDU drop count 450*5113495bSYour Name * @end_of_ppdu_drop_cnt: Total end of ppdu drop count 451*5113495bSYour Name * @tlv_drop_cnt: TLV drop count 452*5113495bSYour Name * @rx_hdr_invalid_cnt: Rx header invalid count 453*5113495bSYour Name * @null_status_desc: NULL packet desc count 454*5113495bSYour Name * @null_pkt_desc: NULL packet desc count 455*5113495bSYour Name * @desc_magic_mismatch: desc magic number mismatch count; 456*5113495bSYour Name * @null_pkt_addr: NULL packet address count; 457*5113495bSYour Name * @pending_desc_count: Pending desc_count during pdev deinit 458*5113495bSYour Name */ 459*5113495bSYour Name struct cdp_pdev_mon_stats { 460*5113495bSYour Name #ifndef REMOVE_MON_DBG_STATS 461*5113495bSYour Name uint32_t status_ppdu_state; 462*5113495bSYour Name uint32_t status_ppdu_start; 463*5113495bSYour Name uint32_t status_ppdu_end; 464*5113495bSYour Name uint32_t status_ppdu_compl; 465*5113495bSYour Name uint32_t status_ppdu_start_mis; 466*5113495bSYour Name uint32_t status_ppdu_end_mis; 467*5113495bSYour Name #endif 468*5113495bSYour Name uint32_t mpdu_cnt_fcs_ok[CDP_PKT_TYPE_MAX][CDP_RX_TYPE_MAX] 469*5113495bSYour Name [CDP_MU_TYPE_MAX][CDP_MU_SNIF_USER_MAX]; 470*5113495bSYour Name uint32_t mpdu_cnt_fcs_err[CDP_PKT_TYPE_MAX][CDP_RX_TYPE_MAX] 471*5113495bSYour Name [CDP_MU_TYPE_MAX][CDP_MU_SNIF_USER_MAX]; 472*5113495bSYour Name uint32_t ppdu_eht_type_mode[CDP_EHT_TYPE_MODE_MAX][CDP_MU_TYPE_MAX]; 473*5113495bSYour Name uint32_t end_user_stats_cnt; 474*5113495bSYour Name uint32_t start_user_info_cnt; 475*5113495bSYour Name uint32_t status_ppdu_done; 476*5113495bSYour Name uint32_t dest_ppdu_done; 477*5113495bSYour Name uint32_t dest_mpdu_done; 478*5113495bSYour Name uint32_t dest_mpdu_drop; 479*5113495bSYour Name uint32_t dup_mon_linkdesc_cnt; 480*5113495bSYour Name uint32_t dup_mon_buf_cnt; 481*5113495bSYour Name uint32_t dup_mon_sw_desc; 482*5113495bSYour Name uint32_t stat_ring_ppdu_id_hist[MAX_PPDU_ID_HIST]; 483*5113495bSYour Name uint32_t dest_ring_ppdu_id_hist[MAX_PPDU_ID_HIST]; 484*5113495bSYour Name uint32_t ppdu_id_hist_idx; 485*5113495bSYour Name uint32_t mon_rx_dest_stuck; 486*5113495bSYour Name uint32_t tlv_tag_status_err; 487*5113495bSYour Name uint32_t status_buf_done_war; 488*5113495bSYour Name uint32_t mon_rx_bufs_replenished_dest; 489*5113495bSYour Name uint32_t mon_rx_bufs_reaped_dest; 490*5113495bSYour Name uint32_t ppdu_id_mismatch; 491*5113495bSYour Name uint32_t ppdu_id_match; 492*5113495bSYour Name uint32_t status_ppdu_drop; 493*5113495bSYour Name uint32_t dest_ppdu_drop; 494*5113495bSYour Name uint32_t mon_link_desc_invalid; 495*5113495bSYour Name uint32_t mon_rx_desc_invalid; 496*5113495bSYour Name uint32_t mon_nbuf_sanity_err; 497*5113495bSYour Name uint32_t mpdu_ppdu_id_mismatch_drop; 498*5113495bSYour Name uint32_t mpdu_decap_type_invalid; 499*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT 500*5113495bSYour Name uint32_t rx_undecoded_count; 501*5113495bSYour Name uint32_t rx_undecoded_error[CDP_PHYRX_ERR_MAX]; 502*5113495bSYour Name #endif 503*5113495bSYour Name uint32_t rx_hdr_not_received; 504*5113495bSYour Name uint32_t invalid_dma_length; 505*5113495bSYour Name uint32_t parent_buf_alloc; 506*5113495bSYour Name uint32_t parent_buf_free; 507*5113495bSYour Name uint32_t pkt_buf_count; 508*5113495bSYour Name uint32_t mpdus_buf_to_stack; 509*5113495bSYour Name uint32_t status_buf_count; 510*5113495bSYour Name uint32_t empty_desc_ppdu; 511*5113495bSYour Name uint32_t total_ppdu_info_enq; 512*5113495bSYour Name uint32_t total_ppdu_info_drop; 513*5113495bSYour Name uint32_t total_ppdu_info_alloc; 514*5113495bSYour Name uint32_t total_ppdu_info_free; 515*5113495bSYour Name uint32_t ppdu_drop_cnt; 516*5113495bSYour Name uint32_t mpdu_drop_cnt; 517*5113495bSYour Name uint32_t end_of_ppdu_drop_cnt; 518*5113495bSYour Name uint32_t tlv_drop_cnt; 519*5113495bSYour Name uint32_t rx_hdr_invalid_cnt; 520*5113495bSYour Name uint32_t null_status_desc; 521*5113495bSYour Name uint32_t null_pkt_desc; 522*5113495bSYour Name uint32_t desc_magic_mismatch; 523*5113495bSYour Name uint32_t null_pkt_addr; 524*5113495bSYour Name uint32_t pending_desc_count; 525*5113495bSYour Name }; 526*5113495bSYour Name 527*5113495bSYour Name #ifdef QCA_SUPPORT_LITE_MONITOR 528*5113495bSYour Name /** 529*5113495bSYour Name * struct cdp_lite_mon_filter_config - lite mon set/get filter config 530*5113495bSYour Name * @direction: direction tx/rx 531*5113495bSYour Name * @disable: disables lite mon 532*5113495bSYour Name * @level: MSDU/MPDU/PPDU levels 533*5113495bSYour Name * @metadata: meta information to be added 534*5113495bSYour Name * @mgmt_filter: mgmt filter for modes fp,md,mo 535*5113495bSYour Name * @ctrl_filter: ctrl filter for modes fp,md,mo 536*5113495bSYour Name * @data_filter: data filter for modes fp,md,mo 537*5113495bSYour Name * @len: mgmt/ctrl/data frame lens 538*5113495bSYour Name * @debug: debug options 539*5113495bSYour Name * @vdev_id: output vdev id 540*5113495bSYour Name * @legacy_filter_enabled: legacy filter currently enabled 541*5113495bSYour Name */ 542*5113495bSYour Name struct cdp_lite_mon_filter_config { 543*5113495bSYour Name uint8_t direction; 544*5113495bSYour Name uint8_t disable; 545*5113495bSYour Name uint8_t level; 546*5113495bSYour Name uint8_t metadata; 547*5113495bSYour Name uint16_t mgmt_filter[CDP_MON_FRM_FILTER_MODE_MAX]; 548*5113495bSYour Name uint16_t ctrl_filter[CDP_MON_FRM_FILTER_MODE_MAX]; 549*5113495bSYour Name uint16_t data_filter[CDP_MON_FRM_FILTER_MODE_MAX]; 550*5113495bSYour Name uint16_t len[CDP_MON_FRM_TYPE_MAX]; 551*5113495bSYour Name uint8_t debug; 552*5113495bSYour Name uint8_t vdev_id; 553*5113495bSYour Name uint8_t legacy_filter_enabled; 554*5113495bSYour Name }; 555*5113495bSYour Name 556*5113495bSYour Name /** 557*5113495bSYour Name * struct cdp_lite_mon_peer_config - lite mon set peer config 558*5113495bSYour Name * @direction: direction tx/rx 559*5113495bSYour Name * @action: add/del 560*5113495bSYour Name * @vdev_id: peer vdev id 561*5113495bSYour Name * @mac: peer mac 562*5113495bSYour Name */ 563*5113495bSYour Name struct cdp_lite_mon_peer_config { 564*5113495bSYour Name uint8_t direction; 565*5113495bSYour Name uint8_t action; 566*5113495bSYour Name uint8_t vdev_id; 567*5113495bSYour Name uint8_t mac[QDF_MAC_ADDR_SIZE]; 568*5113495bSYour Name }; 569*5113495bSYour Name 570*5113495bSYour Name /** 571*5113495bSYour Name * struct cdp_lite_mon_peer_info - lite mon get peer config 572*5113495bSYour Name * @direction: direction tx/rx 573*5113495bSYour Name * @count: no of peers 574*5113495bSYour Name * @mac: peer macs 575*5113495bSYour Name */ 576*5113495bSYour Name struct cdp_lite_mon_peer_info { 577*5113495bSYour Name uint8_t direction; 578*5113495bSYour Name uint8_t count; 579*5113495bSYour Name uint8_t mac[CDP_LITE_MON_PEER_MAX][QDF_MAC_ADDR_SIZE]; 580*5113495bSYour Name }; 581*5113495bSYour Name #endif 582*5113495bSYour Name /* channel operating width */ 583*5113495bSYour Name enum cdp_channel_width { 584*5113495bSYour Name CHAN_WIDTH_20 = 0, 585*5113495bSYour Name CHAN_WIDTH_40, 586*5113495bSYour Name CHAN_WIDTH_80, 587*5113495bSYour Name CHAN_WIDTH_160, 588*5113495bSYour Name CHAN_WIDTH_80P80, 589*5113495bSYour Name CHAN_WIDTH_5, 590*5113495bSYour Name CHAN_WIDTH_10, 591*5113495bSYour Name CHAN_WIDTH_165, 592*5113495bSYour Name CHAN_WIDTH_160P160, 593*5113495bSYour Name CHAN_WIDTH_320, 594*5113495bSYour Name 595*5113495bSYour Name CHAN_WIDTH_MAX, 596*5113495bSYour Name }; 597*5113495bSYour Name 598*5113495bSYour Name /** 599*5113495bSYour Name * struct cdp_rssi_temp_off_param_dp 600*5113495bSYour Name * @rssi_temp_offset: Temperature based rssi offset , send every 30 secs 601*5113495bSYour Name */ 602*5113495bSYour Name 603*5113495bSYour Name struct cdp_rssi_temp_off_param_dp { 604*5113495bSYour Name int32_t rssi_temp_offset; 605*5113495bSYour Name }; 606*5113495bSYour Name 607*5113495bSYour Name /** 608*5113495bSYour Name * struct cdp_rssi_dbm_conv_param_dp 609*5113495bSYour Name * @curr_bw: Current bandwidth 610*5113495bSYour Name * @curr_rx_chainmask: Current rx chainmask 611*5113495bSYour Name * @xbar_config: 4 bytes, used for BB to RF Chain mapping 612*5113495bSYour Name * @xlna_bypass_offset: Low noise amplifier bypass offset 613*5113495bSYour Name * @xlna_bypass_threshold: Low noise amplifier bypass threshold 614*5113495bSYour Name * @nf_hw_dbm: HW noise floor in dBm per chain, per 20MHz subband 615*5113495bSYour Name */ 616*5113495bSYour Name struct cdp_rssi_dbm_conv_param_dp { 617*5113495bSYour Name uint32_t curr_bw; 618*5113495bSYour Name uint32_t curr_rx_chainmask; 619*5113495bSYour Name uint32_t xbar_config; 620*5113495bSYour Name int32_t xlna_bypass_offset; 621*5113495bSYour Name int32_t xlna_bypass_threshold; 622*5113495bSYour Name int8_t nf_hw_dbm[CDP_MAX_NUM_ANTENNA][CDP_MAX_20MHZ_SEGS]; 623*5113495bSYour Name }; 624*5113495bSYour Name 625*5113495bSYour Name /** 626*5113495bSYour Name * struct cdp_rssi_db2dbm_param_dp 627*5113495bSYour Name * @pdev_id: pdev_id 628*5113495bSYour Name * @rssi_temp_off_present: to check temp offset values present or not 629*5113495bSYour Name * @rssi_dbm_info_present: to check rssi dbm conversion parameters 630*5113495bSYour Name * present or not 631*5113495bSYour Name * @temp_off_param: cdp_rssi_temp_off_param_dp structure value 632*5113495bSYour Name * @rssi_dbm_param: cdp_rssi_dbm_conv_param_dp staructure value 633*5113495bSYour Name */ 634*5113495bSYour Name struct cdp_rssi_db2dbm_param_dp { 635*5113495bSYour Name uint32_t pdev_id; 636*5113495bSYour Name bool rssi_temp_off_present; 637*5113495bSYour Name bool rssi_dbm_info_present; 638*5113495bSYour Name struct cdp_rssi_temp_off_param_dp temp_off_param; 639*5113495bSYour Name struct cdp_rssi_dbm_conv_param_dp rssi_dbm_param; 640*5113495bSYour Name }; 641*5113495bSYour Name 642*5113495bSYour Name /** 643*5113495bSYour Name * enum cdp_mon_reap_source - trigger source of the reap timer of 644*5113495bSYour Name * monitor status ring 645*5113495bSYour Name * @CDP_MON_REAP_SOURCE_PKTLOG: pktlog 646*5113495bSYour Name * @CDP_MON_REAP_SOURCE_CFR: CFR 647*5113495bSYour Name * @CDP_MON_REAP_SOURCE_EMESH: easy mesh 648*5113495bSYour Name * @CDP_MON_REAP_SOURCE_NUM: total number of the sources 649*5113495bSYour Name * @CDP_MON_REAP_SOURCE_ANY: any of the sources 650*5113495bSYour Name */ 651*5113495bSYour Name enum cdp_mon_reap_source { 652*5113495bSYour Name CDP_MON_REAP_SOURCE_PKTLOG, 653*5113495bSYour Name CDP_MON_REAP_SOURCE_CFR, 654*5113495bSYour Name CDP_MON_REAP_SOURCE_EMESH, 655*5113495bSYour Name 656*5113495bSYour Name /* keep last */ 657*5113495bSYour Name CDP_MON_REAP_SOURCE_NUM, 658*5113495bSYour Name CDP_MON_REAP_SOURCE_ANY, 659*5113495bSYour Name }; 660*5113495bSYour Name #endif 661