xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/monitor/dp_mon_filter.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 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 #if defined(WLAN_PKT_CAPTURE_RX_2_0) || defined(CONFIG_WORD_BASED_TLV) || \
80 	defined(WLAN_FEATURE_LOCAL_PKT_CAPTURE)
81 #define DP_RX_MON_FILTER_SET_RX_HDR_LEN(dst, src) \
82 do { \
83 	(dst)->rx_hdr_length = src.rx_hdr_length; \
84 } while (0)
85 #else
86 #define DP_RX_MON_FILTER_SET_RX_HDR_LEN(dst, src)
87 #endif
88 
89 #define DP_MON_FILTER_PRINT(fmt, args ...) \
90 	QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_DEBUG, \
91 		  fmt, ## args)
92 
93 #define dp_mon_filter_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON_FILTER, params)
94 #define dp_mon_filter_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MON_FILTER, params)
95 #define dp_mon_filter_info(params...) \
96 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON_FILTER, ## params)
97 #define dp_mon_filter_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MON_FILTER, params)
98 
99 /**
100  * struct dp_mon_filter - Monitor TLV filter
101  * @valid: enable/disable TLV filter
102  * @tlv_filter: Rx ring TLV filter
103  */
104 struct dp_mon_filter {
105 	bool valid;
106 	struct htt_rx_ring_tlv_filter tlv_filter;
107 };
108 
109 /* rx hdr tlv dma lengths */
110 enum dp_rx_hdr_dma_length {
111 	/* default dma length(128B) */
112 	DEFAULT_RX_HDR_DMA_LENGTH = 0,
113 	/* dma length 64 bytes */
114 	RX_HDR_DMA_LENGTH_64B = 1,
115 	/* dma length 128 bytes */
116 	RX_HDR_DMA_LENGTH_128B = 2,
117 	/* dma length 256 bytes */
118 	RX_HDR_DMA_LENGTH_256B = 3,
119 };
120 
121 /*
122  * NB: intentionally not using kernel-doc comment because the kernel-doc
123  *     script does not handle the complex conditional compilation
124  * enum dp_mon_filter_mode - Different modes for SRNG filters
125  * @DP_MON_FILTER_ENHACHED_STATS_MODE: PPDU enhanced stats mode
126  * @DP_MON_FILTER_SMART_MONITOR_MODE: Smart monitor mode
127  * @DP_MON_FILTER_MCOPY_MODE: AM copy mode
128  * @DP_MON_FILTER_MONITOR_MODE: Monitor mode
129  * @DP_MON_FILTER_RX_CAPTURE_MODE: Rx Capture mode
130  * @DP_MON_FILTER_PKT_LOG_FULL_MODE: Packet log full mode
131  * @DP_MON_FILTER_PKT_LOG_LITE_MODE: Packet log lite mode
132  * @DP_MON_FILTER_PKT_LOG_CBF_MODE: Packet log cbf mode
133  * @DP_MON_FILTER_PKT_LOG_HYBRID_MODE: Packet log hybrid mode
134  * @DP_MON_FILTER_UNDECODED_METADATA_CAPTURE_MODE: Undecoded frame capture
135  * @DP_MON_FILTER_LITE_MON_MODE:
136  * @DP_MON_FILTER_MAX_MODE: max filter mode
137  */
138 enum dp_mon_filter_mode {
139 #ifdef QCA_ENHANCED_STATS_SUPPORT
140 	DP_MON_FILTER_ENHACHED_STATS_MODE,
141 #endif /* QCA_ENHANCED_STATS_SUPPORT */
142 #ifdef QCA_MCOPY_SUPPORT
143 	DP_MON_FILTER_MCOPY_MODE,
144 #endif /* QCA_MCOPY_SUPPORT */
145 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
146 	DP_MON_FILTER_SMART_MONITOR_MODE,
147 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
148 	DP_MON_FILTER_MONITOR_MODE,
149 #ifdef	WLAN_RX_PKT_CAPTURE_ENH
150 	DP_MON_FILTER_RX_CAPTURE_MODE,
151 #endif /* WLAN_RX_PKT_CAPTURE_ENH */
152 
153 #ifdef WDI_EVENT_ENABLE
154 	DP_MON_FILTER_PKT_LOG_FULL_MODE,
155 	DP_MON_FILTER_PKT_LOG_LITE_MODE,
156 	DP_MON_FILTER_PKT_LOG_CBF_MODE,
157 #ifdef BE_PKTLOG_SUPPORT
158 	DP_MON_FILTER_PKT_LOG_HYBRID_MODE,
159 #endif
160 #endif /* WDI_EVENT_ENABLE */
161 #ifdef QCA_UNDECODED_METADATA_SUPPORT
162 	DP_MON_FILTER_UNDECODED_METADATA_CAPTURE_MODE,
163 #endif
164 #ifdef QCA_SUPPORT_LITE_MONITOR
165 	DP_MON_FILTER_LITE_MON_MODE,
166 #endif /*QCA_SUPPORT_LITE_MONITOR*/
167 	DP_MON_FILTER_MAX_MODE
168 };
169 
170 /**
171  * enum dp_mon_filter_srng_type - Srng types dynamic mode filter
172  * settings.
173  * @DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF: RXDMA srng type
174  * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS: RxDMA monitor status srng
175  * @DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF: RxDMA destination srng
176  * @DP_MON_FILTER_SRNG_TYPE_RXMON_DEST: RxMON destination srng
177  * @DP_MON_FILTER_SRNG_TYPE_TXMON_DEST: TxMON destination srng
178  * @DP_MON_FILTER_SRNG_TYPE_MAX: Srng max type
179  */
180 enum dp_mon_filter_srng_type {
181 	DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF,
182 	DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS,
183 	DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF,
184 	DP_MON_FILTER_SRNG_TYPE_RXMON_DEST,
185 	DP_MON_FILTER_SRNG_TYPE_TXMON_DEST,
186 	DP_MON_FILTER_SRNG_TYPE_MAX
187 };
188 
189 /**
190  * enum dp_mon_filter_action - Action for storing the filters
191  * into the radio structure.
192  * @DP_MON_FILTER_CLEAR: Clears the filter for a mode
193  * @DP_MON_FILTER_SET: Set the filtes for a mode
194  */
195 enum dp_mon_filter_action {
196 	DP_MON_FILTER_CLEAR,
197 	DP_MON_FILTER_SET,
198 };
199 
200 #ifdef QCA_UNDECODED_METADATA_SUPPORT
201 /**
202  * enum dp_mon_fp_phy_err_buf_source - fp_phy_err_buf_src indicates the source
203  * ring selection for the FP PHY ERR status tlv.
204  * @WBM2RXDMA_BUF_SOURCE_RING: 0 - wbm2rxdma_buf_source_ring
205  * @FW2RXDMA_BUF_SOURCE_RING: 1 - fw2rxdma_buf_source_ring
206  * @SW2RXDMA_BUF_SOURCE_RING: 2 - sw2rxdma_buf_source_ring
207  * @NO_BUFFER_RING: 3 - no_buffer_ring
208  */
209 enum dp_mon_fp_phy_err_buf_source {
210 	WBM2RXDMA_BUF_SOURCE_RING,
211 	FW2RXDMA_BUF_SOURCE_RING,
212 	SW2RXDMA_BUF_SOURCE_RING,
213 	NO_BUFFER_RING
214 };
215 
216 /**
217  * enum dp_mon_fp_phy_err_buf_dest - fp_phy_err_buf_dest indicates the
218  * destination ring selection for the FP PHY ERR status tlv.
219  * @RXDMA_RELEASING_RING: 0 - rxdma_release_ring
220  * @RXDMA2FW_RING: 1 - rxdma2fw_ring
221  * @RXDMA2SW_RING: 2 - rxdma2sw_ring
222  * @RXDMA2REO_RING: 3 - rxdma2reo_ring
223  */
224 enum dp_mon_fp_phy_err_buf_dest {
225 	RXDMA_RELEASING_RING,
226 	RXDMA2FW_RING,
227 	RXDMA2SW_RING,
228 	RXDMA2REO_RING
229 };
230 #endif
231 
232 /**
233  * dp_mon_filters_reset() - reset all filters
234  * @pdev: DP pdev handle
235  */
236 void dp_mon_filters_reset(struct dp_pdev *pdev);
237 
238 #ifdef QCA_ENHANCED_STATS_SUPPORT
239 /**
240  * dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter
241  * @pdev: DP pdev handle
242  */
243 void dp_mon_filter_setup_enhanced_stats(struct dp_pdev *pdev);
244 
245 /***
246  * dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter
247  * @pdev: DP pdev handle
248  */
249 void dp_mon_filter_reset_enhanced_stats(struct dp_pdev *pdev);
250 #endif /* QCA_ENHANCED_STATS_SUPPORT */
251 
252 #ifdef QCA_MCOPY_SUPPORT
253 /**
254  * dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter
255  * @pdev: DP pdev handle
256  */
257 void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev);
258 
259 /**
260  * dp_mon_filter_reset_mcopy_mode() - Reset the m_copy mode filter
261  * @pdev: DP pdev handle
262  */
263 void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev);
264 #endif /* QCA_MCOPY_SUPPORT */
265 
266 #ifdef QCA_UNDECODED_METADATA_SUPPORT
267 /**
268  * dp_mon_filter_setup_undecoded_metadata_mode() - Setup the undecoded
269  *  metadata capture mode filter
270  * @pdev: DP pdev handle
271  */
272 void dp_mon_filter_setup_undecoded_metadata_mode(struct dp_pdev *pdev);
273 
274 /**
275  * dp_mon_filter_reset_undecoded_metadata_mode() - Reset the undecoded
276  * metadata capture mode filter
277  * @pdev: DP pdev handle
278  */
279 void dp_mon_filter_reset_undecoded_metadata_mode(struct dp_pdev *pdev);
280 #endif /* QCA_UNDECODED_METADATA_SUPPORT */
281 
282 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
283 /**
284  * dp_mon_filter_setup_smart_monitor() - Setup the smart monitor mode filter
285  * @pdev: DP pdev handle
286  */
287 void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev);
288 
289 /**
290  * dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter
291  * @pdev: DP pdev handle
292  */
293 void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev);
294 #endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
295 
296 /**
297  * dp_mon_filter_set_reset_mon_mac_filter() - Setup the monitor mac filter
298  * @pdev: DP pdev handle
299  * @val: indicating set/reset
300  */
301 void dp_mon_filter_set_reset_mon_mac_filter(struct dp_pdev *pdev, bool val);
302 
303 #ifdef  WLAN_RX_PKT_CAPTURE_ENH
304 /**
305  * dp_mon_filter_setup_rx_enh_capture() - Setup the Rx capture mode filters
306  * @pdev: DP pdev handle
307  */
308 void dp_mon_filter_setup_rx_enh_capture(struct dp_pdev *pdev);
309 
310 /**
311  * dp_mon_filter_reset_rx_enh_capture() - Reset the Rx capture mode filters
312  * @pdev: DP pdev handle
313  */
314 void dp_mon_filter_reset_rx_enh_capture(struct dp_pdev *pdev);
315 #endif /* WLAN_RX_PKT_CAPTURE_ENH */
316 
317 /**
318  * dp_mon_filter_setup_mon_mode() - Setup the Rx and Tx monitor mode filter
319  * @pdev: DP pdev handle
320  */
321 void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev);
322 
323 /**
324  * dp_mon_filter_setup_tx_mon_mode() - Setup the Tx monitor mode filter
325  * @pdev: DP pdev handle
326  */
327 void dp_mon_filter_setup_tx_mon_mode(struct dp_pdev *pdev);
328 
329 /**
330  * dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter
331  * @pdev: DP pdev handle
332  */
333 void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev);
334 
335 #ifdef WDI_EVENT_ENABLE
336 /**
337  * dp_mon_filter_setup_rx_pkt_log_full() - Setup the Rx pktlog full mode filter
338  * @pdev: DP pdev handle
339  */
340 void dp_mon_filter_setup_rx_pkt_log_full(struct dp_pdev *pdev);
341 
342 /**
343  * dp_mon_filter_reset_rx_pkt_log_full() - Reset the Rx pktlog full mode filter
344  * @pdev: DP pdev handle
345  */
346 void dp_mon_filter_reset_rx_pkt_log_full(struct dp_pdev *pdev);
347 
348 /**
349  * dp_mon_filter_setup_rx_pkt_log_lite() - Setup the Rx pktlog lite mode filter
350  * in the radio object.
351  * @pdev: DP pdev handle
352  */
353 void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev);
354 
355 /**
356  * dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter
357  * @pdev: DP pdev handle
358  */
359 void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev);
360 
361 /**
362  * dp_mon_filter_setup_rx_pkt_log_cbf() - Setup the Rx pktlog cbf mode filter
363  * in the radio object.
364  * @pdev: DP pdev handle
365  */
366 void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev);
367 
368 /**
369  * dp_mon_filter_reset_rx_pktlog_cbf() - Reset the Rx pktlog cbf mode filter
370  * @pdev: DP pdev handle
371  */
372 void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev);
373 
374 #ifdef BE_PKTLOG_SUPPORT
375 /**
376  * dp_mon_filter_setup_pktlog_hybrid() - Setup the pktlog hybrid mode filter
377  * in the radio object.
378  * @pdev: DP pdev handle
379  */
380 void dp_mon_filter_setup_pktlog_hybrid(struct dp_pdev *pdev);
381 
382 /**
383  * dp_mon_filter_reset_pktlog_hybrid() - Reset the pktlog hybrid mode filter
384  * @pdev: DP pdev handle
385  */
386 void dp_mon_filter_reset_pktlog_hybrid(struct dp_pdev *pdev);
387 #endif
388 #endif /* WDI_EVENT_ENABLE */
389 
390 /**
391  * dp_mon_filter_set_status_cbf() - Set the cbf status filters
392  * @pdev: DP pdev handle
393  * @filter: Dp mon filters
394  *
395  * Return: void
396  */
397 void dp_mon_filter_set_status_cbf(struct dp_pdev *pdev,
398 				  struct dp_mon_filter *filter);
399 
400 /**
401  * dp_mon_filter_update() - Setup the RX & Tx monitor filter setting for a srng
402  * type
403  * @pdev: DP pdev handle
404  *
405  * Return: QDF_STATUS
406  */
407 QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev);
408 
409 /**
410  * dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in
411  * the radio object.
412  * @mon_pdev: monitor pdev handle
413  */
414 void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev);
415 
416 /**
417  * dp_mon_filter_alloc() - Allocate the filter objects to be stored in
418  * the radio object.
419  * @mon_pdev: monitor pdev handle
420  */
421 struct dp_mon_filter  **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev);
422 
423 /**
424  * dp_mon_filter_show_filter() - Show the set filters
425  * @mon_pdev: DP pdev handle
426  * @mode: The filter modes
427  * @filter: tlv filter
428  */
429 void dp_mon_filter_show_filter(struct dp_mon_pdev *mon_pdev,
430 			       enum dp_mon_filter_mode mode,
431 			       struct dp_mon_filter *filter);
432 
433 /**
434  * dp_mon_ht2_rx_ring_cfg() - Send the tlv config to fw for a srng_type
435  * based on target
436  * @soc: DP soc handle
437  * @pdev: DP pdev handle
438  * @srng_type: The srng type for which filter will be set
439  * @tlv_filter: tlv filter
440  */
441 QDF_STATUS
442 dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc,
443 		       struct dp_pdev *pdev,
444 		       enum dp_mon_filter_srng_type srng_type,
445 		       struct htt_rx_ring_tlv_filter *tlv_filter);
446 
447 /**
448  * dp_mon_filter_reset_mon_srng()
449  * @soc: DP SoC handle
450  * @pdev: DP pdev handle
451  * @mon_srng_type: Monitor srng type
452  */
453 void
454 dp_mon_filter_reset_mon_srng(struct dp_soc *soc, struct dp_pdev *pdev,
455 			     enum dp_mon_filter_srng_type mon_srng_type);
456 
457 /**
458  * dp_mon_filter_set_mon_cmn() - Setp the common mon filters
459  * @pdev: DP pdev handle
460  * @filter: DP mon filter
461  *
462  * Return: None
463  */
464 void dp_mon_filter_set_mon_cmn(struct dp_pdev *pdev,
465 			       struct dp_mon_filter *filter);
466 
467 /**
468  * dp_mon_filter_set_status_cmn() - Setp the common status filters
469  * @mon_pdev: DP pdev handle
470  * @filter: Dp mon filters
471  *
472  * Return: QDF_STATUS
473  */
474 void dp_mon_filter_set_status_cmn(struct dp_mon_pdev *mon_pdev,
475 				  struct dp_mon_filter *filter);
476 
477 /**
478  * dp_mon_filter_setup_mon_mode() - Setup the Rx monitor mode filter
479  * @pdev: DP pdev handle
480  */
481 void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev);
482 
483 /**
484  * dp_mon_filter_setup_tx_mon_mode() - Setup the Tx monitor mode filter
485  * @pdev: DP pdev handle
486  */
487 void dp_mon_filter_setup_tx_mon_mode(struct dp_pdev *pdev);
488 
489 /**
490  * dp_mon_filter_reset_tx_mon_mode() - Reset the Tx monitor mode filter
491  * @pdev: DP pdev handle
492  */
493 void dp_mon_filter_reset_tx_mon_mode(struct dp_pdev *pdev);
494 
495 /**
496  * dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter
497  * @pdev: DP pdev handle
498  */
499 void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev);
500 
501 /**
502  * dp_mon_filter_set_cbf_cmn() - Set the common cbf mode filters
503  * @pdev: DP pdev handle
504  * @filter: Dp mon filters
505  *
506  * Return: void
507  */
508 void dp_mon_filter_set_cbf_cmn(struct dp_pdev *pdev,
509 			       struct dp_mon_filter *filter);
510 
511 /**
512  * dp_tx_mon_filter_update() - Setup the tx monitor filter setting for a srng
513  * type
514  * @pdev: DP pdev handle
515  *
516  * Return: QDF_STATUS
517  */
518 QDF_STATUS dp_tx_mon_filter_update(struct dp_pdev *pdev);
519 
520 /**
521  * dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in
522  * the radio object.
523  * @mon_pdev: DP pdev handle
524  */
525 void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev);
526 
527 /**
528  * dp_mon_filter_alloc() - Allocate the filter objects to be stored in
529  * the radio object.
530  * @mon_pdev: DP pdev handle
531  */
532 struct dp_mon_filter **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev);
533 
534 /**
535  * dp_mon_filter_h2t_setup() - Setup filter
536  * @soc: Dp soc handle
537  * @pdev: pdev handle
538  * @srng_type: srng type
539  * @filter: filter
540  */
541 void dp_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
542 			     enum dp_mon_filter_srng_type srng_type,
543 			     struct dp_mon_filter *filter);
544 
545 /**
546  * dp_mon_ht2_rx_ring_cfg() - Configure filter to HW
547  * @soc: Dp soc handle
548  * @pdev: Dp pdev handle
549  * @srng_type: SRNG type
550  * @tlv_filter: filter
551  */
552 QDF_STATUS
553 dp_mon_ht2_rx_ring_cfg(struct dp_soc *soc,
554 		       struct dp_pdev *pdev,
555 		       enum dp_mon_filter_srng_type srng_type,
556 		       struct htt_rx_ring_tlv_filter *tlv_filter);
557 
558 /**
559  * dp_rx_mon_hdr_length_set() - Setup rx monitor hdr tlv length
560  * @msg_word: msg word
561  * @tlv_filter: rx ring filter configuration
562  */
563 void
564 dp_rx_mon_hdr_length_set(uint32_t *msg_word,
565 			 struct htt_rx_ring_tlv_filter *tlv_filter);
566 
567 #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
568 /**
569  * dp_mon_start_local_pkt_capture() - start local packet capture
570  * @cdp_soc: cdp soc
571  * @pdev_id: pdev id
572  * @filter: filter configuration
573  */
574 QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
575 					  uint8_t pdev_id,
576 					  struct cdp_monitor_filter *filter);
577 
578 /**
579  * dp_mon_stop_local_pkt_capture() - stop local packet capture
580  * @cdp_soc: cdp soc
581  * @pdev_id: pdev id
582  */
583 QDF_STATUS dp_mon_stop_local_pkt_capture(struct cdp_soc_t *cdp_soc,
584 					 uint8_t pdev_id);
585 
586 /**
587  * dp_mon_set_local_pkt_capture_running() - set local packet capture running
588  * @mon_pdev: monitor pdev
589  * @val: value
590  */
591 QDF_STATUS dp_mon_set_local_pkt_capture_running(struct dp_mon_pdev *mon_pdev,
592 						bool val);
593 
594 /**
595  * dp_mon_get_is_local_pkt_capture_running() - get local packet capture running
596  * @cdp_soc: cdp soc
597  * @pdev_id: pdev id
598  */
599 bool dp_mon_get_is_local_pkt_capture_running(struct cdp_soc_t *cdp_soc,
600 					     uint8_t pdev_id);
601 #else
602 static inline
dp_mon_set_local_pkt_capture_running(struct dp_mon_pdev * mon_pdev,bool val)603 QDF_STATUS dp_mon_set_local_pkt_capture_running(struct dp_mon_pdev *mon_pdev,
604 						   bool val)
605 {
606 	return QDF_STATUS_E_NOSUPPORT;
607 }
608 
609 static inline
dp_mon_start_local_pkt_capture(struct cdp_soc_t * cdp_soc,uint8_t pdev_id,struct cdp_monitor_filter * filter)610 QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
611 					  uint8_t pdev_id,
612 					  struct cdp_monitor_filter *filter)
613 {
614 	return QDF_STATUS_E_NOSUPPORT;
615 }
616 
617 static inline
dp_mon_stop_local_pkt_capture(struct cdp_soc_t * cdp_soc,uint8_t pdev_id)618 QDF_STATUS dp_mon_stop_local_pkt_capture(struct cdp_soc_t *cdp_soc,
619 					 uint8_t pdev_id)
620 {
621 	return QDF_STATUS_E_NOSUPPORT;
622 }
623 
624 static inline
dp_mon_get_is_local_pkt_capture_running(struct cdp_soc_t * cdp_soc,uint8_t pdev_id)625 bool dp_mon_get_is_local_pkt_capture_running(struct cdp_soc_t *cdp_soc,
626 					     uint8_t pdev_id)
627 {
628 	return false;
629 }
630 
631 #endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
632 #endif /* #ifndef _DP_MON_FILTER_H_ */
633