1 /* 2 * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _DP_MON_FILTER_H_ 20 #define _DP_MON_FILTER_H_ 21 22 /** 23 * Accessor Macros to access the software 24 * defined HTT filter htt_rx_ring_tlv_filter. 25 */ 26 #define DP_MON_FILTER_TLV_OFFSET 0x00000000 27 #define DP_MON_FILTER_TLV_MASK 0xffffffff 28 #define DP_MON_FILTER_TLV_LSB 0 29 30 #define DP_MON_FILTER_FP_MGMT_OFFSET 0x00000004 31 #define DP_MON_FILTER_FP_MGMT_MASK 0x0000ffff 32 #define DP_MON_FILTER_FP_MGMT_LSB 0 33 34 #define DP_MON_FILTER_MO_MGMT_OFFSET 0x00000004 35 #define DP_MON_FILTER_MO_MGMT_MASK 0xffff0000 36 #define DP_MON_FILTER_MO_MGMT_LSB 16 37 38 #define DP_MON_FILTER_FP_CTRL_OFFSET 0x00000008 39 #define DP_MON_FILTER_FP_CTRL_MASK 0x0000ffff 40 #define DP_MON_FILTER_FP_CTRL_LSB 0 41 42 #define DP_MON_FILTER_MO_CTRL_OFFSET 0x00000008 43 #define DP_MON_FILTER_MO_CTRL_MASK 0xffff0000 44 #define DP_MON_FILTER_MO_CTRL_LSB 16 45 46 #define DP_MON_FILTER_FP_DATA_OFFSET 0x0000000c 47 #define DP_MON_FILTER_FP_DATA_MASK 0x0000ffff 48 #define DP_MON_FILTER_FP_DATA_LSB 0 49 50 #define DP_MON_FILTER_MO_DATA_OFFSET 0x0000000c 51 #define DP_MON_FILTER_MO_DATA_MASK 0xffff0000 52 #define DP_MON_FILTER_MO_DATA_LSB 16 53 54 #define DP_MON_FILTER_MD_DATA_OFFSET 0x00000010 55 #define DP_MON_FILTER_MD_DATA_MASK 0x0000ffff 56 #define DP_MON_FILTER_MD_DATA_LSB 0 57 58 #define DP_MON_FILTER_MD_MGMT_OFFSET 0x00000010 59 #define DP_MON_FILTER_MD_MGMT_MASK 0xffff0000 60 #define DP_MON_FILTER_MD_MGMT_LSB 16 61 62 #define DP_MON_FILTER_MD_CTRL_OFFSET 0x00000014 63 #define DP_MON_FILTER_MD_CTRL_MASK 0x0000ffff 64 #define DP_MON_FILTER_MD_CTRL_LSB 0 65 66 #define DP_MON_FILTER_GET(src, field) \ 67 ((*((uint32_t *)((uint8_t *)(src) + DP_MON_ ## field ## _OFFSET)) & \ 68 (DP_MON_ ## field ## _MASK)) >> DP_MON_ ## field ## _LSB) \ 69 70 #define DP_MON_FILTER_SET(dst, field, value) \ 71 do { \ 72 uint32_t *val = \ 73 ((uint32_t *)((uint8_t *)(dst) + DP_MON_ ## field ## _OFFSET)); \ 74 *val &= ~(DP_MON_ ## field ## _MASK); \ 75 *val |= ((value) << DP_MON_ ## field ## _LSB); \ 76 } while (0) 77 78 #define DP_MON_FILTER_PRINT(fmt, args ...) \ 79 QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_DEBUG, \ 80 fmt, ## args) 81 82 #define dp_mon_filter_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON_FILTER, params) 83 #define dp_mon_filter_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MON_FILTER, params) 84 #define dp_mon_filter_info(params...) \ 85 __QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON_FILTER, ## params) 86 #define dp_mon_filter_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MON_FILTER, params) 87 88 /** 89 * struct dp_mon_filter - Monitor TLV filter 90 * @valid: enable/disable TLV filter 91 * @tlv_filter: Rx ring TLV filter 92 */ 93 struct dp_mon_filter { 94 bool valid; 95 struct htt_rx_ring_tlv_filter tlv_filter; 96 }; 97 98 /** 99 * enum dp_mon_filter_mode - Different modes for SRNG filters 100 * @DP_MON_FILTER_ENHACHED_STATS_MODE: PPDU enhanced stats mode 101 * @DP_MON_FILTER_SMART_MONITOR_MODE: Smart monitor mode 102 * @DP_MON_FILTER_MCOPY_MODE: AM copy mode 103 * @DP_MON_FILTER_MONITOR_MODE: Monitor mode 104 * @DP_MON_FILTER_RX_CAPTURE_MODE: Rx Capture mode 105 * @DP_MON_FILTER_PKT_LOG_FULL_MODE: Packet log full mode 106 * @DP_MON_FILTER_PKT_LOG_LITE_MODE: Packet log lite mode 107 */ 108 enum dp_mon_filter_mode { 109 #ifdef QCA_ENHANCED_STATS_SUPPORT 110 DP_MON_FILTER_ENHACHED_STATS_MODE, 111 #endif /* QCA_ENHANCED_STATS_SUPPORT */ 112 #ifdef QCA_MCOPY_SUPPORT 113 DP_MON_FILTER_MCOPY_MODE, 114 #endif /* QCA_MCOPY_SUPPORT */ 115 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC) 116 DP_MON_FILTER_SMART_MONITOR_MODE, 117 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */ 118 DP_MON_FILTER_MONITOR_MODE, 119 #ifdef WLAN_RX_PKT_CAPTURE_ENH 120 DP_MON_FILTER_RX_CAPTURE_MODE, 121 #endif /* WLAN_RX_PKT_CAPTURE_ENH */ 122 123 #ifdef WDI_EVENT_ENABLE 124 DP_MON_FILTER_PKT_LOG_FULL_MODE, 125 DP_MON_FILTER_PKT_LOG_LITE_MODE, 126 DP_MON_FILTER_PKT_LOG_CBF_MODE, 127 #endif /* WDI_EVENT_ENABLE */ 128 DP_MON_FILTER_MAX_MODE 129 }; 130 131 /** 132 * enum dp_mon_filter_srng_type - Srng types dynamic mode filter 133 * settings. 134 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF: RXDMA srng type 135 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS: RxDMA monitor status srng 136 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF: RxDMA destination srng 137 * @DP_MON_FILTER_SRNG_TYPE_MAX: Srng max type 138 */ 139 enum dp_mon_filter_srng_type { 140 DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF, 141 DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS, 142 DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF, 143 DP_MON_FILTER_SRNG_TYPE_MAX 144 }; 145 146 /** 147 * enum dp_mon_filter_action - Action for storing the filters 148 * into the radio structure. 149 * @DP_MON_FILTER_CLEAR - Clears the filter for a mode 150 * @DP_MON_FILTER_SET - Set the filtes for a mode 151 */ 152 enum dp_mon_filter_action { 153 DP_MON_FILTER_CLEAR, 154 DP_MON_FILTER_SET, 155 }; 156 157 #ifdef QCA_ENHANCED_STATS_SUPPORT 158 /** 159 * dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter 160 * @mon_pdev: Monitor pdev handle 161 */ 162 void dp_mon_filter_setup_enhanced_stats(struct dp_mon_pdev *mon_pdev); 163 164 /*** 165 * dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter 166 * @mon_pdev: Monitor pdev handle 167 */ 168 void dp_mon_filter_reset_enhanced_stats(struct dp_mon_pdev *mon_pdev); 169 #endif /* QCA_ENHANCED_STATS_SUPPORT */ 170 171 #ifdef QCA_MCOPY_SUPPORT 172 /** 173 * dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter 174 * @pdev: DP pdev handle 175 */ 176 void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev); 177 178 /** 179 * dp_mon_filter_reset_mcopy_mode() - Reset the m_copy mode filter 180 * @pdev: DP pdev handle 181 */ 182 void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev); 183 #endif /* QCA_MCOPY_SUPPORT */ 184 185 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC) 186 /** 187 * dp_mon_filter_setup_smart_monitor() - Setup the smart monitor mode filter 188 * @pdev: DP pdev handle 189 */ 190 void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev); 191 192 /** 193 * dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter 194 * @pdev: DP pdev handle 195 */ 196 void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev); 197 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */ 198 199 #ifdef WLAN_RX_PKT_CAPTURE_ENH 200 /** 201 * dp_mon_filter_setup_rx_enh_capture() - Setup the Rx capture mode filters 202 * @pdev: DP pdev handle 203 */ 204 void dp_mon_filter_setup_rx_enh_capture(struct dp_pdev *pdev); 205 206 /** 207 * dp_mon_filter_reset_rx_enh_capture() - Reset the Rx capture mode filters 208 * @pdev: DP pdev handle 209 */ 210 void dp_mon_filter_reset_rx_enh_capture(struct dp_pdev *pdev); 211 #endif /* WLAN_RX_PKT_CAPTURE_ENH */ 212 213 /** 214 * dp_mon_filter_setup_mon_mode() - Setup the Rx monitor mode filter 215 * @pdev: DP pdev handle 216 */ 217 void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev); 218 219 /** 220 * dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter 221 * @pdev: DP pdev handle 222 */ 223 void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev); 224 225 #ifdef WDI_EVENT_ENABLE 226 /** 227 * dp_mon_filter_setup_rx_pkt_log_full() - Setup the Rx pktlog full mode filter 228 * @pdev: DP pdev handle 229 */ 230 void dp_mon_filter_setup_rx_pkt_log_full(struct dp_pdev *pdev); 231 232 /** 233 * dp_mon_filter_reset_rx_pkt_log_full() - Reset the Rx pktlog full mode filter 234 * @pdev: DP pdev handle 235 */ 236 void dp_mon_filter_reset_rx_pkt_log_full(struct dp_pdev *pdev); 237 238 /** 239 * dp_mon_filter_setup_rx_pkt_log_lite() - Setup the Rx pktlog lite mode filter 240 * in the radio object. 241 * @pdev: DP pdev handle 242 */ 243 void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev); 244 245 /** 246 * dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter 247 * @pdev: DP pdev handle 248 */ 249 void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev); 250 251 /** 252 * dp_mon_filter_setup_rx_pkt_log_cbf() - Setup the Rx pktlog cbf mode filter 253 * in the radio object. 254 * @pdev: DP pdev handle 255 */ 256 void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev); 257 258 /** 259 * dp_mon_filter_reset_rx_pktlog_cbf() - Reset the Rx pktlog cbf mode filter 260 * @pdev: DP pdev handle 261 */ 262 void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev); 263 #endif /* WDI_EVENT_ENABLE */ 264 265 /** 266 * dp_mon_filter_update() - Setup the monitor filter setting for a srng 267 * type 268 * @pdev: DP pdev handle 269 * 270 * Return: QDF_STATUS 271 */ 272 QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev); 273 274 /** 275 * dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in 276 * the radio object. 277 * @mon_pdev: monitor pdev handle 278 */ 279 void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev); 280 281 /** 282 * dp_mon_filter_alloc() - Allocate the filter objects to be stored in 283 * the radio object. 284 * @mon_pdev: monitor pdev handle 285 */ 286 struct dp_mon_filter **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev); 287 #endif /* #ifndef _DP_MON_FILTER_H_ */ 288