xref: /wlan-dirver/qca-wifi-host-cmn/dp/wifi3.0/monitor/dp_mon_filter.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
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