1 /* 2 * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #ifndef _DP_MON_FILTER_H_ 21 #define _DP_MON_FILTER_H_ 22 23 /** 24 * Accessor Macros to access the software 25 * defined HTT filter htt_rx_ring_tlv_filter. 26 */ 27 #define DP_MON_FILTER_TLV_OFFSET 0x00000000 28 #define DP_MON_FILTER_TLV_MASK 0xffffffff 29 #define DP_MON_FILTER_TLV_LSB 0 30 31 #define DP_MON_FILTER_FP_MGMT_OFFSET 0x00000004 32 #define DP_MON_FILTER_FP_MGMT_MASK 0x0000ffff 33 #define DP_MON_FILTER_FP_MGMT_LSB 0 34 35 #define DP_MON_FILTER_MO_MGMT_OFFSET 0x00000004 36 #define DP_MON_FILTER_MO_MGMT_MASK 0xffff0000 37 #define DP_MON_FILTER_MO_MGMT_LSB 16 38 39 #define DP_MON_FILTER_FP_CTRL_OFFSET 0x00000008 40 #define DP_MON_FILTER_FP_CTRL_MASK 0x0000ffff 41 #define DP_MON_FILTER_FP_CTRL_LSB 0 42 43 #define DP_MON_FILTER_MO_CTRL_OFFSET 0x00000008 44 #define DP_MON_FILTER_MO_CTRL_MASK 0xffff0000 45 #define DP_MON_FILTER_MO_CTRL_LSB 16 46 47 #define DP_MON_FILTER_FP_DATA_OFFSET 0x0000000c 48 #define DP_MON_FILTER_FP_DATA_MASK 0x0000ffff 49 #define DP_MON_FILTER_FP_DATA_LSB 0 50 51 #define DP_MON_FILTER_MO_DATA_OFFSET 0x0000000c 52 #define DP_MON_FILTER_MO_DATA_MASK 0xffff0000 53 #define DP_MON_FILTER_MO_DATA_LSB 16 54 55 #define DP_MON_FILTER_MD_DATA_OFFSET 0x00000010 56 #define DP_MON_FILTER_MD_DATA_MASK 0x0000ffff 57 #define DP_MON_FILTER_MD_DATA_LSB 0 58 59 #define DP_MON_FILTER_MD_MGMT_OFFSET 0x00000010 60 #define DP_MON_FILTER_MD_MGMT_MASK 0xffff0000 61 #define DP_MON_FILTER_MD_MGMT_LSB 16 62 63 #define DP_MON_FILTER_MD_CTRL_OFFSET 0x00000014 64 #define DP_MON_FILTER_MD_CTRL_MASK 0x0000ffff 65 #define DP_MON_FILTER_MD_CTRL_LSB 0 66 67 #define DP_MON_FILTER_GET(src, field) \ 68 ((*((uint32_t *)((uint8_t *)(src) + DP_MON_ ## field ## _OFFSET)) & \ 69 (DP_MON_ ## field ## _MASK)) >> DP_MON_ ## field ## _LSB) \ 70 71 #define DP_MON_FILTER_SET(dst, field, value) \ 72 do { \ 73 uint32_t *val = \ 74 ((uint32_t *)((uint8_t *)(dst) + DP_MON_ ## field ## _OFFSET)); \ 75 *val &= ~(DP_MON_ ## field ## _MASK); \ 76 *val |= ((value) << DP_MON_ ## field ## _LSB); \ 77 } while (0) 78 79 #define DP_MON_FILTER_PRINT(fmt, args ...) \ 80 QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_DEBUG, \ 81 fmt, ## args) 82 83 #define dp_mon_filter_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON_FILTER, params) 84 #define dp_mon_filter_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MON_FILTER, params) 85 #define dp_mon_filter_info(params...) \ 86 __QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON_FILTER, ## params) 87 #define dp_mon_filter_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MON_FILTER, params) 88 89 /** 90 * struct dp_mon_filter - Monitor TLV filter 91 * @valid: enable/disable TLV filter 92 * @tlv_filter: Rx ring TLV filter 93 */ 94 struct dp_mon_filter { 95 bool valid; 96 struct htt_rx_ring_tlv_filter tlv_filter; 97 }; 98 99 /** 100 * enum dp_mon_filter_mode - Different modes for SRNG filters 101 * @DP_MON_FILTER_ENHACHED_STATS_MODE: PPDU enhanced stats mode 102 * @DP_MON_FILTER_SMART_MONITOR_MODE: Smart monitor mode 103 * @DP_MON_FILTER_MCOPY_MODE: AM copy mode 104 * @DP_MON_FILTER_MONITOR_MODE: Monitor mode 105 * @DP_MON_FILTER_RX_CAPTURE_MODE: Rx Capture mode 106 * @DP_MON_FILTER_PKT_LOG_FULL_MODE: Packet log full mode 107 * @DP_MON_FILTER_PKT_LOG_LITE_MODE: Packet log lite mode 108 * @DP_MON_FILTER_PKT_LOG_CBF_MODE: Packet log cbf mode 109 * @DP_MON_FILTER_PKT_LOG_HYBRID_MODE: Packet log hybrid mode 110 * @DP_MON_FILTER_RX_UNDECODED_METADATA_CAPTURE_MODE: Undecoded frame capture 111 */ 112 enum dp_mon_filter_mode { 113 #ifdef QCA_ENHANCED_STATS_SUPPORT 114 DP_MON_FILTER_ENHACHED_STATS_MODE, 115 #endif /* QCA_ENHANCED_STATS_SUPPORT */ 116 #ifdef QCA_MCOPY_SUPPORT 117 DP_MON_FILTER_MCOPY_MODE, 118 #endif /* QCA_MCOPY_SUPPORT */ 119 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC) 120 DP_MON_FILTER_SMART_MONITOR_MODE, 121 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */ 122 DP_MON_FILTER_MONITOR_MODE, 123 #ifdef WLAN_RX_PKT_CAPTURE_ENH 124 DP_MON_FILTER_RX_CAPTURE_MODE, 125 #endif /* WLAN_RX_PKT_CAPTURE_ENH */ 126 127 #ifdef WDI_EVENT_ENABLE 128 DP_MON_FILTER_PKT_LOG_FULL_MODE, 129 DP_MON_FILTER_PKT_LOG_LITE_MODE, 130 DP_MON_FILTER_PKT_LOG_CBF_MODE, 131 #ifdef BE_PKTLOG_SUPPORT 132 DP_MON_FILTER_PKT_LOG_HYBRID_MODE, 133 #endif 134 #endif /* WDI_EVENT_ENABLE */ 135 #ifdef QCA_UNDECODED_METADATA_SUPPORT 136 DP_MON_FILTER_UNDECODED_METADATA_CAPTURE_MODE, 137 #endif 138 #ifdef QCA_SUPPORT_LITE_MONITOR 139 DP_MON_FILTER_LITE_MON_MODE, 140 #endif /*QCA_SUPPORT_LITE_MONITOR*/ 141 DP_MON_FILTER_MAX_MODE 142 }; 143 144 /** 145 * enum dp_mon_filter_srng_type - Srng types dynamic mode filter 146 * settings. 147 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF: RXDMA srng type 148 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS: RxDMA monitor status srng 149 * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF: RxDMA destination srng 150 * @DP_MON_FILTER_SRNG_TYPE_RXMON_DEST: RxMON destination srng 151 * @DP_MON_FILTER_SRNG_TYPE_TXMON_DEST: TxMON destination srng 152 * @DP_MON_FILTER_SRNG_TYPE_MAX: Srng max type 153 */ 154 enum dp_mon_filter_srng_type { 155 DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF, 156 DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS, 157 DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF, 158 DP_MON_FILTER_SRNG_TYPE_RXMON_DEST, 159 DP_MON_FILTER_SRNG_TYPE_TXMON_DEST, 160 DP_MON_FILTER_SRNG_TYPE_MAX 161 }; 162 163 /** 164 * enum dp_mon_filter_action - Action for storing the filters 165 * into the radio structure. 166 * @DP_MON_FILTER_CLEAR - Clears the filter for a mode 167 * @DP_MON_FILTER_SET - Set the filtes for a mode 168 */ 169 enum dp_mon_filter_action { 170 DP_MON_FILTER_CLEAR, 171 DP_MON_FILTER_SET, 172 }; 173 174 #ifdef QCA_UNDECODED_METADATA_SUPPORT 175 /** 176 * enum dp_mon_fp_phy_err_buf_source - fp_phy_err_buf_src indicates the source 177 * ring selection for the FP PHY ERR status tlv. 178 * @WBM2RXDMA_BUF_SOURCE_RING: 0 - wbm2rxdma_buf_source_ring 179 * @FW2RXDMA_BUF_SOURCE_RING: 1 - fw2rxdma_buf_source_ring 180 * @SW2RXDMA_BUF_SOURCE_RING: 2 - sw2rxdma_buf_source_ring 181 * @NO_BUFFER_RING: 3 - no_buffer_ring 182 */ 183 enum dp_mon_fp_phy_err_buf_source { 184 WBM2RXDMA_BUF_SOURCE_RING, 185 FW2RXDMA_BUF_SOURCE_RING, 186 SW2RXDMA_BUF_SOURCE_RING, 187 NO_BUFFER_RING 188 }; 189 190 /** 191 * enum dp_mon_fp_phy_err_buf_dest - fp_phy_err_buf_dest indicates the 192 * destination ring selection for the FP PHY ERR status tlv. 193 * @RXDMA_RELEASING_RING: 0 - rxdma_release_ring 194 * @RXDMA2FW_RING: 1 - rxdma2fw_ring 195 * @RXDMA2SW_RING: 2 - rxdma2sw_ring 196 * @RXDMA2REO_RING: 3 - rxdma2reo_ring 197 */ 198 enum dp_mon_fp_phy_err_buf_dest { 199 RXDMA_RELEASING_RING, 200 RXDMA2FW_RING, 201 RXDMA2SW_RING, 202 RXDMA2REO_RING 203 }; 204 #endif 205 206 /** 207 * dp_mon_filters_reset() - reset all filters 208 * @pdev: DP pdev handle 209 */ 210 void dp_mon_filters_reset(struct dp_pdev *pdev); 211 212 #ifdef QCA_ENHANCED_STATS_SUPPORT 213 /** 214 * dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter 215 * @pdev: DP pdev handle 216 */ 217 void dp_mon_filter_setup_enhanced_stats(struct dp_pdev *pdev); 218 219 /*** 220 * dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter 221 * @pdev: DP pdev handle 222 */ 223 void dp_mon_filter_reset_enhanced_stats(struct dp_pdev *pdev); 224 #endif /* QCA_ENHANCED_STATS_SUPPORT */ 225 226 #ifdef QCA_MCOPY_SUPPORT 227 /** 228 * dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter 229 * @pdev: DP pdev handle 230 */ 231 void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev); 232 233 /** 234 * dp_mon_filter_reset_mcopy_mode() - Reset the m_copy mode filter 235 * @pdev: DP pdev handle 236 */ 237 void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev); 238 #endif /* QCA_MCOPY_SUPPORT */ 239 240 #ifdef QCA_UNDECODED_METADATA_SUPPORT 241 /** 242 * dp_mon_filter_setup_undecoded_metadata_mode() - Setup the undecoded 243 * metadata capture mode filter 244 * @pdev: DP pdev handle 245 */ 246 void dp_mon_filter_setup_undecoded_metadata_mode(struct dp_pdev *pdev); 247 248 /** 249 * dp_mon_filter_reset_undecoded_metadata_mode() - Reset the undecoded 250 * metadata capture mode filter 251 * @pdev: DP pdev handle 252 */ 253 void dp_mon_filter_reset_undecoded_metadata_mode(struct dp_pdev *pdev); 254 #endif /* QCA_UNDECODED_METADATA_SUPPORT */ 255 256 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC) 257 /** 258 * dp_mon_filter_setup_smart_monitor() - Setup the smart monitor mode filter 259 * @pdev: DP pdev handle 260 */ 261 void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev); 262 263 /** 264 * dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter 265 * @pdev: DP pdev handle 266 */ 267 void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev); 268 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */ 269 270 /** 271 * dp_mon_filter_set_reset_mon_mac_filter() - Setup the monitor mac filter 272 * @pdev: DP pdev handle 273 * @val: indicating set/reset 274 */ 275 void dp_mon_filter_set_reset_mon_mac_filter(struct dp_pdev *pdev, bool val); 276 277 #ifdef WLAN_RX_PKT_CAPTURE_ENH 278 /** 279 * dp_mon_filter_setup_rx_enh_capture() - Setup the Rx capture mode filters 280 * @pdev: DP pdev handle 281 */ 282 void dp_mon_filter_setup_rx_enh_capture(struct dp_pdev *pdev); 283 284 /** 285 * dp_mon_filter_reset_rx_enh_capture() - Reset the Rx capture mode filters 286 * @pdev: DP pdev handle 287 */ 288 void dp_mon_filter_reset_rx_enh_capture(struct dp_pdev *pdev); 289 #endif /* WLAN_RX_PKT_CAPTURE_ENH */ 290 291 /** 292 * dp_mon_filter_setup_mon_mode() - Setup the Rx and Tx monitor mode filter 293 * @pdev: DP pdev handle 294 */ 295 void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev); 296 297 /** 298 * dp_mon_filter_setup_tx_mon_mode() - Setup the Tx monitor mode filter 299 * @pdev: DP pdev handle 300 */ 301 void dp_mon_filter_setup_tx_mon_mode(struct dp_pdev *pdev); 302 303 /** 304 * dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter 305 * @pdev: DP pdev handle 306 */ 307 void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev); 308 309 #ifdef WDI_EVENT_ENABLE 310 /** 311 * dp_mon_filter_setup_rx_pkt_log_full() - Setup the Rx pktlog full mode filter 312 * @pdev: DP pdev handle 313 */ 314 void dp_mon_filter_setup_rx_pkt_log_full(struct dp_pdev *pdev); 315 316 /** 317 * dp_mon_filter_reset_rx_pkt_log_full() - Reset the Rx pktlog full mode filter 318 * @pdev: DP pdev handle 319 */ 320 void dp_mon_filter_reset_rx_pkt_log_full(struct dp_pdev *pdev); 321 322 /** 323 * dp_mon_filter_setup_rx_pkt_log_lite() - Setup the Rx pktlog lite mode filter 324 * in the radio object. 325 * @pdev: DP pdev handle 326 */ 327 void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev); 328 329 /** 330 * dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter 331 * @pdev: DP pdev handle 332 */ 333 void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev); 334 335 /** 336 * dp_mon_filter_setup_rx_pkt_log_cbf() - Setup the Rx pktlog cbf mode filter 337 * in the radio object. 338 * @pdev: DP pdev handle 339 */ 340 void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev); 341 342 /** 343 * dp_mon_filter_reset_rx_pktlog_cbf() - Reset the Rx pktlog cbf mode filter 344 * @pdev: DP pdev handle 345 */ 346 void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev); 347 348 #ifdef BE_PKTLOG_SUPPORT 349 /** 350 * dp_mon_filter_setup_pktlog_hybrid() - Setup the pktlog hybrid mode filter 351 * in the radio object. 352 * @pdev: DP pdev handle 353 */ 354 void dp_mon_filter_setup_pktlog_hybrid(struct dp_pdev *pdev); 355 356 /** 357 * dp_mon_filter_reset_pktlog_hybrid() - Reset the pktlog hybrid mode filter 358 * @pdev: DP pdev handle 359 */ 360 void dp_mon_filter_reset_pktlog_hybrid(struct dp_pdev *pdev); 361 #endif 362 #endif /* WDI_EVENT_ENABLE */ 363 364 /** 365 * dp_mon_filter_set_status_cbf() - Set the cbf status filters 366 * @pdev: DP pdev handle 367 * @filter: Dp mon filters 368 * 369 * Return: void 370 */ 371 void dp_mon_filter_set_status_cbf(struct dp_pdev *pdev, 372 struct dp_mon_filter *filter); 373 374 /** 375 * dp_mon_filter_update() - Setup the RX & Tx monitor filter setting for a srng 376 * type 377 * @pdev: DP pdev handle 378 * 379 * Return: QDF_STATUS 380 */ 381 QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev); 382 383 /** 384 * dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in 385 * the radio object. 386 * @mon_pdev: monitor pdev handle 387 */ 388 void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev); 389 390 /** 391 * dp_mon_filter_alloc() - Allocate the filter objects to be stored in 392 * the radio object. 393 * @mon_pdev: monitor pdev handle 394 */ 395 struct dp_mon_filter **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev); 396 397 /** 398 * dp_mon_filter_show_filter() - Show the set filters 399 * @pdev: DP pdev handle 400 * @mode: The filter modes 401 * @tlv_filter: tlv filter 402 */ 403 void dp_mon_filter_show_filter(struct dp_mon_pdev *mon_pdev, 404 enum dp_mon_filter_mode mode, 405 struct dp_mon_filter *filter); 406 407 /** 408 * dp_mon_ht2_rx_ring_cfg() - Send the tlv config to fw for a srng_type 409 * based on target 410 * @soc: DP soc handle 411 * @pdev: DP pdev handle 412 * @srng_type: The srng type for which filter will be set 413 * @tlv_filter: tlv filter 414 */ 415 QDF_STATUS 416 dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc, 417 struct dp_pdev *pdev, 418 enum dp_mon_filter_srng_type srng_type, 419 struct htt_rx_ring_tlv_filter *tlv_filter); 420 421 /** 422 * dp_mon_filter_reset_mon_srng() 423 * @soc: DP SoC handle 424 * @pdev: DP pdev handle 425 * @mon_srng_type: Monitor srng type 426 */ 427 void 428 dp_mon_filter_reset_mon_srng(struct dp_soc *soc, struct dp_pdev *pdev, 429 enum dp_mon_filter_srng_type mon_srng_type); 430 431 /** 432 * dp_mon_filter_set_mon_cmn() - Setp the common mon filters 433 * @pdev: DP pdev handle 434 * @filter: DP mon filter 435 * 436 * Return: QDF_STATUS 437 */ 438 void dp_mon_filter_set_mon_cmn(struct dp_mon_pdev *mon_pdev, 439 struct dp_mon_filter *filter); 440 441 /** 442 * dp_mon_filter_set_status_cmn() - Setp the common status filters 443 * @pdev: DP pdev handle 444 * @filter: Dp mon filters 445 * 446 * Return: QDF_STATUS 447 */ 448 void dp_mon_filter_set_status_cmn(struct dp_mon_pdev *mon_pdev, 449 struct dp_mon_filter *filter); 450 451 /** 452 * dp_mon_filter_setup_mon_mode() - Setup the Rx monitor mode filter 453 * @pdev: DP pdev handle 454 */ 455 void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev); 456 457 /** 458 * dp_mon_filter_setup_tx_mon_mode() - Setup the Tx monitor mode filter 459 * @pdev: DP pdev handle 460 */ 461 void dp_mon_filter_setup_tx_mon_mode(struct dp_pdev *pdev); 462 463 /** 464 * dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter 465 * @pdev: DP pdev handle 466 */ 467 void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev); 468 469 /** 470 * dp_mon_filter_set_cbf_cmn() - Set the common cbf mode filters 471 * @pdev: DP pdev handle 472 * @filter: Dp mon filters 473 * 474 * Return: void 475 */ 476 void dp_mon_filter_set_cbf_cmn(struct dp_pdev *pdev, 477 struct dp_mon_filter *filter); 478 479 /** 480 * dp_tx_mon_filter_update() - Setup the tx monitor filter setting for a srng 481 * type 482 * @pdev: DP pdev handle 483 * 484 * Return: QDF_STATUS 485 */ 486 QDF_STATUS dp_tx_mon_filter_update(struct dp_pdev *pdev); 487 488 /** 489 * dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in 490 * the radio object. 491 * @pdev: DP pdev handle 492 */ 493 void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev); 494 495 /** 496 * dp_mon_filter_alloc() - Allocate the filter objects to be stored in 497 * the radio object. 498 * @mon_pdev: DP pdev handle 499 */ 500 struct dp_mon_filter **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev); 501 502 /* 503 * dp_mon_filter_h2t_setup () - Setup filter 504 * @soc: Dp soc handle 505 * @pdev: pdev handle 506 * @srng_type: srng type 507 * @filter: filter 508 */ 509 void dp_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev, 510 enum dp_mon_filter_srng_type srng_type, 511 struct dp_mon_filter *filter); 512 513 /** 514 * dp_mon_ht2_rx_ring_cfg () - Configure filter to HW 515 * @soc: Dp soc handle 516 * @pdev: Dp pdev handle 517 * @srng_type: SRNG type 518 * @tlv_filter: filter 519 */ 520 QDF_STATUS 521 dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc, 522 struct dp_pdev *pdev, 523 enum dp_mon_filter_srng_type srng_type, 524 struct htt_rx_ring_tlv_filter *tlv_filter); 525 #endif /* #ifndef _DP_MON_FILTER_H_ */ 526