xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/monitor/dp_mon.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name #ifndef _DP_MON_H_
19*5113495bSYour Name #define _DP_MON_H_
20*5113495bSYour Name 
21*5113495bSYour Name #include "qdf_trace.h"
22*5113495bSYour Name #include "dp_internal.h"
23*5113495bSYour Name #include "dp_types.h"
24*5113495bSYour Name #include "dp_htt.h"
25*5113495bSYour Name #include "dp_rx_mon.h"
26*5113495bSYour Name 
27*5113495bSYour Name #include <dp_mon_filter.h>
28*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
29*5113495bSYour Name #include "dp_tx_capture.h"
30*5113495bSYour Name #endif
31*5113495bSYour Name 
32*5113495bSYour Name #ifdef QCA_SUPPORT_LITE_MONITOR
33*5113495bSYour Name #include "dp_lite_mon.h"
34*5113495bSYour Name #endif
35*5113495bSYour Name 
36*5113495bSYour Name #define DP_INTR_POLL_TIMER_MS	5
37*5113495bSYour Name #define DP_HIST_TRACK_SIZE 50
38*5113495bSYour Name 
39*5113495bSYour Name #define MON_VDEV_TIMER_INIT 0x1
40*5113495bSYour Name #define MON_VDEV_TIMER_RUNNING 0x2
41*5113495bSYour Name 
42*5113495bSYour Name /* Budget to reap monitor status ring */
43*5113495bSYour Name #define DP_MON_REAP_BUDGET 1024
44*5113495bSYour Name #define MON_BUF_MIN_ENTRIES 64
45*5113495bSYour Name 
46*5113495bSYour Name /* 40MHZ BW 2 20MHZ sub bands */
47*5113495bSYour Name #define SUB40BW 2
48*5113495bSYour Name /* 80MHZ BW 4 20MHZ sub bands */
49*5113495bSYour Name #define SUB80BW 4
50*5113495bSYour Name /* 160MHZ BW 8 20MHZ sub bands */
51*5113495bSYour Name #define SUB160BW 8
52*5113495bSYour Name /* 320MHZ BW 16 20MHZ sub bands */
53*5113495bSYour Name #define SUB320BW 16
54*5113495bSYour Name 
55*5113495bSYour Name #define RNG_ERR		"SRNG setup failed for"
56*5113495bSYour Name #define dp_mon_info(params...) \
57*5113495bSYour Name 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON, ## params)
58*5113495bSYour Name #define dp_mon_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON, params)
59*5113495bSYour Name #define dp_mon_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MON, params)
60*5113495bSYour Name #define dp_mon_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MON, params)
61*5113495bSYour Name 
62*5113495bSYour Name #define dp_mon_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_MON, params)
63*5113495bSYour Name #define dp_mon_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_MON, params)
64*5113495bSYour Name #define dp_mon_info_rl(params...) \
65*5113495bSYour Name 	__QDF_TRACE_RL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON, ## params)
66*5113495bSYour Name 
67*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
68*5113495bSYour Name #define IS_LOCAL_PKT_CAPTURE_RUNNING(var, field) ((var)->field)
69*5113495bSYour Name #else
70*5113495bSYour Name #define IS_LOCAL_PKT_CAPTURE_RUNNING(var, field) 0
71*5113495bSYour Name #endif
72*5113495bSYour Name 
73*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
74*5113495bSYour Name typedef struct dp_peer_extd_tx_stats dp_mon_peer_tx_stats;
75*5113495bSYour Name typedef struct dp_peer_extd_rx_stats dp_mon_peer_rx_stats;
76*5113495bSYour Name 
77*5113495bSYour Name #define DP_UPDATE_MON_STATS(_tgtobj, _srcobj) \
78*5113495bSYour Name 	DP_UPDATE_EXTD_STATS(_tgtobj, _srcobj)
79*5113495bSYour Name #endif
80*5113495bSYour Name 
81*5113495bSYour Name #ifndef WLAN_TX_PKT_CAPTURE_ENH
82*5113495bSYour Name struct dp_pdev_tx_capture {
83*5113495bSYour Name };
84*5113495bSYour Name 
85*5113495bSYour Name struct dp_peer_tx_capture {
86*5113495bSYour Name };
87*5113495bSYour Name #endif
88*5113495bSYour Name 
89*5113495bSYour Name /**
90*5113495bSYour Name  * struct ieee80211_ctlframe_addr2 - control frame addr
91*5113495bSYour Name  * @i_fc: frame control
92*5113495bSYour Name  * @i_aidordur: aid or duration
93*5113495bSYour Name  * @i_addr1: address 1
94*5113495bSYour Name  * @i_addr2: address 2
95*5113495bSYour Name  */
96*5113495bSYour Name struct ieee80211_ctlframe_addr2 {
97*5113495bSYour Name 	uint8_t i_fc[2];
98*5113495bSYour Name 	uint8_t i_aidordur[2];
99*5113495bSYour Name 	uint8_t i_addr1[QDF_NET_MAC_ADDR_MAX_LEN];
100*5113495bSYour Name 	uint8_t i_addr2[QDF_NET_MAC_ADDR_MAX_LEN];
101*5113495bSYour Name } __packed;
102*5113495bSYour Name 
103*5113495bSYour Name #ifndef WLAN_TX_PKT_CAPTURE_ENH
104*5113495bSYour Name static inline void
dp_process_ppdu_stats_update_failed_bitmap(struct dp_pdev * pdev,void * data,uint32_t ppdu_id,uint32_t size)105*5113495bSYour Name dp_process_ppdu_stats_update_failed_bitmap(struct dp_pdev *pdev,
106*5113495bSYour Name 					   void *data,
107*5113495bSYour Name 					   uint32_t ppdu_id,
108*5113495bSYour Name 					   uint32_t size)
109*5113495bSYour Name {
110*5113495bSYour Name }
111*5113495bSYour Name #endif
112*5113495bSYour Name 
113*5113495bSYour Name #ifdef DP_CON_MON_MSI_ENABLED
dp_is_monitor_mode_using_poll(struct dp_soc * soc)114*5113495bSYour Name static inline bool dp_is_monitor_mode_using_poll(struct dp_soc *soc)
115*5113495bSYour Name {
116*5113495bSYour Name 	return false;
117*5113495bSYour Name }
118*5113495bSYour Name #else
dp_is_monitor_mode_using_poll(struct dp_soc * soc)119*5113495bSYour Name static inline bool dp_is_monitor_mode_using_poll(struct dp_soc *soc)
120*5113495bSYour Name {
121*5113495bSYour Name 	return true;
122*5113495bSYour Name }
123*5113495bSYour Name #endif
124*5113495bSYour Name 
125*5113495bSYour Name /**
126*5113495bSYour Name  * dp_mon_soc_attach() - DP monitor soc attach
127*5113495bSYour Name  * @soc: Datapath SOC handle
128*5113495bSYour Name  *
129*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
130*5113495bSYour Name  *         QDF_STATUS_E_NOMEM: Error
131*5113495bSYour Name  */
132*5113495bSYour Name QDF_STATUS dp_mon_soc_attach(struct dp_soc *soc);
133*5113495bSYour Name 
134*5113495bSYour Name /**
135*5113495bSYour Name  * dp_mon_soc_detach() - DP monitor soc detach
136*5113495bSYour Name  * @soc: Datapath SOC handle
137*5113495bSYour Name  *
138*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
139*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
140*5113495bSYour Name  */
141*5113495bSYour Name QDF_STATUS dp_mon_soc_detach(struct dp_soc *soc);
142*5113495bSYour Name 
143*5113495bSYour Name /**
144*5113495bSYour Name  * dp_mon_soc_cfg_init() - DP monitor soc config init
145*5113495bSYour Name  * @soc: Datapath SOC handle
146*5113495bSYour Name  *
147*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
148*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
149*5113495bSYour Name  */
150*5113495bSYour Name QDF_STATUS dp_mon_soc_cfg_init(struct dp_soc *soc);
151*5113495bSYour Name 
152*5113495bSYour Name /**
153*5113495bSYour Name  * dp_mon_pdev_attach() - DP monitor pdev attach
154*5113495bSYour Name  * @pdev: Datapath pdev handle
155*5113495bSYour Name  *
156*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
157*5113495bSYour Name  *         QDF_STATUS_E_NOMEM: Error
158*5113495bSYour Name  */
159*5113495bSYour Name QDF_STATUS dp_mon_pdev_attach(struct dp_pdev *pdev);
160*5113495bSYour Name 
161*5113495bSYour Name /**
162*5113495bSYour Name  * dp_mon_pdev_detach() - DP monitor pdev detach
163*5113495bSYour Name  * @pdev: Datapath pdev handle
164*5113495bSYour Name  *
165*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
166*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
167*5113495bSYour Name  */
168*5113495bSYour Name QDF_STATUS dp_mon_pdev_detach(struct dp_pdev *pdev);
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * dp_mon_pdev_init() - DP monitor pdev init
172*5113495bSYour Name  * @pdev: Datapath pdev handle
173*5113495bSYour Name  *
174*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
175*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
176*5113495bSYour Name  */
177*5113495bSYour Name QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev);
178*5113495bSYour Name 
179*5113495bSYour Name /**
180*5113495bSYour Name  * dp_mon_pdev_deinit() - DP monitor pdev deinit
181*5113495bSYour Name  * @pdev: Datapath pdev handle
182*5113495bSYour Name  *
183*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
184*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
185*5113495bSYour Name  */
186*5113495bSYour Name QDF_STATUS dp_mon_pdev_deinit(struct dp_pdev *pdev);
187*5113495bSYour Name 
188*5113495bSYour Name /**
189*5113495bSYour Name  * dp_mon_vdev_attach() - DP monitor vdev attach
190*5113495bSYour Name  * @vdev: Datapath vdev handle
191*5113495bSYour Name  *
192*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
193*5113495bSYour Name  *         QDF_STATUS_E_NOMEM: Error
194*5113495bSYour Name  */
195*5113495bSYour Name QDF_STATUS dp_mon_vdev_attach(struct dp_vdev *vdev);
196*5113495bSYour Name 
197*5113495bSYour Name /**
198*5113495bSYour Name  * dp_mon_vdev_detach() - DP monitor vdev detach
199*5113495bSYour Name  * @vdev: Datapath vdev handle
200*5113495bSYour Name  *
201*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
202*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
203*5113495bSYour Name  */
204*5113495bSYour Name QDF_STATUS dp_mon_vdev_detach(struct dp_vdev *vdev);
205*5113495bSYour Name 
206*5113495bSYour Name /**
207*5113495bSYour Name  * dp_mon_peer_attach() - DP monitor peer attach
208*5113495bSYour Name  * @peer: Datapath peer handle
209*5113495bSYour Name  *
210*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
211*5113495bSYour Name  *         QDF_STATUS_E_NOMEM: Error
212*5113495bSYour Name  */
213*5113495bSYour Name #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(FEATURE_PERPKT_INFO)
214*5113495bSYour Name QDF_STATUS dp_mon_peer_attach(struct dp_peer *peer);
215*5113495bSYour Name #else
216*5113495bSYour Name static inline
dp_mon_peer_attach(struct dp_peer * peer)217*5113495bSYour Name QDF_STATUS dp_mon_peer_attach(struct dp_peer *peer)
218*5113495bSYour Name {
219*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
220*5113495bSYour Name }
221*5113495bSYour Name #endif
222*5113495bSYour Name 
223*5113495bSYour Name /**
224*5113495bSYour Name  * dp_mon_peer_detach() - DP monitor peer detach
225*5113495bSYour Name  * @peer: Datapath peer handle
226*5113495bSYour Name  *
227*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
228*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
229*5113495bSYour Name  */
230*5113495bSYour Name QDF_STATUS dp_mon_peer_detach(struct dp_peer *peer);
231*5113495bSYour Name 
232*5113495bSYour Name /**
233*5113495bSYour Name  * dp_mon_peer_get_peerstats_ctx() - Get peer stats context from monitor peer
234*5113495bSYour Name  * @peer: Datapath peer handle
235*5113495bSYour Name  *
236*5113495bSYour Name  * Return: peerstats_ctx
237*5113495bSYour Name  */
238*5113495bSYour Name struct cdp_peer_rate_stats_ctx *dp_mon_peer_get_peerstats_ctx(struct
239*5113495bSYour Name 							      dp_peer *peer);
240*5113495bSYour Name 
241*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
242*5113495bSYour Name /**
243*5113495bSYour Name  * dp_mon_peer_reset_stats() - Reset monitor peer stats
244*5113495bSYour Name  * @peer: Datapath peer handle
245*5113495bSYour Name  *
246*5113495bSYour Name  * Return: none
247*5113495bSYour Name  */
248*5113495bSYour Name void dp_mon_peer_reset_stats(struct dp_peer *peer);
249*5113495bSYour Name 
250*5113495bSYour Name /**
251*5113495bSYour Name  * dp_mon_peer_get_stats() - Get monitor peer stats
252*5113495bSYour Name  *
253*5113495bSYour Name  * @peer: Datapath peer handle
254*5113495bSYour Name  * @arg: Pointer to stats struct
255*5113495bSYour Name  * @type: Update type
256*5113495bSYour Name  *
257*5113495bSYour Name  * Return: none
258*5113495bSYour Name  */
259*5113495bSYour Name void dp_mon_peer_get_stats(struct dp_peer *peer, void *arg,
260*5113495bSYour Name 			   enum cdp_stat_update_type type);
261*5113495bSYour Name 
262*5113495bSYour Name /**
263*5113495bSYour Name  * dp_mon_invalid_peer_update_pdev_stats() - Update pdev stats from
264*5113495bSYour Name  *					invalid monitor peer
265*5113495bSYour Name  * @pdev: Datapath pdev handle
266*5113495bSYour Name  *
267*5113495bSYour Name  * Return: none
268*5113495bSYour Name  */
269*5113495bSYour Name void dp_mon_invalid_peer_update_pdev_stats(struct dp_pdev *pdev);
270*5113495bSYour Name 
271*5113495bSYour Name /**
272*5113495bSYour Name  * dp_mon_peer_get_stats_param() - Get stats param value from monitor peer
273*5113495bSYour Name  * @peer: Datapath peer handle
274*5113495bSYour Name  * @type: Stats type requested
275*5113495bSYour Name  * @buf: Pointer to buffer for stats param
276*5113495bSYour Name  *
277*5113495bSYour Name  * Return: QDF_STATUS
278*5113495bSYour Name  */
279*5113495bSYour Name QDF_STATUS dp_mon_peer_get_stats_param(struct dp_peer *peer,
280*5113495bSYour Name 				       enum cdp_peer_stats_type type,
281*5113495bSYour Name 				       cdp_peer_stats_param_t *buf);
282*5113495bSYour Name #else
dp_mon_peer_reset_stats(struct dp_peer * peer)283*5113495bSYour Name static inline void dp_mon_peer_reset_stats(struct dp_peer *peer)
284*5113495bSYour Name {
285*5113495bSYour Name }
286*5113495bSYour Name 
287*5113495bSYour Name static inline
dp_mon_peer_get_stats(struct dp_peer * peer,void * arg,enum cdp_stat_update_type type)288*5113495bSYour Name void dp_mon_peer_get_stats(struct dp_peer *peer, void *arg,
289*5113495bSYour Name 			   enum cdp_stat_update_type type)
290*5113495bSYour Name {
291*5113495bSYour Name }
292*5113495bSYour Name 
dp_mon_invalid_peer_update_pdev_stats(struct dp_pdev * pdev)293*5113495bSYour Name static inline void dp_mon_invalid_peer_update_pdev_stats(struct dp_pdev *pdev)
294*5113495bSYour Name {
295*5113495bSYour Name }
296*5113495bSYour Name 
297*5113495bSYour Name static inline
dp_mon_peer_get_stats_param(struct dp_peer * peer,enum cdp_peer_stats_type type,cdp_peer_stats_param_t * buf)298*5113495bSYour Name QDF_STATUS dp_mon_peer_get_stats_param(struct dp_peer *peer,
299*5113495bSYour Name 				       enum cdp_peer_stats_type type,
300*5113495bSYour Name 				       cdp_peer_stats_param_t *buf)
301*5113495bSYour Name {
302*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
303*5113495bSYour Name }
304*5113495bSYour Name #endif
305*5113495bSYour Name 
306*5113495bSYour Name /**
307*5113495bSYour Name  * dp_mon_cdp_ops_register() - Register monitor cdp ops
308*5113495bSYour Name  * @soc: Datapath soc handle
309*5113495bSYour Name  *
310*5113495bSYour Name  */
311*5113495bSYour Name void dp_mon_cdp_ops_register(struct dp_soc *soc);
312*5113495bSYour Name 
313*5113495bSYour Name /**
314*5113495bSYour Name  * dp_mon_cdp_ops_deregister() - deregister monitor cdp ops
315*5113495bSYour Name  * @soc: Datapath soc handle
316*5113495bSYour Name  *
317*5113495bSYour Name  */
318*5113495bSYour Name void dp_mon_cdp_ops_deregister(struct dp_soc *soc);
319*5113495bSYour Name 
320*5113495bSYour Name /**
321*5113495bSYour Name  * dp_mon_intr_ops_deregister() - deregister monitor interrupt ops
322*5113495bSYour Name  * @soc: Datapath soc handle
323*5113495bSYour Name  *
324*5113495bSYour Name  */
325*5113495bSYour Name void dp_mon_intr_ops_deregister(struct dp_soc *soc);
326*5113495bSYour Name 
327*5113495bSYour Name /**
328*5113495bSYour Name  * dp_mon_feature_ops_deregister() - deregister monitor feature ops
329*5113495bSYour Name  * @soc: Datapath soc handle
330*5113495bSYour Name  *
331*5113495bSYour Name  */
332*5113495bSYour Name void dp_mon_feature_ops_deregister(struct dp_soc *soc);
333*5113495bSYour Name 
334*5113495bSYour Name /**
335*5113495bSYour Name  * dp_mon_ops_free() - free monitor ops
336*5113495bSYour Name  * @soc: Datapath soc handle
337*5113495bSYour Name  *
338*5113495bSYour Name  */
339*5113495bSYour Name void dp_mon_ops_free(struct dp_soc *soc);
340*5113495bSYour Name 
341*5113495bSYour Name /**
342*5113495bSYour Name  * dp_mon_ops_register() - Register monitor ops
343*5113495bSYour Name  * @soc: Datapath soc handle
344*5113495bSYour Name  *
345*5113495bSYour Name  */
346*5113495bSYour Name void dp_mon_ops_register(struct dp_soc *soc);
347*5113495bSYour Name 
348*5113495bSYour Name #ifndef DISABLE_MON_CONFIG
349*5113495bSYour Name void dp_mon_register_intr_ops(struct dp_soc *soc);
350*5113495bSYour Name #else
dp_mon_register_intr_ops(struct dp_soc * soc)351*5113495bSYour Name static inline void dp_mon_register_intr_ops(struct dp_soc *soc)
352*5113495bSYour Name {}
353*5113495bSYour Name #endif
354*5113495bSYour Name 
355*5113495bSYour Name /**
356*5113495bSYour Name  * dp_mon_htt_srng_setup() - DP mon htt srng setup
357*5113495bSYour Name  * @soc: Datapath soc handle
358*5113495bSYour Name  * @pdev: Datapath pdev handle
359*5113495bSYour Name  * @mac_id: mac id
360*5113495bSYour Name  * @mac_for_pdev: mac id mapped pdev
361*5113495bSYour Name  *
362*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
363*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
364*5113495bSYour Name  */
365*5113495bSYour Name QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
366*5113495bSYour Name 				 struct dp_pdev *pdev,
367*5113495bSYour Name 				 int mac_id,
368*5113495bSYour Name 				 int mac_for_pdev);
369*5113495bSYour Name 
370*5113495bSYour Name /**
371*5113495bSYour Name  * dp_config_debug_sniffer()- API to enable/disable debug sniffer
372*5113495bSYour Name  * @pdev: DP_PDEV handle
373*5113495bSYour Name  * @val: user provided value
374*5113495bSYour Name  *
375*5113495bSYour Name  * Return: 0 for success. nonzero for failure.
376*5113495bSYour Name  */
377*5113495bSYour Name #if defined(QCA_MCOPY_SUPPORT) || defined(QCA_TX_CAPTURE_SUPPORT)
378*5113495bSYour Name QDF_STATUS
379*5113495bSYour Name dp_config_debug_sniffer(struct dp_pdev *pdev, int val);
380*5113495bSYour Name #else
381*5113495bSYour Name static inline QDF_STATUS
dp_config_debug_sniffer(struct dp_pdev * pdev,int val)382*5113495bSYour Name dp_config_debug_sniffer(struct dp_pdev *pdev, int val) {
383*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
384*5113495bSYour Name }
385*5113495bSYour Name #endif /* QCA_MCOPY_SUPPORT || QCA_TX_CAPTURE_SUPPORT */
386*5113495bSYour Name 
387*5113495bSYour Name /**
388*5113495bSYour Name  * dp_mon_config_undecoded_metadata_capture()- API to enable/disable undecoded
389*5113495bSYour Name  *                                             metadata capture
390*5113495bSYour Name  * @pdev: DP_PDEV handle
391*5113495bSYour Name  * @val: user provided value
392*5113495bSYour Name  *
393*5113495bSYour Name  * Return: 0 for success. nonzero for failure.
394*5113495bSYour Name  */
395*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
396*5113495bSYour Name QDF_STATUS
397*5113495bSYour Name dp_mon_config_undecoded_metadata_capture(struct dp_pdev *pdev, int val);
398*5113495bSYour Name #else
399*5113495bSYour Name static inline QDF_STATUS
dp_mon_config_undecoded_metadata_capture(struct dp_pdev * pdev,int val)400*5113495bSYour Name dp_mon_config_undecoded_metadata_capture(struct dp_pdev *pdev, int val) {
401*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
402*5113495bSYour Name }
403*5113495bSYour Name #endif /* QCA_UNDECODED_METADATA_SUPPORT */
404*5113495bSYour Name 
405*5113495bSYour Name /**
406*5113495bSYour Name  * dp_htt_ppdu_stats_attach() - attach resources for HTT PPDU stats processing
407*5113495bSYour Name  * @pdev: Datapath PDEV handle
408*5113495bSYour Name  *
409*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
410*5113495bSYour Name  *         QDF_STATUS_E_NOMEM: Error
411*5113495bSYour Name  */
412*5113495bSYour Name QDF_STATUS dp_htt_ppdu_stats_attach(struct dp_pdev *pdev);
413*5113495bSYour Name 
414*5113495bSYour Name /**
415*5113495bSYour Name  * dp_htt_ppdu_stats_detach() - detach stats resources
416*5113495bSYour Name  * @pdev: Datapath PDEV handle
417*5113495bSYour Name  *
418*5113495bSYour Name  * Return: void
419*5113495bSYour Name  */
420*5113495bSYour Name void dp_htt_ppdu_stats_detach(struct dp_pdev *pdev);
421*5113495bSYour Name 
422*5113495bSYour Name /**
423*5113495bSYour Name  * dp_set_bpr_enable() - API to enable/disable bpr feature
424*5113495bSYour Name  * @pdev: DP_PDEV handle.
425*5113495bSYour Name  * @val: Provided value.
426*5113495bSYour Name  *
427*5113495bSYour Name  * Return: 0 for success. nonzero for failure.
428*5113495bSYour Name  */
429*5113495bSYour Name #ifdef QCA_SUPPORT_BPR
430*5113495bSYour Name QDF_STATUS
431*5113495bSYour Name dp_set_bpr_enable(struct dp_pdev *pdev, int val);
432*5113495bSYour Name #endif
433*5113495bSYour Name 
434*5113495bSYour Name #ifdef ATH_SUPPORT_NAC
435*5113495bSYour Name int dp_set_filter_neigh_peers(struct dp_pdev *pdev,
436*5113495bSYour Name 				     bool val);
437*5113495bSYour Name #endif /* ATH_SUPPORT_NAC */
438*5113495bSYour Name 
439*5113495bSYour Name #ifdef WLAN_ATF_ENABLE
440*5113495bSYour Name void dp_set_atf_stats_enable(struct dp_pdev *pdev, bool value);
441*5113495bSYour Name #endif
442*5113495bSYour Name 
443*5113495bSYour Name /**
444*5113495bSYour Name  * dp_mon_set_bsscolor() - sets bsscolor for tx capture
445*5113495bSYour Name  * @pdev: Datapath PDEV handle
446*5113495bSYour Name  * @bsscolor: new bsscolor
447*5113495bSYour Name  */
448*5113495bSYour Name void
449*5113495bSYour Name dp_mon_set_bsscolor(struct dp_pdev *pdev, uint8_t bsscolor);
450*5113495bSYour Name 
451*5113495bSYour Name /**
452*5113495bSYour Name  * dp_pdev_get_filter_ucast_data() - get DP PDEV monitor ucast filter
453*5113495bSYour Name  * @pdev_handle: Datapath PDEV handle
454*5113495bSYour Name  *
455*5113495bSYour Name  * Return: true on ucast filter flag set
456*5113495bSYour Name  */
457*5113495bSYour Name bool dp_pdev_get_filter_ucast_data(struct cdp_pdev *pdev_handle);
458*5113495bSYour Name 
459*5113495bSYour Name /**
460*5113495bSYour Name  * dp_pdev_get_filter_mcast_data() - get DP PDEV monitor mcast filter
461*5113495bSYour Name  * @pdev_handle: Datapath PDEV handle
462*5113495bSYour Name  *
463*5113495bSYour Name  * Return: true on mcast filter flag set
464*5113495bSYour Name  */
465*5113495bSYour Name bool dp_pdev_get_filter_mcast_data(struct cdp_pdev *pdev_handle);
466*5113495bSYour Name 
467*5113495bSYour Name /**
468*5113495bSYour Name  * dp_pdev_get_filter_non_data() - get DP PDEV monitor non_data filter
469*5113495bSYour Name  * @pdev_handle: Datapath PDEV handle
470*5113495bSYour Name  *
471*5113495bSYour Name  * Return: true on non data filter flag set
472*5113495bSYour Name  */
473*5113495bSYour Name bool dp_pdev_get_filter_non_data(struct cdp_pdev *pdev_handle);
474*5113495bSYour Name 
475*5113495bSYour Name /**
476*5113495bSYour Name  * dp_set_pktlog_wifi3() - attach txrx vdev
477*5113495bSYour Name  * @pdev: Datapath PDEV handle
478*5113495bSYour Name  * @event: which event's notifications are being subscribed to
479*5113495bSYour Name  * @enable: WDI event subscribe or not. (True or False)
480*5113495bSYour Name  *
481*5113495bSYour Name  * Return: Success, NULL on failure
482*5113495bSYour Name  */
483*5113495bSYour Name #ifdef WDI_EVENT_ENABLE
484*5113495bSYour Name int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
485*5113495bSYour Name 			bool enable);
486*5113495bSYour Name #endif
487*5113495bSYour Name 
488*5113495bSYour Name /* MCL specific functions */
489*5113495bSYour Name #if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
490*5113495bSYour Name /**
491*5113495bSYour Name  * dp_pktlogmod_exit() - API to cleanup pktlog info
492*5113495bSYour Name  * @pdev: Pdev handle
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: none
495*5113495bSYour Name  */
496*5113495bSYour Name void dp_pktlogmod_exit(struct dp_pdev *pdev);
497*5113495bSYour Name #else
498*5113495bSYour Name static inline
dp_pktlogmod_exit(struct dp_pdev * handle)499*5113495bSYour Name void dp_pktlogmod_exit(struct dp_pdev *handle)
500*5113495bSYour Name {
501*5113495bSYour Name }
502*5113495bSYour Name #endif
503*5113495bSYour Name 
504*5113495bSYour Name #ifdef QCA_MONITOR_PKT_SUPPORT
505*5113495bSYour Name /**
506*5113495bSYour Name  * dp_vdev_set_monitor_mode_buf_rings() - set monitor mode buf rings
507*5113495bSYour Name  * @pdev: DP pdev object
508*5113495bSYour Name  *
509*5113495bSYour Name  * Allocate SW descriptor pool, buffers, link descriptor memory
510*5113495bSYour Name  * Initialize monitor related SRNGs
511*5113495bSYour Name  *
512*5113495bSYour Name  * Return: QDF_STATUS
513*5113495bSYour Name  */
514*5113495bSYour Name QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
515*5113495bSYour Name 
516*5113495bSYour Name /**
517*5113495bSYour Name  * dp_vdev_set_monitor_mode_rings() - set monitor mode rings
518*5113495bSYour Name  * @pdev: DP pdev object
519*5113495bSYour Name  * @delayed_replenish:
520*5113495bSYour Name  *
521*5113495bSYour Name  * Allocate SW descriptor pool, buffers, link descriptor memory
522*5113495bSYour Name  * Initialize monitor related SRNGs
523*5113495bSYour Name  *
524*5113495bSYour Name  * Return: QDF_STATUS
525*5113495bSYour Name  */
526*5113495bSYour Name QDF_STATUS dp_vdev_set_monitor_mode_rings(struct dp_pdev *pdev,
527*5113495bSYour Name 					  uint8_t delayed_replenish);
528*5113495bSYour Name 
529*5113495bSYour Name #else
530*5113495bSYour Name static inline QDF_STATUS
dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev * pdev)531*5113495bSYour Name dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
532*5113495bSYour Name {
533*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
534*5113495bSYour Name }
535*5113495bSYour Name 
536*5113495bSYour Name static inline QDF_STATUS
dp_vdev_set_monitor_mode_rings(struct dp_pdev * pdev,uint8_t delayed_replenish)537*5113495bSYour Name dp_vdev_set_monitor_mode_rings(struct dp_pdev *pdev,
538*5113495bSYour Name 			       uint8_t delayed_replenish)
539*5113495bSYour Name {
540*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
541*5113495bSYour Name }
542*5113495bSYour Name #endif
543*5113495bSYour Name 
544*5113495bSYour Name #if defined(WDI_EVENT_ENABLE) &&\
545*5113495bSYour Name 	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG) ||\
546*5113495bSYour Name 	 defined(WLAN_FEATURE_PKT_CAPTURE_V2))
547*5113495bSYour Name /**
548*5113495bSYour Name  * dp_ppdu_stats_ind_handler() - PPDU stats msg handler
549*5113495bSYour Name  * @soc:	 HTT SOC handle
550*5113495bSYour Name  * @msg_word:    Pointer to payload
551*5113495bSYour Name  * @htt_t2h_msg: HTT msg nbuf
552*5113495bSYour Name  *
553*5113495bSYour Name  * Return: True if buffer should be freed by caller.
554*5113495bSYour Name  */
555*5113495bSYour Name bool dp_ppdu_stats_ind_handler(struct htt_soc *soc,
556*5113495bSYour Name 			       uint32_t *msg_word,
557*5113495bSYour Name 			       qdf_nbuf_t htt_t2h_msg);
558*5113495bSYour Name #endif
559*5113495bSYour Name 
560*5113495bSYour Name #if defined(QCA_ENHANCED_STATS_SUPPORT) || \
561*5113495bSYour Name 	(!defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_PKT_CAPTURE_TX_2_0))
562*5113495bSYour Name /**
563*5113495bSYour Name  * dp_ppdu_desc_deliver(): Function to deliver Tx PPDU status descriptor
564*5113495bSYour Name  * to upper layer
565*5113495bSYour Name  * @pdev: DP pdev handle
566*5113495bSYour Name  * @ppdu_info: per PPDU TLV descriptor
567*5113495bSYour Name  *
568*5113495bSYour Name  * return: void
569*5113495bSYour Name  */
570*5113495bSYour Name void dp_ppdu_desc_deliver(struct dp_pdev *pdev, struct ppdu_info *ppdu_info);
571*5113495bSYour Name #endif
572*5113495bSYour Name 
573*5113495bSYour Name #ifdef QCA_RSSI_DB2DBM
574*5113495bSYour Name /**
575*5113495bSYour Name  * dp_mon_pdev_params_rssi_dbm_conv() --> to set rssi in dbm conversion
576*5113495bSYour Name  *						params into monitor pdev.
577*5113495bSYour Name  * @cdp_soc: dp soc handle.
578*5113495bSYour Name  * @params: cdp_rssi_db2dbm_param_dp structure value.
579*5113495bSYour Name  *
580*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if value set successfully
581*5113495bSYour Name  *         QDF_STATUS_E_INVAL false if error
582*5113495bSYour Name  */
583*5113495bSYour Name QDF_STATUS
584*5113495bSYour Name dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc,
585*5113495bSYour Name 				 struct cdp_rssi_db2dbm_param_dp *params);
586*5113495bSYour Name #else
587*5113495bSYour Name static inline QDF_STATUS
dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t * cdp_soc,struct cdp_rssi_db2dbm_param_dp * params)588*5113495bSYour Name dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc,
589*5113495bSYour Name 				 struct cdp_rssi_db2dbm_param_dp *params)
590*5113495bSYour Name {
591*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
592*5113495bSYour Name }
593*5113495bSYour Name #endif /* QCA_RSSI_DB2DBM */
594*5113495bSYour Name 
595*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG)
596*5113495bSYour Name typedef	QDF_STATUS (*mon_pdev_htt_srng_setup_fp)(struct dp_soc *soc,
597*5113495bSYour Name 						 struct dp_pdev *pdev,
598*5113495bSYour Name 						 int mac_id,
599*5113495bSYour Name 						 int mac_for_pdev);
600*5113495bSYour Name #endif
601*5113495bSYour Name typedef	QDF_STATUS (*mon_rings_alloc_fp)(struct dp_pdev *pdev);
602*5113495bSYour Name typedef	void (*mon_rings_free_fp)(struct dp_pdev *pdev);
603*5113495bSYour Name typedef	QDF_STATUS (*mon_rings_init_fp)(struct dp_pdev *pdev);
604*5113495bSYour Name typedef	void (*mon_rings_deinit_fp)(struct dp_pdev *pdev);
605*5113495bSYour Name typedef	QDF_STATUS (*mon_soc_attach_fp)(struct dp_soc *soc);
606*5113495bSYour Name typedef	QDF_STATUS (*mon_soc_detach_fp)(struct dp_soc *soc);
607*5113495bSYour Name typedef	QDF_STATUS (*mon_soc_init_fp)(struct dp_soc *soc);
608*5113495bSYour Name typedef	void (*mon_soc_deinit_fp)(struct dp_soc *soc);
609*5113495bSYour Name 
610*5113495bSYour Name struct dp_mon_ops {
611*5113495bSYour Name 	QDF_STATUS (*mon_soc_cfg_init)(struct dp_soc *soc);
612*5113495bSYour Name 	mon_soc_attach_fp mon_soc_attach[2];
613*5113495bSYour Name 	mon_soc_detach_fp mon_soc_detach[2];
614*5113495bSYour Name 	mon_soc_init_fp mon_soc_init[2];
615*5113495bSYour Name 	mon_soc_deinit_fp mon_soc_deinit[2];
616*5113495bSYour Name 	QDF_STATUS (*mon_pdev_alloc)(struct dp_pdev *pdev);
617*5113495bSYour Name 	void (*mon_pdev_free)(struct dp_pdev *pdev);
618*5113495bSYour Name 	QDF_STATUS (*mon_pdev_attach)(struct dp_pdev *pdev);
619*5113495bSYour Name 	QDF_STATUS (*mon_pdev_detach)(struct dp_pdev *pdev);
620*5113495bSYour Name 	QDF_STATUS (*mon_pdev_init)(struct dp_pdev *pdev);
621*5113495bSYour Name 	QDF_STATUS (*mon_pdev_deinit)(struct dp_pdev *pdev);
622*5113495bSYour Name 	QDF_STATUS (*mon_vdev_attach)(struct dp_vdev *vdev);
623*5113495bSYour Name 	QDF_STATUS (*mon_vdev_detach)(struct dp_vdev *vdev);
624*5113495bSYour Name 	QDF_STATUS (*mon_peer_attach)(struct dp_peer *peer);
625*5113495bSYour Name 	QDF_STATUS (*mon_peer_detach)(struct dp_peer *peer);
626*5113495bSYour Name 	struct cdp_peer_rate_stats_ctx *(*mon_peer_get_peerstats_ctx)(struct
627*5113495bSYour Name 								dp_peer *peer);
628*5113495bSYour Name 	void (*mon_peer_reset_stats)(struct dp_peer *peer);
629*5113495bSYour Name 	void (*mon_peer_get_stats)(struct dp_peer *peer, void *arg,
630*5113495bSYour Name 				   enum cdp_stat_update_type type);
631*5113495bSYour Name 	void (*mon_invalid_peer_update_pdev_stats)(struct dp_pdev *pdev);
632*5113495bSYour Name 	QDF_STATUS (*mon_peer_get_stats_param)(struct dp_peer *peer,
633*5113495bSYour Name 					       enum cdp_peer_stats_type type,
634*5113495bSYour Name 					       cdp_peer_stats_param_t *buf);
635*5113495bSYour Name 	QDF_STATUS (*mon_config_debug_sniffer)(struct dp_pdev *pdev, int val);
636*5113495bSYour Name 	void (*mon_flush_rings)(struct dp_soc *soc);
637*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG)
638*5113495bSYour Name 	mon_pdev_htt_srng_setup_fp mon_pdev_htt_srng_setup[2];
639*5113495bSYour Name 	QDF_STATUS (*mon_soc_htt_srng_setup)(struct dp_soc *soc);
640*5113495bSYour Name #endif
641*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
642*5113495bSYour Name 	uint32_t (*mon_drop_packets_for_mac)(struct dp_pdev *pdev,
643*5113495bSYour Name 					     uint32_t mac_id,
644*5113495bSYour Name 					     uint32_t quota,
645*5113495bSYour Name 					     bool force_flush);
646*5113495bSYour Name #endif
647*5113495bSYour Name #if defined(DP_CON_MON)
648*5113495bSYour Name 	void (*mon_service_rings)(struct  dp_soc *soc, uint32_t quota);
649*5113495bSYour Name #endif
650*5113495bSYour Name #ifndef DISABLE_MON_CONFIG
651*5113495bSYour Name 	uint32_t (*mon_rx_process)(struct dp_soc *soc,
652*5113495bSYour Name 				   struct dp_intr *int_ctx,
653*5113495bSYour Name 				   uint32_t mac_id,
654*5113495bSYour Name 				   uint32_t quota);
655*5113495bSYour Name 	uint32_t (*mon_tx_process)(struct dp_soc *soc,
656*5113495bSYour Name 				   struct dp_intr *int_ctx,
657*5113495bSYour Name 				   uint32_t mac_id,
658*5113495bSYour Name 				   uint32_t quota);
659*5113495bSYour Name 	void (*print_txmon_ring_stat)(struct dp_pdev *pdev);
660*5113495bSYour Name #endif
661*5113495bSYour Name 	void (*mon_peer_tx_init)(struct dp_pdev *pdev, struct dp_peer *peer);
662*5113495bSYour Name 	void (*mon_peer_tx_cleanup)(struct dp_vdev *vdev,
663*5113495bSYour Name 				    struct dp_peer *peer);
664*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
665*5113495bSYour Name 	void (*mon_peer_tid_peer_id_update)(struct dp_peer *peer,
666*5113495bSYour Name 					    uint16_t peer_id);
667*5113495bSYour Name 	void (*mon_tx_ppdu_stats_attach)(struct dp_pdev *pdev);
668*5113495bSYour Name 	void (*mon_tx_ppdu_stats_detach)(struct dp_pdev *pdev);
669*5113495bSYour Name 	QDF_STATUS (*mon_tx_capture_debugfs_init)(struct dp_pdev *pdev);
670*5113495bSYour Name 	void (*mon_peer_tx_capture_filter_check)(struct dp_pdev *pdev,
671*5113495bSYour Name 						 struct dp_peer *peer);
672*5113495bSYour Name 	QDF_STATUS (*mon_tx_add_to_comp_queue)(struct dp_soc *soc,
673*5113495bSYour Name 					       struct dp_tx_desc_s *desc,
674*5113495bSYour Name 					       struct hal_tx_completion_status *ts,
675*5113495bSYour Name 					       uint16_t peer_id);
676*5113495bSYour Name 	QDF_STATUS (*mon_update_msdu_to_list)(struct dp_soc *soc,
677*5113495bSYour Name 					      struct dp_pdev *pdev,
678*5113495bSYour Name 					      struct dp_peer *peer,
679*5113495bSYour Name 					      struct hal_tx_completion_status *ts,
680*5113495bSYour Name 					      qdf_nbuf_t netbuf);
681*5113495bSYour Name 	QDF_STATUS
682*5113495bSYour Name 	(*mon_peer_tx_capture_get_stats)(struct dp_peer *peer,
683*5113495bSYour Name 					 struct cdp_peer_tx_capture_stats *sts);
684*5113495bSYour Name 	QDF_STATUS
685*5113495bSYour Name 	(*mon_pdev_tx_capture_get_stats)(struct dp_pdev *pdev,
686*5113495bSYour Name 					 struct cdp_pdev_tx_capture_stats *sts);
687*5113495bSYour Name #endif
688*5113495bSYour Name #if defined(WDI_EVENT_ENABLE) &&\
689*5113495bSYour Name 	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG) ||\
690*5113495bSYour Name 	 defined(WLAN_FEATURE_PKT_CAPTURE_V2))
691*5113495bSYour Name 	bool (*mon_ppdu_stats_ind_handler)(struct htt_soc *soc,
692*5113495bSYour Name 					   uint32_t *msg_word,
693*5113495bSYour Name 					   qdf_nbuf_t htt_t2h_msg);
694*5113495bSYour Name #endif
695*5113495bSYour Name 	QDF_STATUS (*mon_htt_ppdu_stats_attach)(struct dp_pdev *pdev);
696*5113495bSYour Name 	void (*mon_htt_ppdu_stats_detach)(struct dp_pdev *pdev);
697*5113495bSYour Name 	void (*mon_print_pdev_rx_mon_stats)(struct dp_pdev *pdev);
698*5113495bSYour Name 
699*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
700*5113495bSYour Name 	void (*mon_print_pdev_tx_capture_stats)(struct dp_pdev *pdev);
701*5113495bSYour Name 	QDF_STATUS (*mon_config_enh_tx_capture)(struct dp_pdev *pdev,
702*5113495bSYour Name 						uint8_t val);
703*5113495bSYour Name 	QDF_STATUS (*mon_tx_peer_filter)(struct dp_pdev *pdev_handle,
704*5113495bSYour Name 					 struct dp_peer *peer_handle,
705*5113495bSYour Name 					 uint8_t is_tx_pkt_cap_enable,
706*5113495bSYour Name 					 uint8_t *peer_mac);
707*5113495bSYour Name #endif
708*5113495bSYour Name #ifdef WLAN_RX_PKT_CAPTURE_ENH
709*5113495bSYour Name 	QDF_STATUS (*mon_config_enh_rx_capture)(struct dp_pdev *pdev,
710*5113495bSYour Name 						uint8_t val);
711*5113495bSYour Name #endif
712*5113495bSYour Name #ifdef QCA_SUPPORT_BPR
713*5113495bSYour Name 	QDF_STATUS (*mon_set_bpr_enable)(struct dp_pdev *pdev, int val);
714*5113495bSYour Name #endif
715*5113495bSYour Name #ifdef ATH_SUPPORT_NAC
716*5113495bSYour Name 	int (*mon_set_filter_neigh_peers)(struct dp_pdev *pdev, bool val);
717*5113495bSYour Name #endif
718*5113495bSYour Name #ifdef WLAN_ATF_ENABLE
719*5113495bSYour Name 	void (*mon_set_atf_stats_enable)(struct dp_pdev *pdev, bool value);
720*5113495bSYour Name #endif
721*5113495bSYour Name 	void (*mon_set_bsscolor)(struct dp_pdev *pdev, uint8_t bsscolor);
722*5113495bSYour Name 	bool (*mon_pdev_get_filter_ucast_data)(struct cdp_pdev *pdev_handle);
723*5113495bSYour Name 	bool (*mon_pdev_get_filter_non_data)(struct cdp_pdev *pdev_handle);
724*5113495bSYour Name 	bool (*mon_pdev_get_filter_mcast_data)(struct cdp_pdev *pdev_handle);
725*5113495bSYour Name #ifdef WDI_EVENT_ENABLE
726*5113495bSYour Name 	int (*mon_set_pktlog_wifi3)(struct dp_pdev *pdev, uint32_t event,
727*5113495bSYour Name 				    bool enable);
728*5113495bSYour Name #endif
729*5113495bSYour Name #if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
730*5113495bSYour Name 	void (*mon_pktlogmod_exit)(struct dp_pdev *pdev);
731*5113495bSYour Name #endif
732*5113495bSYour Name 	QDF_STATUS (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
733*5113495bSYour Name 	QDF_STATUS (*mon_vdev_set_monitor_mode_rings)(struct dp_pdev *pdev,
734*5113495bSYour Name 						      uint8_t delayed_replenish);
735*5113495bSYour Name 	void (*mon_neighbour_peers_detach)(struct dp_pdev *pdev);
736*5113495bSYour Name #ifdef FEATURE_NAC_RSSI
737*5113495bSYour Name 	QDF_STATUS (*mon_filter_neighbour_peer)(struct dp_pdev *pdev,
738*5113495bSYour Name 						uint8_t *rx_pkt_hdr);
739*5113495bSYour Name #endif
740*5113495bSYour Name 	void (*mon_vdev_timer_init)(struct dp_soc *soc);
741*5113495bSYour Name 	void (*mon_vdev_timer_start)(struct dp_soc *soc);
742*5113495bSYour Name 	bool (*mon_vdev_timer_stop)(struct dp_soc *soc);
743*5113495bSYour Name 	void (*mon_vdev_timer_deinit)(struct dp_soc *soc);
744*5113495bSYour Name 	void (*mon_reap_timer_init)(struct dp_soc *soc);
745*5113495bSYour Name 	bool (*mon_reap_timer_start)(struct dp_soc *soc,
746*5113495bSYour Name 				     enum cdp_mon_reap_source source);
747*5113495bSYour Name 	bool (*mon_reap_timer_stop)(struct dp_soc *soc,
748*5113495bSYour Name 				    enum cdp_mon_reap_source source);
749*5113495bSYour Name 	void (*mon_reap_timer_deinit)(struct dp_soc *soc);
750*5113495bSYour Name #ifdef QCA_MCOPY_SUPPORT
751*5113495bSYour Name 	QDF_STATUS (*mon_mcopy_check_deliver)(struct dp_pdev *pdev,
752*5113495bSYour Name 					      uint16_t peer_id,
753*5113495bSYour Name 					      uint32_t ppdu_id,
754*5113495bSYour Name 					      uint8_t first_msdu);
755*5113495bSYour Name #endif
756*5113495bSYour Name 	void (*mon_neighbour_peer_add_ast)(struct dp_pdev *pdev,
757*5113495bSYour Name 					   struct dp_peer *ta_peer,
758*5113495bSYour Name 					   uint8_t *mac_addr,
759*5113495bSYour Name 					   qdf_nbuf_t nbuf,
760*5113495bSYour Name 					   uint32_t flags);
761*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
762*5113495bSYour Name 	void (*mon_filter_setup_enhanced_stats)(struct dp_pdev *pdev);
763*5113495bSYour Name 	void (*mon_filter_reset_enhanced_stats)(struct dp_pdev *pdev);
764*5113495bSYour Name 	void (*mon_tx_stats_update)(struct dp_mon_peer *mon_peer,
765*5113495bSYour Name 				    struct cdp_tx_completion_ppdu_user *ppdu);
766*5113495bSYour Name 	void (*mon_tx_enable_enhanced_stats)(struct dp_pdev *pdev);
767*5113495bSYour Name 	void (*mon_tx_disable_enhanced_stats)(struct dp_pdev *pdev);
768*5113495bSYour Name 	void (*mon_ppdu_desc_deliver)(struct dp_pdev *pdev,
769*5113495bSYour Name 				      struct ppdu_info *ppdu_info);
770*5113495bSYour Name 	bool (*mon_ppdu_stats_feat_enable_check)(struct dp_pdev *pdev);
771*5113495bSYour Name 	void (*mon_ppdu_desc_notify)(struct dp_pdev *pdev, qdf_nbuf_t nbuf);
772*5113495bSYour Name #endif
773*5113495bSYour Name #ifdef QCA_MCOPY_SUPPORT
774*5113495bSYour Name 	void (*mon_filter_setup_mcopy_mode)(struct dp_pdev *pdev);
775*5113495bSYour Name 	void (*mon_filter_reset_mcopy_mode)(struct dp_pdev *pdev);
776*5113495bSYour Name #endif
777*5113495bSYour Name #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
778*5113495bSYour Name 	void (*mon_filter_setup_smart_monitor)(struct dp_pdev *pdev);
779*5113495bSYour Name 	void (*mon_filter_reset_smart_monitor)(struct dp_pdev *pdev);
780*5113495bSYour Name #endif
781*5113495bSYour Name 	void (*mon_filter_set_reset_mon_mac_filter)(struct dp_pdev *pdev,
782*5113495bSYour Name 						    bool val);
783*5113495bSYour Name #ifdef WLAN_RX_PKT_CAPTURE_ENH
784*5113495bSYour Name 	void (*mon_filter_setup_rx_enh_capture)(struct dp_pdev *pdev);
785*5113495bSYour Name 	void (*mon_filter_reset_rx_enh_capture)(struct dp_pdev *pdev);
786*5113495bSYour Name #endif
787*5113495bSYour Name 	void (*mon_filter_setup_rx_mon_mode)(struct dp_pdev *pdev);
788*5113495bSYour Name 	void (*mon_filter_reset_rx_mon_mode)(struct dp_pdev *pdev);
789*5113495bSYour Name 	void (*mon_filter_setup_tx_mon_mode)(struct dp_pdev *pdev);
790*5113495bSYour Name 	void (*mon_filter_reset_tx_mon_mode)(struct dp_pdev *pdev);
791*5113495bSYour Name #ifdef WDI_EVENT_ENABLE
792*5113495bSYour Name 	void (*mon_filter_setup_rx_pkt_log_full)(struct dp_pdev *pdev);
793*5113495bSYour Name 	void (*mon_filter_reset_rx_pkt_log_full)(struct dp_pdev *pdev);
794*5113495bSYour Name 	void (*mon_filter_setup_rx_pkt_log_lite)(struct dp_pdev *pdev);
795*5113495bSYour Name 	void (*mon_filter_reset_rx_pkt_log_lite)(struct dp_pdev *pdev);
796*5113495bSYour Name 	void (*mon_filter_setup_rx_pkt_log_cbf)(struct dp_pdev *pdev);
797*5113495bSYour Name 	void (*mon_filter_reset_rx_pkt_log_cbf)(struct dp_pdev *pdev);
798*5113495bSYour Name #ifdef BE_PKTLOG_SUPPORT
799*5113495bSYour Name 	void (*mon_filter_setup_pktlog_hybrid)(struct dp_pdev *pdev);
800*5113495bSYour Name 	void (*mon_filter_reset_pktlog_hybrid)(struct dp_pdev *pdev);
801*5113495bSYour Name #endif
802*5113495bSYour Name #endif
803*5113495bSYour Name 	QDF_STATUS (*rx_mon_filter_update)(struct dp_pdev *pdev);
804*5113495bSYour Name 	QDF_STATUS (*tx_mon_filter_update)(struct dp_pdev *pdev);
805*5113495bSYour Name 	QDF_STATUS (*set_mon_mode_buf_rings_tx)(struct dp_pdev *pdev,
806*5113495bSYour Name 						uint16_t num_buf);
807*5113495bSYour Name 
808*5113495bSYour Name 	QDF_STATUS (*tx_mon_filter_alloc)(struct dp_pdev *pdev);
809*5113495bSYour Name 	void (*tx_mon_filter_dealloc)(struct dp_pdev *pdev);
810*5113495bSYour Name 	mon_rings_alloc_fp mon_rings_alloc[2];
811*5113495bSYour Name 	mon_rings_free_fp mon_rings_free[2];
812*5113495bSYour Name 	mon_rings_init_fp mon_rings_init[2];
813*5113495bSYour Name 	mon_rings_deinit_fp mon_rings_deinit[2];
814*5113495bSYour Name 
815*5113495bSYour Name 	QDF_STATUS (*rx_mon_buffers_alloc)(struct dp_pdev *pdev);
816*5113495bSYour Name 	void (*rx_mon_buffers_free)(struct dp_pdev *pdev);
817*5113495bSYour Name 	void (*rx_mon_desc_pool_init)(struct dp_pdev *pdev);
818*5113495bSYour Name 	void (*rx_mon_desc_pool_deinit)(struct dp_pdev *pdev);
819*5113495bSYour Name 	QDF_STATUS (*rx_mon_desc_pool_alloc)(struct dp_pdev *pdev);
820*5113495bSYour Name 	void (*rx_mon_desc_pool_free)(struct dp_pdev *pdev);
821*5113495bSYour Name 	void (*tx_mon_desc_pool_init)(struct dp_pdev *pdev);
822*5113495bSYour Name 	void (*tx_mon_desc_pool_deinit)(struct dp_pdev *pdev);
823*5113495bSYour Name 	QDF_STATUS (*tx_mon_desc_pool_alloc)(struct dp_pdev *pdev);
824*5113495bSYour Name 	void (*tx_mon_desc_pool_free)(struct dp_pdev *pdev);
825*5113495bSYour Name 	void (*rx_mon_enable)(uint32_t *msg_word,
826*5113495bSYour Name 			      struct htt_rx_ring_tlv_filter *tlv_filter);
827*5113495bSYour Name 	void (*rx_hdr_length_set)(uint32_t *msg_word,
828*5113495bSYour Name 				  struct htt_rx_ring_tlv_filter *tlv_filter);
829*5113495bSYour Name 	void (*rx_packet_length_set)(uint32_t *msg_word,
830*5113495bSYour Name 				     struct htt_rx_ring_tlv_filter *tlv_filter);
831*5113495bSYour Name 	void (*rx_wmask_subscribe)(struct dp_soc *soc,
832*5113495bSYour Name 				   uint32_t *msg_word, int pdev_id,
833*5113495bSYour Name 				   struct htt_rx_ring_tlv_filter *tlv_filter);
834*5113495bSYour Name 	void (*rx_pkt_tlv_offset)(uint32_t *msg_word,
835*5113495bSYour Name 				  struct htt_rx_ring_tlv_filter *tlv_filter);
836*5113495bSYour Name 	void (*rx_enable_mpdu_logging)(uint32_t *msg_word,
837*5113495bSYour Name 				       struct htt_rx_ring_tlv_filter *tlv_filter);
838*5113495bSYour Name 	void (*rx_enable_fpmo)(uint32_t *msg_word,
839*5113495bSYour Name 			       struct htt_rx_ring_tlv_filter *tlv_filter);
840*5113495bSYour Name #ifndef DISABLE_MON_CONFIG
841*5113495bSYour Name 	void (*mon_register_intr_ops)(struct dp_soc *soc);
842*5113495bSYour Name #endif
843*5113495bSYour Name 	void (*mon_register_feature_ops)(struct dp_soc *soc);
844*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
845*5113495bSYour Name 	void (*mon_rx_stats_update)(struct dp_mon_peer *mon_peer,
846*5113495bSYour Name 				    struct cdp_rx_indication_ppdu *ppdu,
847*5113495bSYour Name 				    struct cdp_rx_stats_ppdu_user *ppdu_user);
848*5113495bSYour Name 	void (*mon_rx_populate_ppdu_usr_info)(struct mon_rx_user_status *rx_user_status,
849*5113495bSYour Name 					      struct cdp_rx_stats_ppdu_user *ppdu_user);
850*5113495bSYour Name 	void (*mon_rx_populate_ppdu_info)(struct hal_rx_ppdu_info *hal_ppdu_info,
851*5113495bSYour Name 					  struct cdp_rx_indication_ppdu *ppdu);
852*5113495bSYour Name #endif
853*5113495bSYour Name 	QDF_STATUS (*rx_mon_refill_buf_ring)(struct dp_intr *int_ctx);
854*5113495bSYour Name 	QDF_STATUS (*tx_mon_refill_buf_ring)(struct dp_intr *int_ctx);
855*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
856*5113495bSYour Name 	QDF_STATUS (*mon_config_undecoded_metadata_capture)
857*5113495bSYour Name 	    (struct dp_pdev *pdev, int val);
858*5113495bSYour Name 	void (*mon_filter_setup_undecoded_metadata_capture)
859*5113495bSYour Name 	    (struct dp_pdev *pdev);
860*5113495bSYour Name 	void (*mon_filter_reset_undecoded_metadata_capture)
861*5113495bSYour Name 	    (struct dp_pdev *pdev);
862*5113495bSYour Name #endif
863*5113495bSYour Name 	QDF_STATUS (*mon_pdev_ext_init)(struct dp_pdev *pdev);
864*5113495bSYour Name 	QDF_STATUS (*mon_pdev_ext_deinit)(struct dp_pdev *pdev);
865*5113495bSYour Name 	QDF_STATUS (*mon_rx_pdev_tlv_logger_init)(struct dp_pdev *pdev);
866*5113495bSYour Name 	QDF_STATUS (*mon_rx_pdev_tlv_logger_deinit)(struct dp_pdev *pdev);
867*5113495bSYour Name 	QDF_STATUS (*mon_lite_mon_alloc)(struct dp_pdev *pdev);
868*5113495bSYour Name 	void (*mon_lite_mon_dealloc)(struct dp_pdev *pdev);
869*5113495bSYour Name 	void (*mon_lite_mon_vdev_delete)(struct dp_pdev *pdev,
870*5113495bSYour Name 					 struct dp_vdev *vdev);
871*5113495bSYour Name 	void (*mon_lite_mon_disable_rx)(struct dp_pdev *pdev);
872*5113495bSYour Name 	bool (*mon_lite_mon_is_rx_adv_filter_enable)(struct dp_pdev *pdev);
873*5113495bSYour Name 	/* Print advanced monitor stats */
874*5113495bSYour Name 	void (*mon_rx_print_advanced_stats)
875*5113495bSYour Name 		(struct dp_soc *soc, struct dp_pdev *pdev);
876*5113495bSYour Name 	QDF_STATUS (*mon_rx_ppdu_info_cache_create)(struct dp_pdev *pdev);
877*5113495bSYour Name 	void (*mon_rx_ppdu_info_cache_destroy)(struct dp_pdev *pdev);
878*5113495bSYour Name 	void (*mon_mac_filter_set)(uint32_t *msg_word,
879*5113495bSYour Name 				   struct htt_rx_ring_tlv_filter *tlv_filter);
880*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
881*5113495bSYour Name 	QDF_STATUS (*start_local_pkt_capture)(struct dp_pdev *pdev);
882*5113495bSYour Name 	QDF_STATUS (*stop_local_pkt_capture)(struct dp_pdev *pdev);
883*5113495bSYour Name 	bool (*is_local_pkt_capture_running)(struct dp_pdev *pdev);
884*5113495bSYour Name #endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
885*5113495bSYour Name };
886*5113495bSYour Name 
887*5113495bSYour Name /**
888*5113495bSYour Name  * struct dp_mon_soc_stats - monitor stats
889*5113495bSYour Name  * @frag_alloc: Number of frags allocated
890*5113495bSYour Name  * @frag_free: Number of frags freed
891*5113495bSYour Name  * @empty_queue: Number of frags freed due to empty queue
892*5113495bSYour Name  */
893*5113495bSYour Name struct dp_mon_soc_stats {
894*5113495bSYour Name 	uint32_t frag_alloc;
895*5113495bSYour Name 	uint32_t frag_free;
896*5113495bSYour Name 	uint32_t empty_queue;
897*5113495bSYour Name };
898*5113495bSYour Name 
899*5113495bSYour Name struct dp_mon_soc {
900*5113495bSYour Name 	/* Holds all monitor related fields extracted from dp_soc */
901*5113495bSYour Name 	/* Holds pointer to monitor ops */
902*5113495bSYour Name 	/* monitor link descriptor pages */
903*5113495bSYour Name 	struct qdf_mem_multi_page_t mon_link_desc_pages[MAX_NUM_LMAC_HW];
904*5113495bSYour Name 
905*5113495bSYour Name 	/* total link descriptors for monitor mode for each radio */
906*5113495bSYour Name 	uint32_t total_mon_link_descs[MAX_NUM_LMAC_HW];
907*5113495bSYour Name 
908*5113495bSYour Name 	 /* Monitor Link descriptor memory banks */
909*5113495bSYour Name 	struct link_desc_bank
910*5113495bSYour Name 		mon_link_desc_banks[MAX_NUM_LMAC_HW][MAX_MON_LINK_DESC_BANKS];
911*5113495bSYour Name 	uint32_t num_mon_link_desc_banks[MAX_NUM_LMAC_HW];
912*5113495bSYour Name 	/* Smart monitor capability for HKv2 */
913*5113495bSYour Name 	uint8_t hw_nac_monitor_support;
914*5113495bSYour Name 
915*5113495bSYour Name 	/* Full monitor mode support */
916*5113495bSYour Name 	bool full_mon_mode;
917*5113495bSYour Name 
918*5113495bSYour Name 	/*interrupt timer*/
919*5113495bSYour Name 	qdf_timer_t mon_reap_timer;
920*5113495bSYour Name 	uint8_t reap_timer_init;
921*5113495bSYour Name 
922*5113495bSYour Name 	qdf_spinlock_t reap_timer_lock;
923*5113495bSYour Name 
924*5113495bSYour Name 	/* Bitmap to record trigger sources of the reap timer */
925*5113495bSYour Name 	qdf_bitmap(mon_reap_src_bitmap, CDP_MON_REAP_SOURCE_NUM);
926*5113495bSYour Name 
927*5113495bSYour Name 	qdf_timer_t mon_vdev_timer;
928*5113495bSYour Name 	uint8_t mon_vdev_timer_state;
929*5113495bSYour Name 
930*5113495bSYour Name 	struct dp_mon_ops *mon_ops;
931*5113495bSYour Name 	bool monitor_mode_v2;
932*5113495bSYour Name #ifndef DISABLE_MON_CONFIG
933*5113495bSYour Name 	uint32_t (*mon_rx_process)(struct dp_soc *soc,
934*5113495bSYour Name 				   struct dp_intr *int_ctx,
935*5113495bSYour Name 				   uint32_t mac_id,
936*5113495bSYour Name 				   uint32_t quota);
937*5113495bSYour Name #endif
938*5113495bSYour Name 
939*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
940*5113495bSYour Name 	struct dp_soc_tx_capture dp_soc_tx_capt;
941*5113495bSYour Name #endif
942*5113495bSYour Name 	/* monitor stats */
943*5113495bSYour Name 	struct dp_mon_soc_stats stats;
944*5113495bSYour Name };
945*5113495bSYour Name 
946*5113495bSYour Name #ifdef WLAN_CONFIG_TELEMETRY_AGENT
947*5113495bSYour Name struct dp_mon_peer_airtime_consumption {
948*5113495bSYour Name 	uint32_t consumption;
949*5113495bSYour Name 	uint16_t avg_consumption_per_sec;
950*5113495bSYour Name };
951*5113495bSYour Name 
952*5113495bSYour Name /**
953*5113495bSYour Name  * struct dp_mon_peer_airtime_stats - Monitor peer airtime stats
954*5113495bSYour Name  * @tx_airtime_consumption: tx artime consumption of peer
955*5113495bSYour Name  * @rx_airtime_consumption: rx airtime consumption of peer
956*5113495bSYour Name  * @last_update_time: Time when last avergae of airtime is done
957*5113495bSYour Name  */
958*5113495bSYour Name struct dp_mon_peer_airtime_stats {
959*5113495bSYour Name 	struct dp_mon_peer_airtime_consumption tx_airtime_consumption[WME_AC_MAX];
960*5113495bSYour Name 	struct dp_mon_peer_airtime_consumption rx_airtime_consumption[WME_AC_MAX];
961*5113495bSYour Name 	uint64_t last_update_time;
962*5113495bSYour Name };
963*5113495bSYour Name 
964*5113495bSYour Name /**
965*5113495bSYour Name  * struct dp_mon_peer_deterministic - Monitor peer deterministic stats
966*5113495bSYour Name  * @deter: Deterministic stats per data tid
967*5113495bSYour Name  * @avg_tx_rate: Avg TX rate
968*5113495bSYour Name  */
969*5113495bSYour Name struct dp_mon_peer_deterministic {
970*5113495bSYour Name 	struct cdp_peer_deter_stats deter[CDP_DATA_TID_MAX];
971*5113495bSYour Name 	uint64_t avg_tx_rate;
972*5113495bSYour Name };
973*5113495bSYour Name #endif
974*5113495bSYour Name 
975*5113495bSYour Name /**
976*5113495bSYour Name  * struct dp_mon_peer_stats - Monitor peer stats
977*5113495bSYour Name  * @tx: tx stats
978*5113495bSYour Name  * @rx: rx stats
979*5113495bSYour Name  * @airtime_stats: mon peer airtime stats
980*5113495bSYour Name  * @deter_stats: Deterministic stats
981*5113495bSYour Name  */
982*5113495bSYour Name struct dp_mon_peer_stats {
983*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
984*5113495bSYour Name 	dp_mon_peer_tx_stats tx;
985*5113495bSYour Name 	dp_mon_peer_rx_stats rx;
986*5113495bSYour Name #ifdef WLAN_CONFIG_TELEMETRY_AGENT
987*5113495bSYour Name 	struct dp_mon_peer_airtime_stats airtime_stats;
988*5113495bSYour Name 	struct dp_mon_peer_deterministic deter_stats;
989*5113495bSYour Name #endif
990*5113495bSYour Name #endif
991*5113495bSYour Name };
992*5113495bSYour Name 
993*5113495bSYour Name struct dp_mon_peer {
994*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
995*5113495bSYour Name 	struct dp_peer_tx_capture tx_capture;
996*5113495bSYour Name #endif
997*5113495bSYour Name #ifdef FEATURE_PERPKT_INFO
998*5113495bSYour Name 	/* delayed ba ppdu stats handling */
999*5113495bSYour Name 	struct cdp_delayed_tx_completion_ppdu_user delayed_ba_ppdu_stats;
1000*5113495bSYour Name 	/* delayed ba flag */
1001*5113495bSYour Name 	bool last_delayed_ba;
1002*5113495bSYour Name 	/* delayed ba ppdu id */
1003*5113495bSYour Name 	uint32_t last_delayed_ba_ppduid;
1004*5113495bSYour Name #endif
1005*5113495bSYour Name 	uint8_t tx_cap_enabled:1, /* Peer's tx-capture is enabled */
1006*5113495bSYour Name 		rx_cap_enabled:1; /* Peer's rx-capture is enabled */
1007*5113495bSYour Name 
1008*5113495bSYour Name 	/* Peer level flag to check peer based pktlog enabled or
1009*5113495bSYour Name 	 * disabled
1010*5113495bSYour Name 	 */
1011*5113495bSYour Name 	uint8_t peer_based_pktlog_filter;
1012*5113495bSYour Name 
1013*5113495bSYour Name 	/* Monitor peer stats */
1014*5113495bSYour Name 	struct dp_mon_peer_stats stats;
1015*5113495bSYour Name 
1016*5113495bSYour Name 	/* peer extended statistics context */
1017*5113495bSYour Name 	struct cdp_peer_rate_stats_ctx *peerstats_ctx;
1018*5113495bSYour Name };
1019*5113495bSYour Name 
1020*5113495bSYour Name struct dp_rx_mon_rssi_offset {
1021*5113495bSYour Name 	/* Temperature based rssi offset */
1022*5113495bSYour Name 	int32_t rssi_temp_offset;
1023*5113495bSYour Name 	/* Low noise amplifier bypass offset */
1024*5113495bSYour Name 	int32_t xlna_bypass_offset;
1025*5113495bSYour Name 	/* Low noise amplifier bypass threshold */
1026*5113495bSYour Name 	int32_t xlna_bypass_threshold;
1027*5113495bSYour Name 	/* 3 Bytes of xbar_config are used for RF to BB mapping */
1028*5113495bSYour Name 	uint32_t xbar_config;
1029*5113495bSYour Name 	/* min noise floor in active chains per channel */
1030*5113495bSYour Name 	int8_t min_nf_dbm;
1031*5113495bSYour Name 	/* this value is sum of temp_oofset + min_nf*/
1032*5113495bSYour Name 	int32_t rssi_offset;
1033*5113495bSYour Name };
1034*5113495bSYour Name 
1035*5113495bSYour Name struct dp_ring_ppdu_id_tracker {
1036*5113495bSYour Name 	uint64_t time_ppdu_id_mon_dest;
1037*5113495bSYour Name 	uint32_t ppdu_id_mon_dest;
1038*5113495bSYour Name 	uint64_t time_ppdu_id_mon_status;
1039*5113495bSYour Name 	uint32_t ppdu_id_mon_status;
1040*5113495bSYour Name 	uint32_t dest_hp;
1041*5113495bSYour Name 	uint32_t dest_tp;
1042*5113495bSYour Name 	int32_t dest_hw_hp;
1043*5113495bSYour Name 	int32_t dest_hw_tp;
1044*5113495bSYour Name 	uint32_t status_hp;
1045*5113495bSYour Name 	uint32_t status_tp;
1046*5113495bSYour Name 	int32_t status_hw_hp;
1047*5113495bSYour Name 	int32_t status_hw_tp;
1048*5113495bSYour Name };
1049*5113495bSYour Name 
1050*5113495bSYour Name struct  dp_mon_pdev {
1051*5113495bSYour Name 	/* monitor */
1052*5113495bSYour Name 	bool monitor_configured;
1053*5113495bSYour Name 	uint32_t mon_vdev_id;
1054*5113495bSYour Name 
1055*5113495bSYour Name 	struct dp_mon_filter **filter;	/* Monitor Filter pointer */
1056*5113495bSYour Name 
1057*5113495bSYour Name 	/* advance filter mode and type*/
1058*5113495bSYour Name 	uint8_t mon_filter_mode;
1059*5113495bSYour Name 	uint16_t fp_mgmt_filter;
1060*5113495bSYour Name 	uint16_t fp_ctrl_filter;
1061*5113495bSYour Name 	uint16_t fp_data_filter;
1062*5113495bSYour Name 	uint16_t mo_mgmt_filter;
1063*5113495bSYour Name 	uint16_t mo_ctrl_filter;
1064*5113495bSYour Name 	uint16_t mo_data_filter;
1065*5113495bSYour Name 	uint16_t md_data_filter;
1066*5113495bSYour Name 
1067*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
1068*5113495bSYour Name 	struct dp_pdev_tx_capture tx_capture;
1069*5113495bSYour Name 	bool stop_tx_capture_work_q_timer;
1070*5113495bSYour Name #endif
1071*5113495bSYour Name 
1072*5113495bSYour Name 	/* tx packet capture enhancement */
1073*5113495bSYour Name 	enum cdp_tx_enh_capture_mode tx_capture_enabled;
1074*5113495bSYour Name 	/* Stuck count on monitor destination ring MPDU process */
1075*5113495bSYour Name 	uint32_t mon_dest_ring_stuck_cnt;
1076*5113495bSYour Name 	/* monitor mode lock */
1077*5113495bSYour Name 	qdf_spinlock_t mon_lock;
1078*5113495bSYour Name 
1079*5113495bSYour Name 	/* Monitor mode operation channel */
1080*5113495bSYour Name 	int mon_chan_num;
1081*5113495bSYour Name 
1082*5113495bSYour Name 	/* Monitor mode operation frequency */
1083*5113495bSYour Name 	qdf_freq_t mon_chan_freq;
1084*5113495bSYour Name 
1085*5113495bSYour Name 	/* Monitor mode band */
1086*5113495bSYour Name 	enum reg_wifi_band mon_chan_band;
1087*5113495bSYour Name 
1088*5113495bSYour Name 	uint32_t mon_ppdu_status;
1089*5113495bSYour Name 	/* monitor mode status/destination ring PPDU and MPDU count */
1090*5113495bSYour Name 	struct cdp_pdev_mon_stats rx_mon_stats;
1091*5113495bSYour Name 	/* Monitor mode interface and status storage */
1092*5113495bSYour Name 	struct dp_vdev *mvdev;
1093*5113495bSYour Name 	struct cdp_mon_status rx_mon_recv_status;
1094*5113495bSYour Name 	/* to track duplicate link descriptor indications by HW for a WAR */
1095*5113495bSYour Name 	uint64_t mon_last_linkdesc_paddr;
1096*5113495bSYour Name 	/* to track duplicate buffer indications by HW for a WAR */
1097*5113495bSYour Name 	uint32_t mon_last_buf_cookie;
1098*5113495bSYour Name 
1099*5113495bSYour Name #ifdef QCA_SUPPORT_FULL_MON
1100*5113495bSYour Name 	/* List to maintain all MPDUs for a PPDU in monitor mode */
1101*5113495bSYour Name 	TAILQ_HEAD(, dp_mon_mpdu) mon_mpdu_q;
1102*5113495bSYour Name 
1103*5113495bSYour Name 	/* TODO: define per-user mpdu list
1104*5113495bSYour Name 	 * struct dp_mon_mpdu_list mpdu_list[MAX_MU_USERS];
1105*5113495bSYour Name 	 */
1106*5113495bSYour Name 	struct hal_rx_mon_desc_info *mon_desc;
1107*5113495bSYour Name 	struct dp_ring_ppdu_id_tracker hist_ppdu_id_mon_d[DP_HIST_TRACK_SIZE];
1108*5113495bSYour Name 	struct dp_ring_ppdu_id_tracker hist_ppdu_id_mon_s[DP_HIST_TRACK_SIZE];
1109*5113495bSYour Name 	uint8_t hist_mon_dest_idx;
1110*5113495bSYour Name 	uint8_t hist_mon_status_idx;
1111*5113495bSYour Name #endif
1112*5113495bSYour Name 	bool set_reset_mon;
1113*5113495bSYour Name 	bool is_bkpressure;
1114*5113495bSYour Name 	/* Flag to hold on to monitor destination ring */
1115*5113495bSYour Name 	bool hold_mon_dest_ring;
1116*5113495bSYour Name 	uint64_t reap_status[DP_MON_STATUS_MAX];
1117*5113495bSYour Name 	uint64_t prev_status[DP_MON_STATUS_MAX];
1118*5113495bSYour Name 	uint64_t status_match[DP_MON_STATUS_MAX];
1119*5113495bSYour Name 
1120*5113495bSYour Name 	/* Flag to indicate monitor rings are initialized */
1121*5113495bSYour Name 	uint8_t pdev_mon_init;
1122*5113495bSYour Name #ifndef REMOVE_PKT_LOG
1123*5113495bSYour Name 	bool pkt_log_init;
1124*5113495bSYour Name 	struct pktlog_dev_t *pl_dev; /* Pktlog pdev */
1125*5113495bSYour Name #endif /* #ifndef REMOVE_PKT_LOG */
1126*5113495bSYour Name 
1127*5113495bSYour Name 	/* Smart Mesh */
1128*5113495bSYour Name 	bool filter_neighbour_peers;
1129*5113495bSYour Name 
1130*5113495bSYour Name 	/*flag to indicate neighbour_peers_list not empty */
1131*5113495bSYour Name 	bool neighbour_peers_added;
1132*5113495bSYour Name 	/* smart mesh mutex */
1133*5113495bSYour Name 	qdf_spinlock_t neighbour_peer_mutex;
1134*5113495bSYour Name 	/* Neighnour peer list */
1135*5113495bSYour Name 	TAILQ_HEAD(, dp_neighbour_peer) neighbour_peers_list;
1136*5113495bSYour Name 	/* Enhanced Stats is enabled */
1137*5113495bSYour Name 	uint8_t enhanced_stats_en;
1138*5113495bSYour Name 	qdf_nbuf_queue_t rx_status_q;
1139*5113495bSYour Name 
1140*5113495bSYour Name 	/* 128 bytes mpdu header queue per user for ppdu */
1141*5113495bSYour Name 	qdf_nbuf_queue_t mpdu_q[MAX_MU_USERS];
1142*5113495bSYour Name 
1143*5113495bSYour Name 	/* is this a mpdu header TLV and not msdu header TLV */
1144*5113495bSYour Name 	bool is_mpdu_hdr[MAX_MU_USERS];
1145*5113495bSYour Name 
1146*5113495bSYour Name 	/* per user 128 bytes msdu header list for MPDU */
1147*5113495bSYour Name 	struct msdu_list msdu_list[MAX_MU_USERS];
1148*5113495bSYour Name 
1149*5113495bSYour Name 	/* RX enhanced capture mode */
1150*5113495bSYour Name 	uint8_t rx_enh_capture_mode;
1151*5113495bSYour Name 	/* Rx per peer enhanced capture mode */
1152*5113495bSYour Name 	bool rx_enh_capture_peer;
1153*5113495bSYour Name 	struct dp_vdev *rx_enh_monitor_vdev;
1154*5113495bSYour Name 	/* RX enhanced capture trailer enable/disable flag */
1155*5113495bSYour Name 	bool is_rx_enh_capture_trailer_enabled;
1156*5113495bSYour Name #ifdef WLAN_RX_PKT_CAPTURE_ENH
1157*5113495bSYour Name 	/* RX per MPDU/PPDU information */
1158*5113495bSYour Name 	struct cdp_rx_indication_mpdu mpdu_ind;
1159*5113495bSYour Name #endif
1160*5113495bSYour Name 
1161*5113495bSYour Name 	/* Packet log mode */
1162*5113495bSYour Name 	uint8_t rx_pktlog_mode;
1163*5113495bSYour Name 	/* Enable pktlog logging cbf */
1164*5113495bSYour Name 	bool rx_pktlog_cbf;
1165*5113495bSYour Name 
1166*5113495bSYour Name #ifdef BE_PKTLOG_SUPPORT
1167*5113495bSYour Name 	/* Enable pktlog logging hybrid */
1168*5113495bSYour Name 	bool pktlog_hybrid_mode;
1169*5113495bSYour Name #endif
1170*5113495bSYour Name 	bool tx_sniffer_enable;
1171*5113495bSYour Name 	/* mirror copy mode */
1172*5113495bSYour Name 	enum m_copy_mode mcopy_mode;
1173*5113495bSYour Name 	bool bpr_enable;
1174*5113495bSYour Name 	/* Pdev level flag to check peer based pktlog enabled or
1175*5113495bSYour Name 	 * disabled
1176*5113495bSYour Name 	 */
1177*5113495bSYour Name 	uint8_t dp_peer_based_pktlog;
1178*5113495bSYour Name 
1179*5113495bSYour Name #ifdef WLAN_ATF_ENABLE
1180*5113495bSYour Name 	/* ATF stats enable */
1181*5113495bSYour Name 	bool dp_atf_stats_enable;
1182*5113495bSYour Name #endif
1183*5113495bSYour Name 
1184*5113495bSYour Name 	/* Maintains first status buffer's paddr of a PPDU */
1185*5113495bSYour Name 	uint64_t status_buf_addr;
1186*5113495bSYour Name 	struct hal_rx_ppdu_info ppdu_info;
1187*5113495bSYour Name 
1188*5113495bSYour Name 	/* ppdu_id of last received HTT TX stats */
1189*5113495bSYour Name 	uint32_t last_ppdu_id;
1190*5113495bSYour Name 	struct {
1191*5113495bSYour Name 		uint8_t last_user;
1192*5113495bSYour Name 		qdf_nbuf_t buf;
1193*5113495bSYour Name 	} tx_ppdu_info;
1194*5113495bSYour Name 
1195*5113495bSYour Name 	struct {
1196*5113495bSYour Name 		uint32_t tx_ppdu_id;
1197*5113495bSYour Name 		uint16_t tx_peer_id;
1198*5113495bSYour Name 		uint32_t rx_ppdu_id;
1199*5113495bSYour Name 	} m_copy_id;
1200*5113495bSYour Name 
1201*5113495bSYour Name 	/* To check if PPDU Tx stats are enabled for Pktlog */
1202*5113495bSYour Name 	bool pktlog_ppdu_stats;
1203*5113495bSYour Name 
1204*5113495bSYour Name #ifdef ATH_SUPPORT_NAC_RSSI
1205*5113495bSYour Name 	bool nac_rssi_filtering;
1206*5113495bSYour Name #endif
1207*5113495bSYour Name 
1208*5113495bSYour Name 	/* ppdu_stats lock for queue concurrency between cores*/
1209*5113495bSYour Name 	qdf_spinlock_t ppdu_stats_lock;
1210*5113495bSYour Name 
1211*5113495bSYour Name 	/* list of ppdu tlvs */
1212*5113495bSYour Name 	TAILQ_HEAD(, ppdu_info) ppdu_info_list;
1213*5113495bSYour Name 	TAILQ_HEAD(, ppdu_info) sched_comp_ppdu_list;
1214*5113495bSYour Name 
1215*5113495bSYour Name 	uint32_t sched_comp_list_depth;
1216*5113495bSYour Name 	uint16_t delivered_sched_cmdid;
1217*5113495bSYour Name 	uint16_t last_sched_cmdid;
1218*5113495bSYour Name 	uint32_t tlv_count;
1219*5113495bSYour Name 	uint32_t list_depth;
1220*5113495bSYour Name 
1221*5113495bSYour Name 	struct {
1222*5113495bSYour Name 		qdf_nbuf_t last_nbuf; /*Ptr to mgmt last buf */
1223*5113495bSYour Name 		uint8_t *mgmt_buf; /* Ptr to mgmt. payload in HTT ppdu stats */
1224*5113495bSYour Name 		uint32_t mgmt_buf_len; /* Len of mgmt. payload in ppdu stats */
1225*5113495bSYour Name 		uint32_t ppdu_id;
1226*5113495bSYour Name 	} mgmtctrl_frm_info;
1227*5113495bSYour Name 	/* Context of cal client timer */
1228*5113495bSYour Name 	struct cdp_cal_client *cal_client_ctx;
1229*5113495bSYour Name 	uint32_t *ppdu_tlv_buf; /* Buffer to hold HTT ppdu stats TLVs*/
1230*5113495bSYour Name 
1231*5113495bSYour Name 	qdf_nbuf_t mcopy_status_nbuf;
1232*5113495bSYour Name 	bool is_dp_mon_pdev_initialized;
1233*5113495bSYour Name 	/* indicates if spcl vap is configured */
1234*5113495bSYour Name 	bool scan_spcl_vap_configured;
1235*5113495bSYour Name 	bool undecoded_metadata_capture;
1236*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
1237*5113495bSYour Name 	uint32_t phyrx_error_mask;
1238*5113495bSYour Name 	uint32_t phyrx_error_mask_cont;
1239*5113495bSYour Name #endif
1240*5113495bSYour Name #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS
1241*5113495bSYour Name 	/* enable spcl vap stats reset on ch change */
1242*5113495bSYour Name 	bool reset_scan_spcl_vap_stats_enable;
1243*5113495bSYour Name #endif
1244*5113495bSYour Name 	bool is_tlv_hdr_64_bit;
1245*5113495bSYour Name 	/* TLV header size*/
1246*5113495bSYour Name 	uint8_t tlv_hdr_size;
1247*5113495bSYour Name 
1248*5113495bSYour Name 	/* Invalid monitor peer to account for stats in mcopy mode */
1249*5113495bSYour Name 	struct dp_mon_peer *invalid_mon_peer;
1250*5113495bSYour Name 
1251*5113495bSYour Name 	bool rssi_dbm_conv_support;
1252*5113495bSYour Name 	struct dp_rx_mon_rssi_offset rssi_offsets;
1253*5113495bSYour Name 	uint8_t phy_ppdu_id_size;
1254*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
1255*5113495bSYour Name 	bool is_local_pkt_capture_running;
1256*5113495bSYour Name 	/* Maintain MSDU list on PPDU */
1257*5113495bSYour Name 	qdf_nbuf_queue_t msdu_queue;
1258*5113495bSYour Name 	/* Maintain MPDU list of PPDU */
1259*5113495bSYour Name 	qdf_nbuf_queue_t mpdu_queue;
1260*5113495bSYour Name 	/* To  check if 1st MPDU of PPDU */
1261*5113495bSYour Name 	bool first_mpdu;
1262*5113495bSYour Name 	/* LPC lock */
1263*5113495bSYour Name 	qdf_spinlock_t lpc_lock;
1264*5113495bSYour Name #endif
1265*5113495bSYour Name };
1266*5113495bSYour Name 
1267*5113495bSYour Name struct  dp_mon_vdev {
1268*5113495bSYour Name 	/* callback to hand rx monitor 802.11 MPDU to the OS shim */
1269*5113495bSYour Name 	ol_txrx_rx_mon_fp osif_rx_mon;
1270*5113495bSYour Name #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS
1271*5113495bSYour Name 	struct cdp_scan_spcl_vap_stats *scan_spcl_vap_stats;
1272*5113495bSYour Name #endif
1273*5113495bSYour Name };
1274*5113495bSYour Name 
1275*5113495bSYour Name #if defined(QCA_TX_CAPTURE_SUPPORT) || defined(QCA_ENHANCED_STATS_SUPPORT)
1276*5113495bSYour Name void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf);
1277*5113495bSYour Name #else
1278*5113495bSYour Name static inline
dp_deliver_mgmt_frm(struct dp_pdev * pdev,qdf_nbuf_t nbuf)1279*5113495bSYour Name void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf)
1280*5113495bSYour Name {
1281*5113495bSYour Name }
1282*5113495bSYour Name #endif
1283*5113495bSYour Name 
1284*5113495bSYour Name #if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
1285*5113495bSYour Name 	defined(WLAN_SUPPORT_RX_FLOW_TAG)
1286*5113495bSYour Name /**
1287*5113495bSYour Name  * dp_rx_mon_update_protocol_flow_tag() - Performs necessary checks for monitor
1288*5113495bSYour Name  *                                       mode and then tags appropriate packets
1289*5113495bSYour Name  * @soc: core txrx main context
1290*5113495bSYour Name  * @dp_pdev: pdev on which packet is received
1291*5113495bSYour Name  * @msdu: QDF packet buffer on which the protocol tag should be set
1292*5113495bSYour Name  * @rx_desc: base address where the RX TLVs start
1293*5113495bSYour Name  *
1294*5113495bSYour Name  * Return: void
1295*5113495bSYour Name  */
1296*5113495bSYour Name void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
1297*5113495bSYour Name 					struct dp_pdev *dp_pdev,
1298*5113495bSYour Name 					qdf_nbuf_t msdu, void *rx_desc);
1299*5113495bSYour Name #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG || WLAN_SUPPORT_RX_FLOW_TAG */
1300*5113495bSYour Name 
1301*5113495bSYour Name #if !defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) &&\
1302*5113495bSYour Name 	!defined(WLAN_SUPPORT_RX_FLOW_TAG)
1303*5113495bSYour Name /**
1304*5113495bSYour Name  * dp_rx_mon_update_protocol_flow_tag() - Performs necessary checks for monitor
1305*5113495bSYour Name  *                                       mode and then tags appropriate packets
1306*5113495bSYour Name  * @soc: core txrx main context
1307*5113495bSYour Name  * @dp_pdev: pdev on which packet is received
1308*5113495bSYour Name  * @msdu: QDF packet buffer on which the protocol tag should be set
1309*5113495bSYour Name  * @rx_desc: base address where the RX TLVs start
1310*5113495bSYour Name  *
1311*5113495bSYour Name  * Return: void
1312*5113495bSYour Name  */
1313*5113495bSYour Name static inline
dp_rx_mon_update_protocol_flow_tag(struct dp_soc * soc,struct dp_pdev * dp_pdev,qdf_nbuf_t msdu,void * rx_desc)1314*5113495bSYour Name void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
1315*5113495bSYour Name 					struct dp_pdev *dp_pdev,
1316*5113495bSYour Name 					qdf_nbuf_t msdu, void *rx_desc)
1317*5113495bSYour Name {
1318*5113495bSYour Name }
1319*5113495bSYour Name #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG || WLAN_SUPPORT_RX_FLOW_TAG */
1320*5113495bSYour Name 
1321*5113495bSYour Name #ifndef WLAN_TX_PKT_CAPTURE_ENH
1322*5113495bSYour Name /**
1323*5113495bSYour Name  * dp_peer_tid_queue_init() - Initialize ppdu stats queue per TID
1324*5113495bSYour Name  * @peer: Datapath peer
1325*5113495bSYour Name  *
1326*5113495bSYour Name  */
dp_peer_tid_queue_init(struct dp_peer * peer)1327*5113495bSYour Name static inline void dp_peer_tid_queue_init(struct dp_peer *peer)
1328*5113495bSYour Name {
1329*5113495bSYour Name }
1330*5113495bSYour Name 
1331*5113495bSYour Name /**
1332*5113495bSYour Name  * dp_peer_tid_queue_cleanup() - remove ppdu stats queue per TID
1333*5113495bSYour Name  * @peer: Datapath peer
1334*5113495bSYour Name  *
1335*5113495bSYour Name  */
dp_peer_tid_queue_cleanup(struct dp_peer * peer)1336*5113495bSYour Name static inline void dp_peer_tid_queue_cleanup(struct dp_peer *peer)
1337*5113495bSYour Name {
1338*5113495bSYour Name }
1339*5113495bSYour Name 
1340*5113495bSYour Name /**
1341*5113495bSYour Name  * dp_peer_update_80211_hdr() - dp peer update 80211 hdr
1342*5113495bSYour Name  * @vdev: Datapath vdev
1343*5113495bSYour Name  * @peer: Datapath peer
1344*5113495bSYour Name  *
1345*5113495bSYour Name  */
1346*5113495bSYour Name static inline void
dp_peer_update_80211_hdr(struct dp_vdev * vdev,struct dp_peer * peer)1347*5113495bSYour Name dp_peer_update_80211_hdr(struct dp_vdev *vdev, struct dp_peer *peer)
1348*5113495bSYour Name {
1349*5113495bSYour Name }
1350*5113495bSYour Name 
1351*5113495bSYour Name /**
1352*5113495bSYour Name  * dp_get_peer_tx_capture_stats() - to get peer tx capture stats
1353*5113495bSYour Name  * @peer: DP PEER handle
1354*5113495bSYour Name  * @stats: pointor to peer tx capture stats
1355*5113495bSYour Name  *
1356*5113495bSYour Name  * return: QDF_STATUS
1357*5113495bSYour Name  */
1358*5113495bSYour Name static inline QDF_STATUS
dp_get_peer_tx_capture_stats(struct dp_peer * peer,struct cdp_peer_tx_capture_stats * stats)1359*5113495bSYour Name dp_get_peer_tx_capture_stats(struct dp_peer *peer,
1360*5113495bSYour Name 			     struct cdp_peer_tx_capture_stats *stats)
1361*5113495bSYour Name {
1362*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1363*5113495bSYour Name }
1364*5113495bSYour Name 
1365*5113495bSYour Name /**
1366*5113495bSYour Name  * dp_get_pdev_tx_capture_stats() - to get pdev tx capture stats
1367*5113495bSYour Name  * @pdev: DP PDEV handle
1368*5113495bSYour Name  * @stats: pointor to pdev tx capture stats
1369*5113495bSYour Name  *
1370*5113495bSYour Name  * return: QDF_STATUS
1371*5113495bSYour Name  */
1372*5113495bSYour Name static inline QDF_STATUS
dp_get_pdev_tx_capture_stats(struct dp_pdev * pdev,struct cdp_pdev_tx_capture_stats * stats)1373*5113495bSYour Name dp_get_pdev_tx_capture_stats(struct dp_pdev *pdev,
1374*5113495bSYour Name 			     struct cdp_pdev_tx_capture_stats *stats)
1375*5113495bSYour Name {
1376*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1377*5113495bSYour Name }
1378*5113495bSYour Name #endif
1379*5113495bSYour Name 
1380*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
1381*5113495bSYour Name extern uint8_t
1382*5113495bSYour Name dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS_MAX];
1383*5113495bSYour Name #endif
1384*5113495bSYour Name 
1385*5113495bSYour Name /**
1386*5113495bSYour Name  * dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap() - Get ppdu stats tlv
1387*5113495bSYour Name  * bitmap for sniffer mode
1388*5113495bSYour Name  * @bitmap: received bitmap
1389*5113495bSYour Name  *
1390*5113495bSYour Name  * Return: expected bitmap value, returns zero if doesn't match with
1391*5113495bSYour Name  * either 64-bit Tx window or 256-bit window tlv bitmap
1392*5113495bSYour Name  */
1393*5113495bSYour Name int
1394*5113495bSYour Name dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap);
1395*5113495bSYour Name 
1396*5113495bSYour Name #if (defined(DP_CON_MON) || defined(WDI_EVENT_ENABLE)) &&\
1397*5113495bSYour Name 	(!defined(REMOVE_PKT_LOG))
1398*5113495bSYour Name /**
1399*5113495bSYour Name  * dp_pkt_log_init() - API to initialize packet log
1400*5113495bSYour Name  * @soc_hdl: Datapath soc handle
1401*5113495bSYour Name  * @pdev_id: id of data path pdev handle
1402*5113495bSYour Name  * @scn: HIF context
1403*5113495bSYour Name  *
1404*5113495bSYour Name  * Return: none
1405*5113495bSYour Name  */
1406*5113495bSYour Name void dp_pkt_log_init(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn);
1407*5113495bSYour Name #else
1408*5113495bSYour Name static inline void
dp_pkt_log_init(struct cdp_soc_t * soc_hdl,uint8_t pdev_id,void * scn)1409*5113495bSYour Name dp_pkt_log_init(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn)
1410*5113495bSYour Name {
1411*5113495bSYour Name }
1412*5113495bSYour Name #endif
1413*5113495bSYour Name 
1414*5113495bSYour Name #if defined(WDI_EVENT_ENABLE) && defined(QCA_ENHANCED_STATS_SUPPORT)
1415*5113495bSYour Name QDF_STATUS dp_peer_stats_notify(struct dp_pdev *pdev, struct dp_peer *peer);
1416*5113495bSYour Name #else
dp_peer_stats_notify(struct dp_pdev * pdev,struct dp_peer * peer)1417*5113495bSYour Name static inline QDF_STATUS dp_peer_stats_notify(struct dp_pdev *pdev,
1418*5113495bSYour Name 					      struct dp_peer *peer)
1419*5113495bSYour Name {
1420*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1421*5113495bSYour Name }
1422*5113495bSYour Name #endif
1423*5113495bSYour Name 
1424*5113495bSYour Name #if defined(FEATURE_PERPKT_INFO) && defined(WDI_EVENT_ENABLE)
1425*5113495bSYour Name void dp_send_stats_event(struct dp_pdev *pdev, struct dp_peer *peer,
1426*5113495bSYour Name 			 uint16_t peer_id);
1427*5113495bSYour Name #else
1428*5113495bSYour Name static inline
dp_send_stats_event(struct dp_pdev * pdev,struct dp_peer * peer,uint16_t peer_id)1429*5113495bSYour Name void dp_send_stats_event(struct dp_pdev *pdev, struct dp_peer *peer,
1430*5113495bSYour Name 			 uint16_t peer_id)
1431*5113495bSYour Name {
1432*5113495bSYour Name }
1433*5113495bSYour Name #endif
1434*5113495bSYour Name 
1435*5113495bSYour Name #ifndef WLAN_TX_PKT_CAPTURE_ENH
1436*5113495bSYour Name /**
1437*5113495bSYour Name  * dp_tx_ppdu_stats_process - Deferred PPDU stats handler
1438*5113495bSYour Name  * @context: Opaque work context (PDEV)
1439*5113495bSYour Name  *
1440*5113495bSYour Name  * Return: none
1441*5113495bSYour Name  */
dp_tx_ppdu_stats_process(void * context)1442*5113495bSYour Name static  inline void dp_tx_ppdu_stats_process(void *context)
1443*5113495bSYour Name {
1444*5113495bSYour Name }
1445*5113495bSYour Name 
1446*5113495bSYour Name /**
1447*5113495bSYour Name  * dp_tx_capture_htt_frame_counter: increment counter for htt_frame_type
1448*5113495bSYour Name  * @pdev: DP pdev handle
1449*5113495bSYour Name  * @htt_frame_type: htt frame type received from fw
1450*5113495bSYour Name  *
1451*5113495bSYour Name  * return: void
1452*5113495bSYour Name  */
1453*5113495bSYour Name static inline
dp_tx_capture_htt_frame_counter(struct dp_pdev * pdev,uint32_t htt_frame_type)1454*5113495bSYour Name void dp_tx_capture_htt_frame_counter(struct dp_pdev *pdev,
1455*5113495bSYour Name 				     uint32_t htt_frame_type)
1456*5113495bSYour Name {
1457*5113495bSYour Name }
1458*5113495bSYour Name 
1459*5113495bSYour Name #endif
1460*5113495bSYour Name 
1461*5113495bSYour Name /**
1462*5113495bSYour Name  * dp_rx_cookie_2_mon_link_desc_va() - Converts cookie to a virtual address of
1463*5113495bSYour Name  *				   the MSDU Link Descriptor
1464*5113495bSYour Name  * @pdev: core txrx pdev context
1465*5113495bSYour Name  * @buf_info: buf_info includes cookie that used to lookup virtual address of
1466*5113495bSYour Name  * link descriptor. Normally this is just an index into a per pdev array.
1467*5113495bSYour Name  * @mac_id: mac id
1468*5113495bSYour Name  *
1469*5113495bSYour Name  * This is the VA of the link descriptor in monitor mode destination ring,
1470*5113495bSYour Name  * that HAL layer later uses to retrieve the list of MSDU's for a given MPDU.
1471*5113495bSYour Name  *
1472*5113495bSYour Name  * Return: void *: Virtual Address of the Rx descriptor
1473*5113495bSYour Name  */
1474*5113495bSYour Name static inline
dp_rx_cookie_2_mon_link_desc_va(struct dp_pdev * pdev,struct hal_buf_info * buf_info,int mac_id)1475*5113495bSYour Name void *dp_rx_cookie_2_mon_link_desc_va(struct dp_pdev *pdev,
1476*5113495bSYour Name 				      struct hal_buf_info *buf_info,
1477*5113495bSYour Name 				      int mac_id)
1478*5113495bSYour Name {
1479*5113495bSYour Name 	void *link_desc_va;
1480*5113495bSYour Name 	struct qdf_mem_multi_page_t *pages;
1481*5113495bSYour Name 	uint16_t page_id = LINK_DESC_COOKIE_PAGE_ID(buf_info->sw_cookie);
1482*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
1483*5113495bSYour Name 
1484*5113495bSYour Name 	if (!mon_soc)
1485*5113495bSYour Name 		return NULL;
1486*5113495bSYour Name 
1487*5113495bSYour Name 	pages = &mon_soc->mon_link_desc_pages[mac_id];
1488*5113495bSYour Name 	if (!pages)
1489*5113495bSYour Name 		return NULL;
1490*5113495bSYour Name 
1491*5113495bSYour Name 	if (qdf_unlikely(page_id >= pages->num_pages))
1492*5113495bSYour Name 		return NULL;
1493*5113495bSYour Name 
1494*5113495bSYour Name 	link_desc_va = pages->dma_pages[page_id].page_v_addr_start +
1495*5113495bSYour Name 		(buf_info->paddr - pages->dma_pages[page_id].page_p_addr);
1496*5113495bSYour Name 
1497*5113495bSYour Name 	return link_desc_va;
1498*5113495bSYour Name }
1499*5113495bSYour Name 
1500*5113495bSYour Name /**
1501*5113495bSYour Name  * dp_soc_is_full_mon_enable() - Return if full monitor mode is enabled
1502*5113495bSYour Name  * @pdev: point to dp pdev
1503*5113495bSYour Name  *
1504*5113495bSYour Name  * Return: Full monitor mode status
1505*5113495bSYour Name  */
dp_soc_is_full_mon_enable(struct dp_pdev * pdev)1506*5113495bSYour Name static inline bool dp_soc_is_full_mon_enable(struct dp_pdev *pdev)
1507*5113495bSYour Name {
1508*5113495bSYour Name 	return (pdev->soc->monitor_soc->full_mon_mode &&
1509*5113495bSYour Name 		pdev->monitor_pdev->monitor_configured) ? true : false;
1510*5113495bSYour Name }
1511*5113495bSYour Name 
1512*5113495bSYour Name /**
1513*5113495bSYour Name  * dp_monitor_is_enable_mcopy_mode() - check if mcopy mode is enabled
1514*5113495bSYour Name  * @pdev: point to dp pdev
1515*5113495bSYour Name  *
1516*5113495bSYour Name  * Return: true if mcopy mode is enabled
1517*5113495bSYour Name  */
dp_monitor_is_enable_mcopy_mode(struct dp_pdev * pdev)1518*5113495bSYour Name static inline bool dp_monitor_is_enable_mcopy_mode(struct dp_pdev *pdev)
1519*5113495bSYour Name {
1520*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1521*5113495bSYour Name 		return false;
1522*5113495bSYour Name 
1523*5113495bSYour Name 	return pdev->monitor_pdev->mcopy_mode;
1524*5113495bSYour Name }
1525*5113495bSYour Name 
1526*5113495bSYour Name /**
1527*5113495bSYour Name  * dp_monitor_is_enable_tx_sniffer() - check if tx sniffer is enabled
1528*5113495bSYour Name  * @pdev: point to dp pdev
1529*5113495bSYour Name  *
1530*5113495bSYour Name  * Return: true if tx sniffer is enabled
1531*5113495bSYour Name  */
dp_monitor_is_enable_tx_sniffer(struct dp_pdev * pdev)1532*5113495bSYour Name static inline bool dp_monitor_is_enable_tx_sniffer(struct dp_pdev *pdev)
1533*5113495bSYour Name {
1534*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1535*5113495bSYour Name 		return false;
1536*5113495bSYour Name 
1537*5113495bSYour Name 	return pdev->monitor_pdev->tx_sniffer_enable;
1538*5113495bSYour Name }
1539*5113495bSYour Name 
1540*5113495bSYour Name /**
1541*5113495bSYour Name  * dp_monitor_is_configured() - check if monitor configured is set
1542*5113495bSYour Name  * @pdev: point to dp pdev
1543*5113495bSYour Name  *
1544*5113495bSYour Name  * Return: true if monitor configured is set
1545*5113495bSYour Name  */
dp_monitor_is_configured(struct dp_pdev * pdev)1546*5113495bSYour Name static inline bool dp_monitor_is_configured(struct dp_pdev *pdev)
1547*5113495bSYour Name {
1548*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1549*5113495bSYour Name 		return false;
1550*5113495bSYour Name 
1551*5113495bSYour Name 	return pdev->monitor_pdev->monitor_configured;
1552*5113495bSYour Name }
1553*5113495bSYour Name 
1554*5113495bSYour Name /**
1555*5113495bSYour Name  * dp_monitor_check_com_info_ppdu_id() - check if msdu ppdu_id matches with
1556*5113495bSYour Name  * com info ppdu_id
1557*5113495bSYour Name  * @pdev: point to dp pdev
1558*5113495bSYour Name  * @rx_desc: point to rx_desc
1559*5113495bSYour Name  *
1560*5113495bSYour Name  * Return: success if ppdu_id matches
1561*5113495bSYour Name  */
dp_monitor_check_com_info_ppdu_id(struct dp_pdev * pdev,void * rx_desc)1562*5113495bSYour Name static inline QDF_STATUS dp_monitor_check_com_info_ppdu_id(struct dp_pdev *pdev,
1563*5113495bSYour Name 							   void *rx_desc)
1564*5113495bSYour Name {
1565*5113495bSYour Name 	struct cdp_mon_status *rs;
1566*5113495bSYour Name 	struct dp_mon_pdev *mon_pdev;
1567*5113495bSYour Name 	uint32_t msdu_ppdu_id = 0;
1568*5113495bSYour Name 
1569*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1570*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1571*5113495bSYour Name 
1572*5113495bSYour Name 	mon_pdev = pdev->monitor_pdev;
1573*5113495bSYour Name 	if (qdf_likely(1 != mon_pdev->ppdu_info.rx_status.rxpcu_filter_pass))
1574*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1575*5113495bSYour Name 
1576*5113495bSYour Name 	rs = &pdev->monitor_pdev->rx_mon_recv_status;
1577*5113495bSYour Name 	if (!rs || rs->cdp_rs_rxdma_err)
1578*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1579*5113495bSYour Name 
1580*5113495bSYour Name 	msdu_ppdu_id = hal_rx_get_ppdu_id(pdev->soc->hal_soc, rx_desc);
1581*5113495bSYour Name 	if (msdu_ppdu_id != mon_pdev->ppdu_info.com_info.ppdu_id) {
1582*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP,
1583*5113495bSYour Name 			  QDF_TRACE_LEVEL_ERROR,
1584*5113495bSYour Name 			  "msdu_ppdu_id=%x,com_info.ppdu_id=%x",
1585*5113495bSYour Name 			  msdu_ppdu_id,
1586*5113495bSYour Name 			  mon_pdev->ppdu_info.com_info.ppdu_id);
1587*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1588*5113495bSYour Name 	}
1589*5113495bSYour Name 
1590*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1591*5113495bSYour Name }
1592*5113495bSYour Name 
1593*5113495bSYour Name /**
1594*5113495bSYour Name  * dp_monitor_get_rx_status() - get rx status
1595*5113495bSYour Name  * @pdev: point to dp pdev
1596*5113495bSYour Name  *
1597*5113495bSYour Name  * Return: return rx status pointer
1598*5113495bSYour Name  */
1599*5113495bSYour Name static inline struct mon_rx_status*
dp_monitor_get_rx_status(struct dp_pdev * pdev)1600*5113495bSYour Name dp_monitor_get_rx_status(struct dp_pdev *pdev)
1601*5113495bSYour Name {
1602*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1603*5113495bSYour Name 		return NULL;
1604*5113495bSYour Name 
1605*5113495bSYour Name 	return &pdev->monitor_pdev->ppdu_info.rx_status;
1606*5113495bSYour Name }
1607*5113495bSYour Name 
1608*5113495bSYour Name /**
1609*5113495bSYour Name  * dp_monitor_is_chan_band_known() - check if monitor chan band known
1610*5113495bSYour Name  * @pdev: point to dp pdev
1611*5113495bSYour Name  *
1612*5113495bSYour Name  * Return: true if chan band known
1613*5113495bSYour Name  */
dp_monitor_is_chan_band_known(struct dp_pdev * pdev)1614*5113495bSYour Name static inline bool dp_monitor_is_chan_band_known(struct dp_pdev *pdev)
1615*5113495bSYour Name {
1616*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1617*5113495bSYour Name 		return false;
1618*5113495bSYour Name 
1619*5113495bSYour Name 	if (pdev->monitor_pdev->mon_chan_band != REG_BAND_UNKNOWN)
1620*5113495bSYour Name 		return true;
1621*5113495bSYour Name 
1622*5113495bSYour Name 	return false;
1623*5113495bSYour Name }
1624*5113495bSYour Name 
1625*5113495bSYour Name /**
1626*5113495bSYour Name  * dp_monitor_get_chan_band() - get chan band
1627*5113495bSYour Name  * @pdev: point to dp pdev
1628*5113495bSYour Name  *
1629*5113495bSYour Name  * Return: wifi channel band
1630*5113495bSYour Name  */
1631*5113495bSYour Name static inline enum reg_wifi_band
dp_monitor_get_chan_band(struct dp_pdev * pdev)1632*5113495bSYour Name dp_monitor_get_chan_band(struct dp_pdev *pdev)
1633*5113495bSYour Name {
1634*5113495bSYour Name 	return pdev->monitor_pdev->mon_chan_band;
1635*5113495bSYour Name }
1636*5113495bSYour Name 
1637*5113495bSYour Name /**
1638*5113495bSYour Name  * dp_monitor_print_tx_stats() - print tx stats from monitor pdev
1639*5113495bSYour Name  * @pdev: point to dp pdev
1640*5113495bSYour Name  *
1641*5113495bSYour Name  */
dp_monitor_print_tx_stats(struct dp_pdev * pdev)1642*5113495bSYour Name static inline void dp_monitor_print_tx_stats(struct dp_pdev *pdev)
1643*5113495bSYour Name {
1644*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1645*5113495bSYour Name 		return;
1646*5113495bSYour Name 
1647*5113495bSYour Name 	DP_PRINT_STATS("ppdu info schedule completion list depth: %d",
1648*5113495bSYour Name 		       pdev->monitor_pdev->sched_comp_list_depth);
1649*5113495bSYour Name 	DP_PRINT_STATS("delivered sched cmdid: %d",
1650*5113495bSYour Name 		       pdev->monitor_pdev->delivered_sched_cmdid);
1651*5113495bSYour Name 	DP_PRINT_STATS("cur sched cmdid: %d",
1652*5113495bSYour Name 		       pdev->monitor_pdev->last_sched_cmdid);
1653*5113495bSYour Name 	DP_PRINT_STATS("ppdu info list depth: %d",
1654*5113495bSYour Name 		       pdev->monitor_pdev->list_depth);
1655*5113495bSYour Name }
1656*5113495bSYour Name 
1657*5113495bSYour Name /**
1658*5113495bSYour Name  * dp_monitor_set_chan_num() - set channel number
1659*5113495bSYour Name  * @pdev: point to dp pdev
1660*5113495bSYour Name  * @chan_num: channel number
1661*5113495bSYour Name  *
1662*5113495bSYour Name  */
dp_monitor_set_chan_num(struct dp_pdev * pdev,int chan_num)1663*5113495bSYour Name static inline void dp_monitor_set_chan_num(struct dp_pdev *pdev, int chan_num)
1664*5113495bSYour Name {
1665*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1666*5113495bSYour Name 		return;
1667*5113495bSYour Name 
1668*5113495bSYour Name 	pdev->monitor_pdev->mon_chan_num = chan_num;
1669*5113495bSYour Name }
1670*5113495bSYour Name 
1671*5113495bSYour Name /**
1672*5113495bSYour Name  * dp_monitor_get_chan_num() - get channel number
1673*5113495bSYour Name  * @pdev: DP pdev handle
1674*5113495bSYour Name  *
1675*5113495bSYour Name  * Return: channel number
1676*5113495bSYour Name  */
dp_monitor_get_chan_num(struct dp_pdev * pdev)1677*5113495bSYour Name static inline int dp_monitor_get_chan_num(struct dp_pdev *pdev)
1678*5113495bSYour Name {
1679*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1680*5113495bSYour Name 		return 0;
1681*5113495bSYour Name 
1682*5113495bSYour Name 	return pdev->monitor_pdev->mon_chan_num;
1683*5113495bSYour Name }
1684*5113495bSYour Name 
1685*5113495bSYour Name /**
1686*5113495bSYour Name  * dp_monitor_set_chan_freq() - set channel frequency
1687*5113495bSYour Name  * @pdev: point to dp pdev
1688*5113495bSYour Name  * @chan_freq: channel frequency
1689*5113495bSYour Name  *
1690*5113495bSYour Name  */
1691*5113495bSYour Name static inline void
dp_monitor_set_chan_freq(struct dp_pdev * pdev,qdf_freq_t chan_freq)1692*5113495bSYour Name dp_monitor_set_chan_freq(struct dp_pdev *pdev, qdf_freq_t chan_freq)
1693*5113495bSYour Name {
1694*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1695*5113495bSYour Name 		return;
1696*5113495bSYour Name 
1697*5113495bSYour Name 	pdev->monitor_pdev->mon_chan_freq = chan_freq;
1698*5113495bSYour Name }
1699*5113495bSYour Name 
1700*5113495bSYour Name /**
1701*5113495bSYour Name  * dp_monitor_get_chan_freq() - get channel frequency
1702*5113495bSYour Name  * @pdev: DP pdev handle
1703*5113495bSYour Name  *
1704*5113495bSYour Name  * Return: channel frequency
1705*5113495bSYour Name  */
1706*5113495bSYour Name static inline qdf_freq_t
dp_monitor_get_chan_freq(struct dp_pdev * pdev)1707*5113495bSYour Name dp_monitor_get_chan_freq(struct dp_pdev *pdev)
1708*5113495bSYour Name {
1709*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1710*5113495bSYour Name 		return 0;
1711*5113495bSYour Name 
1712*5113495bSYour Name 	return pdev->monitor_pdev->mon_chan_freq;
1713*5113495bSYour Name }
1714*5113495bSYour Name 
1715*5113495bSYour Name /**
1716*5113495bSYour Name  * dp_monitor_set_chan_band() - set channel band
1717*5113495bSYour Name  * @pdev: point to dp pdev
1718*5113495bSYour Name  * @chan_band: channel band
1719*5113495bSYour Name  *
1720*5113495bSYour Name  */
1721*5113495bSYour Name static inline void
dp_monitor_set_chan_band(struct dp_pdev * pdev,enum reg_wifi_band chan_band)1722*5113495bSYour Name dp_monitor_set_chan_band(struct dp_pdev *pdev, enum reg_wifi_band chan_band)
1723*5113495bSYour Name {
1724*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1725*5113495bSYour Name 		return;
1726*5113495bSYour Name 
1727*5113495bSYour Name 	pdev->monitor_pdev->mon_chan_band = chan_band;
1728*5113495bSYour Name }
1729*5113495bSYour Name 
1730*5113495bSYour Name /**
1731*5113495bSYour Name  * dp_monitor_get_mpdu_status() - get mpdu status
1732*5113495bSYour Name  * @pdev: point to dp pdev
1733*5113495bSYour Name  * @soc: point to dp soc
1734*5113495bSYour Name  * @rx_tlv_hdr: point to rx tlv header
1735*5113495bSYour Name  *
1736*5113495bSYour Name  */
dp_monitor_get_mpdu_status(struct dp_pdev * pdev,struct dp_soc * soc,uint8_t * rx_tlv_hdr)1737*5113495bSYour Name static inline void dp_monitor_get_mpdu_status(struct dp_pdev *pdev,
1738*5113495bSYour Name 					      struct dp_soc *soc,
1739*5113495bSYour Name 					      uint8_t *rx_tlv_hdr)
1740*5113495bSYour Name {
1741*5113495bSYour Name 	struct dp_mon_pdev *mon_pdev;
1742*5113495bSYour Name 
1743*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
1744*5113495bSYour Name 		return;
1745*5113495bSYour Name 
1746*5113495bSYour Name 	mon_pdev = pdev->monitor_pdev;
1747*5113495bSYour Name 	hal_rx_mon_hw_desc_get_mpdu_status(soc->hal_soc, rx_tlv_hdr,
1748*5113495bSYour Name 					   &mon_pdev->ppdu_info.rx_status);
1749*5113495bSYour Name }
1750*5113495bSYour Name 
1751*5113495bSYour Name #ifdef FEATURE_NAC_RSSI
1752*5113495bSYour Name /**
1753*5113495bSYour Name  * dp_monitor_drop_inv_peer_pkts() - drop invalid peer pkts
1754*5113495bSYour Name  * @vdev: point to dp vdev
1755*5113495bSYour Name  *
1756*5113495bSYour Name  * Return: success if sta mode and filter for neighbour peers enabled
1757*5113495bSYour Name  */
dp_monitor_drop_inv_peer_pkts(struct dp_vdev * vdev)1758*5113495bSYour Name static inline QDF_STATUS dp_monitor_drop_inv_peer_pkts(struct dp_vdev *vdev)
1759*5113495bSYour Name {
1760*5113495bSYour Name 	struct dp_pdev *pdev = vdev->pdev;
1761*5113495bSYour Name 	struct dp_soc *soc = pdev->soc;
1762*5113495bSYour Name 
1763*5113495bSYour Name 	if (!soc->monitor_soc)
1764*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1765*5113495bSYour Name 
1766*5113495bSYour Name 	if (!soc->monitor_soc->hw_nac_monitor_support &&
1767*5113495bSYour Name 	    pdev->monitor_pdev->filter_neighbour_peers &&
1768*5113495bSYour Name 	    vdev->opmode == wlan_op_mode_sta)
1769*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1770*5113495bSYour Name 
1771*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1772*5113495bSYour Name }
1773*5113495bSYour Name #else
dp_monitor_drop_inv_peer_pkts(struct dp_vdev * vdev)1774*5113495bSYour Name static inline QDF_STATUS dp_monitor_drop_inv_peer_pkts(struct dp_vdev *vdev)
1775*5113495bSYour Name {
1776*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1777*5113495bSYour Name }
1778*5113495bSYour Name #endif
1779*5113495bSYour Name 
1780*5113495bSYour Name /**
1781*5113495bSYour Name  * dp_peer_ppdu_delayed_ba_init() - Initialize ppdu in peer
1782*5113495bSYour Name  * @peer: Datapath peer
1783*5113495bSYour Name  *
1784*5113495bSYour Name  * return: void
1785*5113495bSYour Name  */
1786*5113495bSYour Name #ifdef FEATURE_PERPKT_INFO
dp_peer_ppdu_delayed_ba_init(struct dp_peer * peer)1787*5113495bSYour Name static inline void dp_peer_ppdu_delayed_ba_init(struct dp_peer *peer)
1788*5113495bSYour Name {
1789*5113495bSYour Name 	struct dp_mon_peer *mon_peer = peer->monitor_peer;
1790*5113495bSYour Name 
1791*5113495bSYour Name 	if (!mon_peer)
1792*5113495bSYour Name 		return;
1793*5113495bSYour Name 
1794*5113495bSYour Name 	qdf_mem_zero(&mon_peer->delayed_ba_ppdu_stats,
1795*5113495bSYour Name 		     sizeof(struct cdp_delayed_tx_completion_ppdu_user));
1796*5113495bSYour Name 	mon_peer->last_delayed_ba = false;
1797*5113495bSYour Name 	mon_peer->last_delayed_ba_ppduid = 0;
1798*5113495bSYour Name }
1799*5113495bSYour Name #else
dp_peer_ppdu_delayed_ba_init(struct dp_peer * peer)1800*5113495bSYour Name static inline void dp_peer_ppdu_delayed_ba_init(struct dp_peer *peer)
1801*5113495bSYour Name {
1802*5113495bSYour Name }
1803*5113495bSYour Name #endif
1804*5113495bSYour Name 
1805*5113495bSYour Name /**
1806*5113495bSYour Name  * dp_monitor_vdev_register_osif() - Register osif rx mon
1807*5113495bSYour Name  * @vdev: point to vdev
1808*5113495bSYour Name  * @txrx_ops: point to ol txrx ops
1809*5113495bSYour Name  *
1810*5113495bSYour Name  * Return: void
1811*5113495bSYour Name  */
dp_monitor_vdev_register_osif(struct dp_vdev * vdev,struct ol_txrx_ops * txrx_ops)1812*5113495bSYour Name static inline void dp_monitor_vdev_register_osif(struct dp_vdev *vdev,
1813*5113495bSYour Name 						 struct ol_txrx_ops *txrx_ops)
1814*5113495bSYour Name {
1815*5113495bSYour Name 	if (!vdev->monitor_vdev)
1816*5113495bSYour Name 		return;
1817*5113495bSYour Name 
1818*5113495bSYour Name 	vdev->monitor_vdev->osif_rx_mon = txrx_ops->rx.mon;
1819*5113495bSYour Name }
1820*5113495bSYour Name 
1821*5113495bSYour Name /**
1822*5113495bSYour Name  * dp_monitor_get_monitor_vdev_from_pdev() - Get monitor vdev
1823*5113495bSYour Name  * @pdev: point to pdev
1824*5113495bSYour Name  *
1825*5113495bSYour Name  * Return: pointer to vdev
1826*5113495bSYour Name  */
1827*5113495bSYour Name static inline struct dp_vdev*
dp_monitor_get_monitor_vdev_from_pdev(struct dp_pdev * pdev)1828*5113495bSYour Name dp_monitor_get_monitor_vdev_from_pdev(struct dp_pdev *pdev)
1829*5113495bSYour Name {
1830*5113495bSYour Name 	if (!pdev || !pdev->monitor_pdev || !pdev->monitor_pdev->mvdev)
1831*5113495bSYour Name 		return NULL;
1832*5113495bSYour Name 
1833*5113495bSYour Name 	return pdev->monitor_pdev->mvdev;
1834*5113495bSYour Name }
1835*5113495bSYour Name 
1836*5113495bSYour Name /**
1837*5113495bSYour Name  * dp_monitor_is_vdev_timer_running() - Get vdev timer status
1838*5113495bSYour Name  * @soc: point to soc
1839*5113495bSYour Name  *
1840*5113495bSYour Name  * Return: true if timer running
1841*5113495bSYour Name  */
dp_monitor_is_vdev_timer_running(struct dp_soc * soc)1842*5113495bSYour Name static inline bool dp_monitor_is_vdev_timer_running(struct dp_soc *soc)
1843*5113495bSYour Name {
1844*5113495bSYour Name 	if (qdf_unlikely(!soc || !soc->monitor_soc))
1845*5113495bSYour Name 		return false;
1846*5113495bSYour Name 
1847*5113495bSYour Name 	return !!(soc->monitor_soc->mon_vdev_timer_state &
1848*5113495bSYour Name 		  MON_VDEV_TIMER_RUNNING);
1849*5113495bSYour Name }
1850*5113495bSYour Name 
1851*5113495bSYour Name /**
1852*5113495bSYour Name  * dp_monitor_get_link_desc_pages() - Get link desc pages
1853*5113495bSYour Name  * @soc: point to soc
1854*5113495bSYour Name  * @mac_id: mac id
1855*5113495bSYour Name  *
1856*5113495bSYour Name  * Return: return point to link desc pages
1857*5113495bSYour Name  */
1858*5113495bSYour Name static inline struct qdf_mem_multi_page_t*
dp_monitor_get_link_desc_pages(struct dp_soc * soc,uint32_t mac_id)1859*5113495bSYour Name dp_monitor_get_link_desc_pages(struct dp_soc *soc, uint32_t mac_id)
1860*5113495bSYour Name {
1861*5113495bSYour Name 	if (qdf_unlikely(!soc || !soc->monitor_soc))
1862*5113495bSYour Name 		return NULL;
1863*5113495bSYour Name 
1864*5113495bSYour Name 	return &soc->monitor_soc->mon_link_desc_pages[mac_id];
1865*5113495bSYour Name }
1866*5113495bSYour Name 
1867*5113495bSYour Name #ifndef WLAN_SOFTUMAC_SUPPORT
1868*5113495bSYour Name /*
1869*5113495bSYour Name  * dp_monitor_get_link_desc_ring() - Get link desc ring
1870*5113495bSYour Name  * @soc: point to soc
1871*5113495bSYour Name  * @mac_id: mac id
1872*5113495bSYour Name  *
1873*5113495bSYour Name  * Return: return point to link desc ring
1874*5113495bSYour Name  */
1875*5113495bSYour Name static inline hal_ring_handle_t
dp_monitor_get_link_desc_ring(struct dp_soc * soc,uint32_t mac_id)1876*5113495bSYour Name dp_monitor_get_link_desc_ring(struct dp_soc *soc, uint32_t mac_id)
1877*5113495bSYour Name {
1878*5113495bSYour Name 	return soc->rxdma_mon_desc_ring[mac_id].hal_srng;
1879*5113495bSYour Name }
1880*5113495bSYour Name 
1881*5113495bSYour Name static inline uint32_t
dp_monitor_get_num_link_desc_ring_entries(struct dp_soc * soc,uint32_t mac_id)1882*5113495bSYour Name dp_monitor_get_num_link_desc_ring_entries(struct dp_soc *soc, uint32_t mac_id)
1883*5113495bSYour Name {
1884*5113495bSYour Name 	struct dp_srng *ring;
1885*5113495bSYour Name 
1886*5113495bSYour Name 	ring = &soc->rxdma_mon_desc_ring[mac_id];
1887*5113495bSYour Name 
1888*5113495bSYour Name 	return ring->alloc_size / hal_srng_get_entrysize(soc->hal_soc,
1889*5113495bSYour Name 							 RXDMA_MONITOR_DESC);
1890*5113495bSYour Name }
1891*5113495bSYour Name #else
1892*5113495bSYour Name static inline hal_ring_handle_t
dp_monitor_get_link_desc_ring(struct dp_soc * soc,uint32_t mac_id)1893*5113495bSYour Name dp_monitor_get_link_desc_ring(struct dp_soc *soc, uint32_t mac_id)
1894*5113495bSYour Name {
1895*5113495bSYour Name 	return soc->sw2rxdma_link_ring[mac_id].hal_srng;
1896*5113495bSYour Name }
1897*5113495bSYour Name 
1898*5113495bSYour Name static inline uint32_t
dp_monitor_get_num_link_desc_ring_entries(struct dp_soc * soc,uint32_t mac_id)1899*5113495bSYour Name dp_monitor_get_num_link_desc_ring_entries(struct dp_soc *soc, uint32_t mac_id)
1900*5113495bSYour Name {
1901*5113495bSYour Name 	struct dp_srng *ring;
1902*5113495bSYour Name 
1903*5113495bSYour Name 	ring = &soc->sw2rxdma_link_ring[mac_id];
1904*5113495bSYour Name 
1905*5113495bSYour Name 	return ring->alloc_size / hal_srng_get_entrysize(soc->hal_soc,
1906*5113495bSYour Name 							 SW2RXDMA_LINK_RELEASE);
1907*5113495bSYour Name }
1908*5113495bSYour Name #endif
1909*5113495bSYour Name 
1910*5113495bSYour Name /**
1911*5113495bSYour Name  * dp_monitor_get_total_link_descs() - Get total link descs
1912*5113495bSYour Name  * @soc: point to soc
1913*5113495bSYour Name  * @mac_id: mac id
1914*5113495bSYour Name  *
1915*5113495bSYour Name  * Return: return point total link descs
1916*5113495bSYour Name  */
1917*5113495bSYour Name static inline uint32_t *
dp_monitor_get_total_link_descs(struct dp_soc * soc,uint32_t mac_id)1918*5113495bSYour Name dp_monitor_get_total_link_descs(struct dp_soc *soc, uint32_t mac_id)
1919*5113495bSYour Name {
1920*5113495bSYour Name 	return &soc->monitor_soc->total_mon_link_descs[mac_id];
1921*5113495bSYour Name }
1922*5113495bSYour Name 
1923*5113495bSYour Name /**
1924*5113495bSYour Name  * dp_monitor_pdev_attach() - Monitor pdev attach
1925*5113495bSYour Name  * @pdev: point to pdev
1926*5113495bSYour Name  *
1927*5113495bSYour Name  * Return: return QDF_STATUS
1928*5113495bSYour Name  */
dp_monitor_pdev_attach(struct dp_pdev * pdev)1929*5113495bSYour Name static inline QDF_STATUS dp_monitor_pdev_attach(struct dp_pdev *pdev)
1930*5113495bSYour Name {
1931*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
1932*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
1933*5113495bSYour Name 
1934*5113495bSYour Name 	/*
1935*5113495bSYour Name 	 * mon_soc uninitialized modular support enabled
1936*5113495bSYour Name 	 * monitor related attach/detach/init/deinit
1937*5113495bSYour Name 	 * will be done while monitor insmod
1938*5113495bSYour Name 	 */
1939*5113495bSYour Name 	if (!mon_soc)
1940*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1941*5113495bSYour Name 
1942*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
1943*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_attach) {
1944*5113495bSYour Name 		dp_mon_debug("callback not registered");
1945*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1946*5113495bSYour Name 	}
1947*5113495bSYour Name 
1948*5113495bSYour Name 	return monitor_ops->mon_pdev_attach(pdev);
1949*5113495bSYour Name }
1950*5113495bSYour Name 
1951*5113495bSYour Name /**
1952*5113495bSYour Name  * dp_monitor_pdev_detach() - Monitor pdev detach
1953*5113495bSYour Name  * @pdev: point to pdev
1954*5113495bSYour Name  *
1955*5113495bSYour Name  * Return: return QDF_STATUS
1956*5113495bSYour Name  */
dp_monitor_pdev_detach(struct dp_pdev * pdev)1957*5113495bSYour Name static inline QDF_STATUS dp_monitor_pdev_detach(struct dp_pdev *pdev)
1958*5113495bSYour Name {
1959*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
1960*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
1961*5113495bSYour Name 
1962*5113495bSYour Name 	/*
1963*5113495bSYour Name 	 * mon_soc uninitialized modular support enabled
1964*5113495bSYour Name 	 * monitor related attach/detach/init/deinit
1965*5113495bSYour Name 	 * will be done while monitor insmod
1966*5113495bSYour Name 	 */
1967*5113495bSYour Name 	if (!mon_soc)
1968*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1969*5113495bSYour Name 
1970*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
1971*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_detach) {
1972*5113495bSYour Name 		dp_mon_debug("callback not registered");
1973*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1974*5113495bSYour Name 	}
1975*5113495bSYour Name 
1976*5113495bSYour Name 	return monitor_ops->mon_pdev_detach(pdev);
1977*5113495bSYour Name }
1978*5113495bSYour Name 
1979*5113495bSYour Name /**
1980*5113495bSYour Name  * dp_monitor_vdev_attach() - Monitor vdev attach
1981*5113495bSYour Name  * @vdev: point to vdev
1982*5113495bSYour Name  *
1983*5113495bSYour Name  * Return: return QDF_STATUS
1984*5113495bSYour Name  */
dp_monitor_vdev_attach(struct dp_vdev * vdev)1985*5113495bSYour Name static inline QDF_STATUS dp_monitor_vdev_attach(struct dp_vdev *vdev)
1986*5113495bSYour Name {
1987*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
1988*5113495bSYour Name 	struct dp_mon_soc *mon_soc = vdev->pdev->soc->monitor_soc;
1989*5113495bSYour Name 
1990*5113495bSYour Name 	if (!mon_soc)
1991*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1992*5113495bSYour Name 
1993*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
1994*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_attach) {
1995*5113495bSYour Name 		dp_mon_debug("callback not registered");
1996*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1997*5113495bSYour Name 	}
1998*5113495bSYour Name 
1999*5113495bSYour Name 	return monitor_ops->mon_vdev_attach(vdev);
2000*5113495bSYour Name }
2001*5113495bSYour Name 
2002*5113495bSYour Name /**
2003*5113495bSYour Name  * dp_monitor_vdev_detach() - Monitor vdev detach
2004*5113495bSYour Name  * @vdev: point to vdev
2005*5113495bSYour Name  *
2006*5113495bSYour Name  * Return: return QDF_STATUS
2007*5113495bSYour Name  */
dp_monitor_vdev_detach(struct dp_vdev * vdev)2008*5113495bSYour Name static inline QDF_STATUS dp_monitor_vdev_detach(struct dp_vdev *vdev)
2009*5113495bSYour Name {
2010*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2011*5113495bSYour Name 	struct dp_mon_soc *mon_soc = vdev->pdev->soc->monitor_soc;
2012*5113495bSYour Name 
2013*5113495bSYour Name 	if (!mon_soc)
2014*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2015*5113495bSYour Name 
2016*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2017*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_detach) {
2018*5113495bSYour Name 		dp_mon_debug("callback not registered");
2019*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2020*5113495bSYour Name 	}
2021*5113495bSYour Name 
2022*5113495bSYour Name 	return monitor_ops->mon_vdev_detach(vdev);
2023*5113495bSYour Name }
2024*5113495bSYour Name 
2025*5113495bSYour Name /**
2026*5113495bSYour Name  * dp_monitor_peer_attach() - Monitor peer attach
2027*5113495bSYour Name  * @soc: point to soc
2028*5113495bSYour Name  * @peer: point to peer
2029*5113495bSYour Name  *
2030*5113495bSYour Name  * Return: return QDF_STATUS
2031*5113495bSYour Name  */
dp_monitor_peer_attach(struct dp_soc * soc,struct dp_peer * peer)2032*5113495bSYour Name static inline QDF_STATUS dp_monitor_peer_attach(struct dp_soc *soc,
2033*5113495bSYour Name 						struct dp_peer *peer)
2034*5113495bSYour Name {
2035*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2036*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2037*5113495bSYour Name 
2038*5113495bSYour Name 	if (!mon_soc)
2039*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2040*5113495bSYour Name 
2041*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2042*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_attach) {
2043*5113495bSYour Name 		dp_mon_debug("callback not registered");
2044*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2045*5113495bSYour Name 	}
2046*5113495bSYour Name 
2047*5113495bSYour Name 	return monitor_ops->mon_peer_attach(peer);
2048*5113495bSYour Name }
2049*5113495bSYour Name 
2050*5113495bSYour Name /**
2051*5113495bSYour Name  * dp_monitor_peer_detach() - Monitor peer detach
2052*5113495bSYour Name  * @soc: point to soc
2053*5113495bSYour Name  * @peer: point to peer
2054*5113495bSYour Name  *
2055*5113495bSYour Name  * Return: return QDF_STATUS
2056*5113495bSYour Name  */
dp_monitor_peer_detach(struct dp_soc * soc,struct dp_peer * peer)2057*5113495bSYour Name static inline QDF_STATUS dp_monitor_peer_detach(struct dp_soc *soc,
2058*5113495bSYour Name 						struct dp_peer *peer)
2059*5113495bSYour Name {
2060*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2061*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2062*5113495bSYour Name 
2063*5113495bSYour Name 	if (!mon_soc)
2064*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2065*5113495bSYour Name 
2066*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2067*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_detach) {
2068*5113495bSYour Name 		dp_mon_debug("callback not registered");
2069*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2070*5113495bSYour Name 	}
2071*5113495bSYour Name 
2072*5113495bSYour Name 	return monitor_ops->mon_peer_detach(peer);
2073*5113495bSYour Name }
2074*5113495bSYour Name 
2075*5113495bSYour Name /**
2076*5113495bSYour Name  * dp_monitor_peer_get_peerstats_ctx() - Get peerstats context from monitor peer
2077*5113495bSYour Name  * @soc: Datapath soc handle
2078*5113495bSYour Name  * @peer: Datapath peer handle
2079*5113495bSYour Name  *
2080*5113495bSYour Name  * Return: peer stats context
2081*5113495bSYour Name  */
2082*5113495bSYour Name static inline struct cdp_peer_rate_stats_ctx*
dp_monitor_peer_get_peerstats_ctx(struct dp_soc * soc,struct dp_peer * peer)2083*5113495bSYour Name dp_monitor_peer_get_peerstats_ctx(struct dp_soc *soc, struct dp_peer *peer)
2084*5113495bSYour Name {
2085*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2086*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2087*5113495bSYour Name 
2088*5113495bSYour Name 	if (!mon_soc)
2089*5113495bSYour Name 		return NULL;
2090*5113495bSYour Name 
2091*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2092*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_get_peerstats_ctx) {
2093*5113495bSYour Name 		dp_mon_debug("callback not registered");
2094*5113495bSYour Name 		return NULL;
2095*5113495bSYour Name 	}
2096*5113495bSYour Name 
2097*5113495bSYour Name 	return monitor_ops->mon_peer_get_peerstats_ctx(peer);
2098*5113495bSYour Name }
2099*5113495bSYour Name 
2100*5113495bSYour Name /**
2101*5113495bSYour Name  * dp_monitor_peer_reset_stats() - Reset monitor peer stats
2102*5113495bSYour Name  * @soc: Datapath soc handle
2103*5113495bSYour Name  * @peer: Datapath peer handle
2104*5113495bSYour Name  *
2105*5113495bSYour Name  * Return: none
2106*5113495bSYour Name  */
dp_monitor_peer_reset_stats(struct dp_soc * soc,struct dp_peer * peer)2107*5113495bSYour Name static inline void dp_monitor_peer_reset_stats(struct dp_soc *soc,
2108*5113495bSYour Name 					       struct dp_peer *peer)
2109*5113495bSYour Name {
2110*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2111*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2112*5113495bSYour Name 
2113*5113495bSYour Name 	if (!mon_soc)
2114*5113495bSYour Name 		return;
2115*5113495bSYour Name 
2116*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2117*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_reset_stats) {
2118*5113495bSYour Name 		dp_mon_debug("callback not registered");
2119*5113495bSYour Name 		return;
2120*5113495bSYour Name 	}
2121*5113495bSYour Name 
2122*5113495bSYour Name 	monitor_ops->mon_peer_reset_stats(peer);
2123*5113495bSYour Name }
2124*5113495bSYour Name 
2125*5113495bSYour Name /**
2126*5113495bSYour Name  * dp_monitor_peer_get_stats() - Get monitor peer stats
2127*5113495bSYour Name  * @soc: Datapath soc handle
2128*5113495bSYour Name  * @peer: Datapath peer handle
2129*5113495bSYour Name  * @arg: Pointer to stats struct
2130*5113495bSYour Name  * @type: Update type
2131*5113495bSYour Name  *
2132*5113495bSYour Name  * Return: none
2133*5113495bSYour Name  */
2134*5113495bSYour Name static inline
dp_monitor_peer_get_stats(struct dp_soc * soc,struct dp_peer * peer,void * arg,enum cdp_stat_update_type type)2135*5113495bSYour Name void dp_monitor_peer_get_stats(struct dp_soc *soc, struct dp_peer *peer,
2136*5113495bSYour Name 			       void *arg, enum cdp_stat_update_type type)
2137*5113495bSYour Name {
2138*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2139*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2140*5113495bSYour Name 
2141*5113495bSYour Name 	if (!mon_soc)
2142*5113495bSYour Name 		return;
2143*5113495bSYour Name 
2144*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2145*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_get_stats) {
2146*5113495bSYour Name 		dp_mon_debug("callback not registered");
2147*5113495bSYour Name 		return;
2148*5113495bSYour Name 	}
2149*5113495bSYour Name 
2150*5113495bSYour Name 	monitor_ops->mon_peer_get_stats(peer, arg, type);
2151*5113495bSYour Name }
2152*5113495bSYour Name 
2153*5113495bSYour Name /**
2154*5113495bSYour Name  * dp_monitor_invalid_peer_update_pdev_stats() - Update pdev stats from
2155*5113495bSYour Name  *						invalid monitor peer
2156*5113495bSYour Name  * @soc: Datapath soc handle
2157*5113495bSYour Name  * @pdev: Datapath pdev handle
2158*5113495bSYour Name  *
2159*5113495bSYour Name  * Return: none
2160*5113495bSYour Name  */
2161*5113495bSYour Name static inline
dp_monitor_invalid_peer_update_pdev_stats(struct dp_soc * soc,struct dp_pdev * pdev)2162*5113495bSYour Name void dp_monitor_invalid_peer_update_pdev_stats(struct dp_soc *soc,
2163*5113495bSYour Name 					       struct dp_pdev *pdev)
2164*5113495bSYour Name {
2165*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2166*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2167*5113495bSYour Name 
2168*5113495bSYour Name 	if (!mon_soc)
2169*5113495bSYour Name 		return;
2170*5113495bSYour Name 
2171*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2172*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_invalid_peer_update_pdev_stats) {
2173*5113495bSYour Name 		dp_mon_debug("callback not registered");
2174*5113495bSYour Name 		return;
2175*5113495bSYour Name 	}
2176*5113495bSYour Name 
2177*5113495bSYour Name 	monitor_ops->mon_invalid_peer_update_pdev_stats(pdev);
2178*5113495bSYour Name }
2179*5113495bSYour Name 
2180*5113495bSYour Name /**
2181*5113495bSYour Name  * dp_monitor_peer_get_stats_param() - Get stats param value from monitor peer
2182*5113495bSYour Name  * @soc: Datapath soc handle
2183*5113495bSYour Name  * @peer: Datapath peer handle
2184*5113495bSYour Name  * @type: Stats type requested
2185*5113495bSYour Name  * @buf: Pointer to buffer for stats param
2186*5113495bSYour Name  *
2187*5113495bSYour Name  * Return: QDF_STATUS
2188*5113495bSYour Name  */
2189*5113495bSYour Name static inline QDF_STATUS
dp_monitor_peer_get_stats_param(struct dp_soc * soc,struct dp_peer * peer,enum cdp_peer_stats_type type,cdp_peer_stats_param_t * buf)2190*5113495bSYour Name dp_monitor_peer_get_stats_param(struct dp_soc *soc, struct dp_peer *peer,
2191*5113495bSYour Name 				enum cdp_peer_stats_type type,
2192*5113495bSYour Name 				cdp_peer_stats_param_t *buf)
2193*5113495bSYour Name {
2194*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2195*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2196*5113495bSYour Name 
2197*5113495bSYour Name 	if (!mon_soc)
2198*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2199*5113495bSYour Name 
2200*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2201*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_get_stats_param) {
2202*5113495bSYour Name 		dp_mon_debug("callback not registered");
2203*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2204*5113495bSYour Name 	}
2205*5113495bSYour Name 
2206*5113495bSYour Name 	return monitor_ops->mon_peer_get_stats_param(peer, type, buf);
2207*5113495bSYour Name }
2208*5113495bSYour Name 
2209*5113495bSYour Name /**
2210*5113495bSYour Name  * dp_monitor_pdev_init() - Monitor pdev init
2211*5113495bSYour Name  * @pdev: point to pdev
2212*5113495bSYour Name  *
2213*5113495bSYour Name  * Return: return QDF_STATUS
2214*5113495bSYour Name  */
dp_monitor_pdev_init(struct dp_pdev * pdev)2215*5113495bSYour Name static inline QDF_STATUS dp_monitor_pdev_init(struct dp_pdev *pdev)
2216*5113495bSYour Name {
2217*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2218*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2219*5113495bSYour Name 
2220*5113495bSYour Name 	/*
2221*5113495bSYour Name 	 * mon_soc uninitialized when modular support enabled
2222*5113495bSYour Name 	 * monitor related attach/detach/init/deinit
2223*5113495bSYour Name 	 * will be done while monitor insmod
2224*5113495bSYour Name 	 */
2225*5113495bSYour Name 	if (!mon_soc)
2226*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2227*5113495bSYour Name 
2228*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2229*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_init) {
2230*5113495bSYour Name 		dp_mon_debug("callback not registered");
2231*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2232*5113495bSYour Name 	}
2233*5113495bSYour Name 
2234*5113495bSYour Name 	return monitor_ops->mon_pdev_init(pdev);
2235*5113495bSYour Name }
2236*5113495bSYour Name 
2237*5113495bSYour Name /**
2238*5113495bSYour Name  * dp_monitor_pdev_deinit() - Monitor pdev deinit
2239*5113495bSYour Name  * @pdev: point to pdev
2240*5113495bSYour Name  *
2241*5113495bSYour Name  * Return: return QDF_STATUS
2242*5113495bSYour Name  */
dp_monitor_pdev_deinit(struct dp_pdev * pdev)2243*5113495bSYour Name static inline QDF_STATUS dp_monitor_pdev_deinit(struct dp_pdev *pdev)
2244*5113495bSYour Name {
2245*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2246*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2247*5113495bSYour Name 
2248*5113495bSYour Name 	/*
2249*5113495bSYour Name 	 * mon_soc uninitialized modular when support enabled
2250*5113495bSYour Name 	 * monitor related attach/detach/init/deinit
2251*5113495bSYour Name 	 * will be done while monitor insmod
2252*5113495bSYour Name 	 */
2253*5113495bSYour Name 	if (!mon_soc)
2254*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2255*5113495bSYour Name 
2256*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2257*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_deinit) {
2258*5113495bSYour Name 		dp_mon_debug("callback not registered");
2259*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2260*5113495bSYour Name 	}
2261*5113495bSYour Name 
2262*5113495bSYour Name 	return monitor_ops->mon_pdev_deinit(pdev);
2263*5113495bSYour Name }
2264*5113495bSYour Name 
2265*5113495bSYour Name /**
2266*5113495bSYour Name  * dp_monitor_soc_cfg_init() - Monitor sco cfg init
2267*5113495bSYour Name  * @soc: point to soc
2268*5113495bSYour Name  *
2269*5113495bSYour Name  * Return: return QDF_STATUS
2270*5113495bSYour Name  */
dp_monitor_soc_cfg_init(struct dp_soc * soc)2271*5113495bSYour Name static inline QDF_STATUS dp_monitor_soc_cfg_init(struct dp_soc *soc)
2272*5113495bSYour Name {
2273*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2274*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2275*5113495bSYour Name 
2276*5113495bSYour Name 	/*
2277*5113495bSYour Name 	 * this API is getting call from dp_soc_init,
2278*5113495bSYour Name 	 * mon_soc will be uninitialized when monitor support enabled
2279*5113495bSYour Name 	 * So returning QDF_STATUS_SUCCESS.
2280*5113495bSYour Name 	 * soc cfg init will be done while monitor insmod.
2281*5113495bSYour Name 	 */
2282*5113495bSYour Name 	if (!mon_soc)
2283*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2284*5113495bSYour Name 
2285*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2286*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_soc_cfg_init) {
2287*5113495bSYour Name 		dp_mon_debug("callback not registered");
2288*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2289*5113495bSYour Name 	}
2290*5113495bSYour Name 
2291*5113495bSYour Name 	return monitor_ops->mon_soc_cfg_init(soc);
2292*5113495bSYour Name }
2293*5113495bSYour Name 
2294*5113495bSYour Name /**
2295*5113495bSYour Name  * dp_monitor_config_debug_sniffer() - Monitor config debug sniffer
2296*5113495bSYour Name  * @pdev: point to pdev
2297*5113495bSYour Name  * @val: val
2298*5113495bSYour Name  *
2299*5113495bSYour Name  * Return: return QDF_STATUS
2300*5113495bSYour Name  */
dp_monitor_config_debug_sniffer(struct dp_pdev * pdev,int val)2301*5113495bSYour Name static inline QDF_STATUS dp_monitor_config_debug_sniffer(struct dp_pdev *pdev,
2302*5113495bSYour Name 							 int val)
2303*5113495bSYour Name {
2304*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2305*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2306*5113495bSYour Name 
2307*5113495bSYour Name 	if (!mon_soc)
2308*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2309*5113495bSYour Name 
2310*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2311*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_config_debug_sniffer) {
2312*5113495bSYour Name 		dp_mon_debug("callback not registered");
2313*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2314*5113495bSYour Name 	}
2315*5113495bSYour Name 
2316*5113495bSYour Name 	return monitor_ops->mon_config_debug_sniffer(pdev, val);
2317*5113495bSYour Name }
2318*5113495bSYour Name 
2319*5113495bSYour Name /**
2320*5113495bSYour Name  * dp_monitor_flush_rings() - Flush monitor rings
2321*5113495bSYour Name  * @soc: point to soc
2322*5113495bSYour Name  *
2323*5113495bSYour Name  * Return: None
2324*5113495bSYour Name  */
dp_monitor_flush_rings(struct dp_soc * soc)2325*5113495bSYour Name static inline void dp_monitor_flush_rings(struct dp_soc *soc)
2326*5113495bSYour Name {
2327*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2328*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2329*5113495bSYour Name 
2330*5113495bSYour Name 	if (!mon_soc) {
2331*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2332*5113495bSYour Name 		return;
2333*5113495bSYour Name 	}
2334*5113495bSYour Name 
2335*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2336*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_flush_rings) {
2337*5113495bSYour Name 		dp_mon_debug("callback not registered");
2338*5113495bSYour Name 		return;
2339*5113495bSYour Name 	}
2340*5113495bSYour Name 
2341*5113495bSYour Name 	return monitor_ops->mon_flush_rings(soc);
2342*5113495bSYour Name }
2343*5113495bSYour Name 
2344*5113495bSYour Name /**
2345*5113495bSYour Name  * dp_monitor_config_undecoded_metadata_capture() - Monitor config
2346*5113495bSYour Name  * undecoded metadata capture
2347*5113495bSYour Name  * @pdev: point to pdev
2348*5113495bSYour Name  * @val: val
2349*5113495bSYour Name  *
2350*5113495bSYour Name  * Return: return QDF_STATUS
2351*5113495bSYour Name  */
2352*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
2353*5113495bSYour Name static inline
dp_monitor_config_undecoded_metadata_capture(struct dp_pdev * pdev,int val)2354*5113495bSYour Name QDF_STATUS dp_monitor_config_undecoded_metadata_capture(struct dp_pdev *pdev,
2355*5113495bSYour Name 							int val)
2356*5113495bSYour Name {
2357*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2358*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2359*5113495bSYour Name 
2360*5113495bSYour Name 	if (!mon_soc)
2361*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2362*5113495bSYour Name 
2363*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2364*5113495bSYour Name 	if (!monitor_ops ||
2365*5113495bSYour Name 	    !monitor_ops->mon_config_undecoded_metadata_capture) {
2366*5113495bSYour Name 		dp_mon_debug("callback not registered");
2367*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2368*5113495bSYour Name 	}
2369*5113495bSYour Name 
2370*5113495bSYour Name 	return monitor_ops->mon_config_undecoded_metadata_capture(pdev, val);
2371*5113495bSYour Name }
2372*5113495bSYour Name 
2373*5113495bSYour Name static inline QDF_STATUS
dp_monitor_config_undecoded_metadata_phyrx_error_mask(struct dp_pdev * pdev,int mask,int mask_cont)2374*5113495bSYour Name dp_monitor_config_undecoded_metadata_phyrx_error_mask(struct dp_pdev *pdev,
2375*5113495bSYour Name 						      int mask, int mask_cont)
2376*5113495bSYour Name {
2377*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2378*5113495bSYour Name 	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
2379*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2380*5113495bSYour Name 
2381*5113495bSYour Name 	if (!mon_soc)
2382*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2383*5113495bSYour Name 
2384*5113495bSYour Name 	if (!mon_pdev)
2385*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2386*5113495bSYour Name 
2387*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2388*5113495bSYour Name 	if (!monitor_ops ||
2389*5113495bSYour Name 	    !monitor_ops->mon_config_undecoded_metadata_capture) {
2390*5113495bSYour Name 		dp_mon_debug("callback not registered");
2391*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2392*5113495bSYour Name 	}
2393*5113495bSYour Name 
2394*5113495bSYour Name 	if (!mon_pdev->undecoded_metadata_capture) {
2395*5113495bSYour Name 		qdf_info("mask:0x%x mask_cont:0x%x", mask, mask_cont);
2396*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2397*5113495bSYour Name 	}
2398*5113495bSYour Name 
2399*5113495bSYour Name 	mon_pdev->phyrx_error_mask = mask;
2400*5113495bSYour Name 	mon_pdev->phyrx_error_mask_cont = mask_cont;
2401*5113495bSYour Name 
2402*5113495bSYour Name 	return monitor_ops->mon_config_undecoded_metadata_capture(pdev, 1);
2403*5113495bSYour Name }
2404*5113495bSYour Name 
2405*5113495bSYour Name static inline QDF_STATUS
dp_monitor_get_undecoded_metadata_phyrx_error_mask(struct dp_pdev * pdev,int * mask,int * mask_cont)2406*5113495bSYour Name dp_monitor_get_undecoded_metadata_phyrx_error_mask(struct dp_pdev *pdev,
2407*5113495bSYour Name 						   int *mask, int *mask_cont)
2408*5113495bSYour Name {
2409*5113495bSYour Name 	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
2410*5113495bSYour Name 
2411*5113495bSYour Name 	if (!mon_pdev)
2412*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2413*5113495bSYour Name 
2414*5113495bSYour Name 	*mask = mon_pdev->phyrx_error_mask;
2415*5113495bSYour Name 	*mask_cont = mon_pdev->phyrx_error_mask_cont;
2416*5113495bSYour Name 
2417*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2418*5113495bSYour Name }
2419*5113495bSYour Name #else
2420*5113495bSYour Name static inline
dp_monitor_config_undecoded_metadata_capture(struct dp_pdev * pdev,int val)2421*5113495bSYour Name QDF_STATUS dp_monitor_config_undecoded_metadata_capture(struct dp_pdev *pdev,
2422*5113495bSYour Name 							int val)
2423*5113495bSYour Name {
2424*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2425*5113495bSYour Name }
2426*5113495bSYour Name 
2427*5113495bSYour Name static inline QDF_STATUS
dp_monitor_config_undecoded_metadata_phyrx_error_mask(struct dp_pdev * pdev,int mask1,int mask2)2428*5113495bSYour Name dp_monitor_config_undecoded_metadata_phyrx_error_mask(struct dp_pdev *pdev,
2429*5113495bSYour Name 						      int mask1, int mask2)
2430*5113495bSYour Name {
2431*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2432*5113495bSYour Name }
2433*5113495bSYour Name 
2434*5113495bSYour Name static inline QDF_STATUS
dp_monitor_get_undecoded_metadata_phyrx_error_mask(struct dp_pdev * pdev,int * mask,int * mask_cont)2435*5113495bSYour Name dp_monitor_get_undecoded_metadata_phyrx_error_mask(struct dp_pdev *pdev,
2436*5113495bSYour Name 						   int *mask, int *mask_cont)
2437*5113495bSYour Name {
2438*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2439*5113495bSYour Name }
2440*5113495bSYour Name #endif /* QCA_UNDECODED_METADATA_SUPPORT */
2441*5113495bSYour Name 
2442*5113495bSYour Name /**
2443*5113495bSYour Name  * dp_monitor_htt_srng_setup() - Setup htt srng
2444*5113495bSYour Name  * @soc: point to soc
2445*5113495bSYour Name  * @pdev: point to pdev
2446*5113495bSYour Name  * @mac_id: lmac id
2447*5113495bSYour Name  * @mac_for_pdev: pdev id
2448*5113495bSYour Name  *
2449*5113495bSYour Name  * Return: QDF_STATUS
2450*5113495bSYour Name  */
2451*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG)
dp_monitor_htt_srng_setup(struct dp_soc * soc,struct dp_pdev * pdev,int mac_id,int mac_for_pdev)2452*5113495bSYour Name static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,
2453*5113495bSYour Name 						   struct dp_pdev *pdev,
2454*5113495bSYour Name 						   int mac_id,
2455*5113495bSYour Name 						   int mac_for_pdev)
2456*5113495bSYour Name {
2457*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2458*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2459*5113495bSYour Name 	QDF_STATUS status = QDF_STATUS_SUCCESS;
2460*5113495bSYour Name 
2461*5113495bSYour Name 	if (!mon_soc) {
2462*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2463*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2464*5113495bSYour Name 	}
2465*5113495bSYour Name 
2466*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2467*5113495bSYour Name 	if (!monitor_ops) {
2468*5113495bSYour Name 		dp_mon_err("monitor_ops is NULL");
2469*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2470*5113495bSYour Name 	}
2471*5113495bSYour Name 
2472*5113495bSYour Name 	if (monitor_ops->mon_pdev_htt_srng_setup[0]) {
2473*5113495bSYour Name 		status = monitor_ops->mon_pdev_htt_srng_setup[0](soc, pdev,
2474*5113495bSYour Name 							mac_id, mac_for_pdev);
2475*5113495bSYour Name 		if (QDF_IS_STATUS_ERROR(status)) {
2476*5113495bSYour Name 			dp_mon_err("error: %d", status);
2477*5113495bSYour Name 			goto error;
2478*5113495bSYour Name 		}
2479*5113495bSYour Name 	}
2480*5113495bSYour Name 
2481*5113495bSYour Name 	if (monitor_ops->mon_pdev_htt_srng_setup[1]) {
2482*5113495bSYour Name 		status = monitor_ops->mon_pdev_htt_srng_setup[1](soc, pdev,
2483*5113495bSYour Name 							mac_id, mac_for_pdev);
2484*5113495bSYour Name 		if (QDF_IS_STATUS_ERROR(status)) {
2485*5113495bSYour Name 			dp_mon_err("error: %d", status);
2486*5113495bSYour Name 			goto error;
2487*5113495bSYour Name 		}
2488*5113495bSYour Name 	}
2489*5113495bSYour Name 
2490*5113495bSYour Name error:
2491*5113495bSYour Name 	return status;
2492*5113495bSYour Name }
2493*5113495bSYour Name 
dp_monitor_soc_htt_srng_setup(struct dp_soc * soc)2494*5113495bSYour Name static inline QDF_STATUS dp_monitor_soc_htt_srng_setup(struct dp_soc *soc)
2495*5113495bSYour Name {
2496*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2497*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2498*5113495bSYour Name 
2499*5113495bSYour Name 	if (!mon_soc) {
2500*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2501*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2502*5113495bSYour Name 	}
2503*5113495bSYour Name 
2504*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2505*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_soc_htt_srng_setup) {
2506*5113495bSYour Name 		dp_mon_debug("callback not registered");
2507*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2508*5113495bSYour Name 	}
2509*5113495bSYour Name 
2510*5113495bSYour Name 	return monitor_ops->mon_soc_htt_srng_setup(soc);
2511*5113495bSYour Name }
2512*5113495bSYour Name #else
dp_monitor_htt_srng_setup(struct dp_soc * soc,struct dp_pdev * pdev,int mac_id,int mac_for_pdev)2513*5113495bSYour Name static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,
2514*5113495bSYour Name 						   struct dp_pdev *pdev,
2515*5113495bSYour Name 						   int mac_id,
2516*5113495bSYour Name 						   int mac_for_pdev)
2517*5113495bSYour Name {
2518*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2519*5113495bSYour Name }
2520*5113495bSYour Name #endif
2521*5113495bSYour Name 
2522*5113495bSYour Name /**
2523*5113495bSYour Name  * dp_monitor_service_mon_rings() - service monitor rings
2524*5113495bSYour Name  * @soc: point to soc
2525*5113495bSYour Name  * @quota: reap budget
2526*5113495bSYour Name  *
2527*5113495bSYour Name  * Return: None
2528*5113495bSYour Name  */
2529*5113495bSYour Name #if defined(DP_CON_MON)
2530*5113495bSYour Name static inline
dp_monitor_service_mon_rings(struct dp_soc * soc,uint32_t quota)2531*5113495bSYour Name void dp_monitor_service_mon_rings(struct dp_soc *soc, uint32_t quota)
2532*5113495bSYour Name {
2533*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2534*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2535*5113495bSYour Name 
2536*5113495bSYour Name 	if (!mon_soc) {
2537*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2538*5113495bSYour Name 		return;
2539*5113495bSYour Name 	}
2540*5113495bSYour Name 
2541*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2542*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_service_rings) {
2543*5113495bSYour Name 		dp_mon_debug("callback not registered");
2544*5113495bSYour Name 		return;
2545*5113495bSYour Name 	}
2546*5113495bSYour Name 
2547*5113495bSYour Name 	return monitor_ops->mon_service_rings(soc, quota);
2548*5113495bSYour Name }
2549*5113495bSYour Name #endif
2550*5113495bSYour Name 
2551*5113495bSYour Name /**
2552*5113495bSYour Name  * dp_monitor_process() - Process monitor
2553*5113495bSYour Name  * @soc: point to soc
2554*5113495bSYour Name  * @int_ctx: interrupt ctx
2555*5113495bSYour Name  * @mac_id: lma
2556*5113495bSYour Name  * @quota:
2557*5113495bSYour Name  *
2558*5113495bSYour Name  * Return: None
2559*5113495bSYour Name  */
2560*5113495bSYour Name #ifndef DISABLE_MON_CONFIG
2561*5113495bSYour Name static inline
dp_monitor_process(struct dp_soc * soc,struct dp_intr * int_ctx,uint32_t mac_id,uint32_t quota)2562*5113495bSYour Name uint32_t dp_monitor_process(struct dp_soc *soc, struct dp_intr *int_ctx,
2563*5113495bSYour Name 			       uint32_t mac_id, uint32_t quota)
2564*5113495bSYour Name {
2565*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2566*5113495bSYour Name 
2567*5113495bSYour Name 	if (!mon_soc) {
2568*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2569*5113495bSYour Name 		return 0;
2570*5113495bSYour Name 	}
2571*5113495bSYour Name 
2572*5113495bSYour Name 	if (!mon_soc->mon_rx_process) {
2573*5113495bSYour Name 		dp_mon_debug("callback not registered");
2574*5113495bSYour Name 		return 0;
2575*5113495bSYour Name 	}
2576*5113495bSYour Name 
2577*5113495bSYour Name 	return mon_soc->mon_rx_process(soc, int_ctx, mac_id, quota);
2578*5113495bSYour Name }
2579*5113495bSYour Name 
2580*5113495bSYour Name static inline
dp_tx_mon_process(struct dp_soc * soc,struct dp_intr * int_ctx,uint32_t mac_id,uint32_t quota)2581*5113495bSYour Name uint32_t dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
2582*5113495bSYour Name 			   uint32_t mac_id, uint32_t quota)
2583*5113495bSYour Name {
2584*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2585*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2586*5113495bSYour Name 
2587*5113495bSYour Name 	if (!mon_soc) {
2588*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2589*5113495bSYour Name 		return 0;
2590*5113495bSYour Name 	}
2591*5113495bSYour Name 
2592*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2593*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_process) {
2594*5113495bSYour Name 		dp_mon_debug("callback not registered");
2595*5113495bSYour Name 		return 0;
2596*5113495bSYour Name 	}
2597*5113495bSYour Name 
2598*5113495bSYour Name 	return monitor_ops->mon_tx_process(soc, int_ctx, mac_id, quota);
2599*5113495bSYour Name }
2600*5113495bSYour Name 
2601*5113495bSYour Name static inline
dp_tx_mon_buf_refill(struct dp_intr * int_ctx)2602*5113495bSYour Name uint32_t dp_tx_mon_buf_refill(struct dp_intr *int_ctx)
2603*5113495bSYour Name {
2604*5113495bSYour Name 	struct dp_soc *soc = int_ctx->soc;
2605*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2606*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2607*5113495bSYour Name 
2608*5113495bSYour Name 	if (!mon_soc) {
2609*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2610*5113495bSYour Name 		return 0;
2611*5113495bSYour Name 	}
2612*5113495bSYour Name 
2613*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2614*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->tx_mon_refill_buf_ring) {
2615*5113495bSYour Name 		dp_mon_debug("callback not registered");
2616*5113495bSYour Name 		return 0;
2617*5113495bSYour Name 	}
2618*5113495bSYour Name 
2619*5113495bSYour Name 	return monitor_ops->tx_mon_refill_buf_ring(int_ctx);
2620*5113495bSYour Name }
2621*5113495bSYour Name 
2622*5113495bSYour Name static inline
dp_rx_mon_buf_refill(struct dp_intr * int_ctx)2623*5113495bSYour Name uint32_t dp_rx_mon_buf_refill(struct dp_intr *int_ctx)
2624*5113495bSYour Name {
2625*5113495bSYour Name 	struct dp_soc *soc = int_ctx->soc;
2626*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2627*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2628*5113495bSYour Name 
2629*5113495bSYour Name 	if (!mon_soc) {
2630*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2631*5113495bSYour Name 		return 0;
2632*5113495bSYour Name 	}
2633*5113495bSYour Name 
2634*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2635*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_mon_refill_buf_ring) {
2636*5113495bSYour Name 		dp_mon_debug("callback not registered");
2637*5113495bSYour Name 		return 0;
2638*5113495bSYour Name 	}
2639*5113495bSYour Name 
2640*5113495bSYour Name 	return monitor_ops->rx_mon_refill_buf_ring(int_ctx);
2641*5113495bSYour Name }
2642*5113495bSYour Name 
2643*5113495bSYour Name static inline
dp_print_txmon_ring_stat_from_hal(struct dp_pdev * pdev)2644*5113495bSYour Name void dp_print_txmon_ring_stat_from_hal(struct dp_pdev *pdev)
2645*5113495bSYour Name {
2646*5113495bSYour Name 	struct dp_soc *soc = pdev->soc;
2647*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2648*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2649*5113495bSYour Name 
2650*5113495bSYour Name 	if (!mon_soc) {
2651*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2652*5113495bSYour Name 		return;
2653*5113495bSYour Name 	}
2654*5113495bSYour Name 
2655*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2656*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->print_txmon_ring_stat) {
2657*5113495bSYour Name 		dp_mon_debug("callback not registered");
2658*5113495bSYour Name 		return;
2659*5113495bSYour Name 	}
2660*5113495bSYour Name 
2661*5113495bSYour Name 	monitor_ops->print_txmon_ring_stat(pdev);
2662*5113495bSYour Name }
2663*5113495bSYour Name 
2664*5113495bSYour Name #else
2665*5113495bSYour Name static inline
dp_monitor_process(struct dp_soc * soc,struct dp_intr * int_ctx,uint32_t mac_id,uint32_t quota)2666*5113495bSYour Name uint32_t dp_monitor_process(struct dp_soc *soc, struct dp_intr *int_ctx,
2667*5113495bSYour Name 			       uint32_t mac_id, uint32_t quota)
2668*5113495bSYour Name {
2669*5113495bSYour Name 	return 0;
2670*5113495bSYour Name }
2671*5113495bSYour Name 
2672*5113495bSYour Name static inline uint32_t
dp_tx_mon_process(struct dp_soc * soc,struct dp_intr * int_ctx,uint32_t mac_id,uint32_t quota)2673*5113495bSYour Name dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
2674*5113495bSYour Name 		  uint32_t mac_id, uint32_t quota)
2675*5113495bSYour Name {
2676*5113495bSYour Name 	return 0;
2677*5113495bSYour Name }
2678*5113495bSYour Name 
2679*5113495bSYour Name static inline
dp_tx_mon_buf_refill(struct dp_intr * int_ctx)2680*5113495bSYour Name uint32_t dp_tx_mon_buf_refill(struct dp_intr *int_ctx)
2681*5113495bSYour Name {
2682*5113495bSYour Name 	return 0;
2683*5113495bSYour Name }
2684*5113495bSYour Name 
2685*5113495bSYour Name static inline
dp_rx_mon_buf_refill(struct dp_intr * int_ctx)2686*5113495bSYour Name uint32_t dp_rx_mon_buf_refill(struct dp_intr *int_ctx)
2687*5113495bSYour Name {
2688*5113495bSYour Name 	return 0;
2689*5113495bSYour Name }
2690*5113495bSYour Name 
2691*5113495bSYour Name static inline
dp_print_txmon_ring_stat_from_hal(struct dp_pdev * pdev)2692*5113495bSYour Name void dp_print_txmon_ring_stat_from_hal(struct dp_pdev *pdev)
2693*5113495bSYour Name {
2694*5113495bSYour Name }
2695*5113495bSYour Name #endif
2696*5113495bSYour Name 
2697*5113495bSYour Name /**
2698*5113495bSYour Name  * dp_monitor_drop_packets_for_mac() - monitor_drop_packets_for_mac
2699*5113495bSYour Name  * @pdev: point to pdev
2700*5113495bSYour Name  * @mac_id:
2701*5113495bSYour Name  * @quota:
2702*5113495bSYour Name  *
2703*5113495bSYour Name  * Return:
2704*5113495bSYour Name  */
2705*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
2706*5113495bSYour Name static inline
dp_monitor_drop_packets_for_mac(struct dp_pdev * pdev,uint32_t mac_id,uint32_t quota)2707*5113495bSYour Name uint32_t dp_monitor_drop_packets_for_mac(struct dp_pdev *pdev,
2708*5113495bSYour Name 					 uint32_t mac_id, uint32_t quota)
2709*5113495bSYour Name {
2710*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2711*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2712*5113495bSYour Name 
2713*5113495bSYour Name 	if (!mon_soc) {
2714*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2715*5113495bSYour Name 		return 0;
2716*5113495bSYour Name 	}
2717*5113495bSYour Name 
2718*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2719*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_drop_packets_for_mac) {
2720*5113495bSYour Name 		dp_mon_debug("callback not registered");
2721*5113495bSYour Name 		return 0;
2722*5113495bSYour Name 	}
2723*5113495bSYour Name 
2724*5113495bSYour Name 	return monitor_ops->mon_drop_packets_for_mac(pdev,
2725*5113495bSYour Name 						     mac_id, quota, false);
2726*5113495bSYour Name }
2727*5113495bSYour Name #else
2728*5113495bSYour Name static inline
dp_monitor_drop_packets_for_mac(struct dp_pdev * pdev,uint32_t mac_id,uint32_t quota)2729*5113495bSYour Name uint32_t dp_monitor_drop_packets_for_mac(struct dp_pdev *pdev,
2730*5113495bSYour Name 					 uint32_t mac_id, uint32_t quota)
2731*5113495bSYour Name {
2732*5113495bSYour Name 	return 0;
2733*5113495bSYour Name }
2734*5113495bSYour Name #endif
2735*5113495bSYour Name 
2736*5113495bSYour Name /**
2737*5113495bSYour Name  * dp_monitor_peer_tx_init() - peer tx init
2738*5113495bSYour Name  * @pdev: point to pdev
2739*5113495bSYour Name  * @peer: point to peer
2740*5113495bSYour Name  *
2741*5113495bSYour Name  * Return: None
2742*5113495bSYour Name  */
dp_monitor_peer_tx_init(struct dp_pdev * pdev,struct dp_peer * peer)2743*5113495bSYour Name static inline void dp_monitor_peer_tx_init(struct dp_pdev *pdev,
2744*5113495bSYour Name 					   struct dp_peer *peer)
2745*5113495bSYour Name {
2746*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2747*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2748*5113495bSYour Name 
2749*5113495bSYour Name 	if (!mon_soc) {
2750*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2751*5113495bSYour Name 		return;
2752*5113495bSYour Name 	}
2753*5113495bSYour Name 
2754*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2755*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_tx_init) {
2756*5113495bSYour Name 		dp_mon_debug("callback not registered");
2757*5113495bSYour Name 		return;
2758*5113495bSYour Name 	}
2759*5113495bSYour Name 
2760*5113495bSYour Name 	return monitor_ops->mon_peer_tx_init(pdev, peer);
2761*5113495bSYour Name }
2762*5113495bSYour Name 
2763*5113495bSYour Name /**
2764*5113495bSYour Name  * dp_monitor_peer_tx_cleanup() - peer tx cleanup
2765*5113495bSYour Name  * @vdev: point to vdev
2766*5113495bSYour Name  * @peer: point to peer
2767*5113495bSYour Name  *
2768*5113495bSYour Name  * Return: None
2769*5113495bSYour Name  */
dp_monitor_peer_tx_cleanup(struct dp_vdev * vdev,struct dp_peer * peer)2770*5113495bSYour Name static inline void dp_monitor_peer_tx_cleanup(struct dp_vdev *vdev,
2771*5113495bSYour Name 					      struct dp_peer *peer)
2772*5113495bSYour Name {
2773*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2774*5113495bSYour Name 	struct dp_mon_soc *mon_soc = vdev->pdev->soc->monitor_soc;
2775*5113495bSYour Name 
2776*5113495bSYour Name 	if (!mon_soc) {
2777*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2778*5113495bSYour Name 		return;
2779*5113495bSYour Name 	}
2780*5113495bSYour Name 
2781*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2782*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_tx_cleanup) {
2783*5113495bSYour Name 		dp_mon_debug("callback not registered");
2784*5113495bSYour Name 		return;
2785*5113495bSYour Name 	}
2786*5113495bSYour Name 
2787*5113495bSYour Name 	return monitor_ops->mon_peer_tx_cleanup(vdev, peer);
2788*5113495bSYour Name }
2789*5113495bSYour Name 
2790*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
2791*5113495bSYour Name /**
2792*5113495bSYour Name  * dp_monitor_peer_tid_peer_id_update() - peer tid update
2793*5113495bSYour Name  * @soc: point to soc
2794*5113495bSYour Name  * @peer: point to peer
2795*5113495bSYour Name  * @peer_id: peer id
2796*5113495bSYour Name  *
2797*5113495bSYour Name  * Return: None
2798*5113495bSYour Name  */
2799*5113495bSYour Name static inline
dp_monitor_peer_tid_peer_id_update(struct dp_soc * soc,struct dp_peer * peer,uint16_t peer_id)2800*5113495bSYour Name void dp_monitor_peer_tid_peer_id_update(struct dp_soc *soc,
2801*5113495bSYour Name 					struct dp_peer *peer,
2802*5113495bSYour Name 					uint16_t peer_id)
2803*5113495bSYour Name {
2804*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2805*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2806*5113495bSYour Name 
2807*5113495bSYour Name 	if (!mon_soc) {
2808*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2809*5113495bSYour Name 		return;
2810*5113495bSYour Name 	}
2811*5113495bSYour Name 
2812*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2813*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_tid_peer_id_update) {
2814*5113495bSYour Name 		dp_mon_debug("callback not registered");
2815*5113495bSYour Name 		return;
2816*5113495bSYour Name 	}
2817*5113495bSYour Name 
2818*5113495bSYour Name 	return monitor_ops->mon_peer_tid_peer_id_update(peer, peer_id);
2819*5113495bSYour Name }
2820*5113495bSYour Name 
2821*5113495bSYour Name /**
2822*5113495bSYour Name  * dp_monitor_tx_ppdu_stats_attach() - Attach tx ppdu stats
2823*5113495bSYour Name  * @pdev: point to pdev
2824*5113495bSYour Name  *
2825*5113495bSYour Name  * Return: None
2826*5113495bSYour Name  */
dp_monitor_tx_ppdu_stats_attach(struct dp_pdev * pdev)2827*5113495bSYour Name static inline void dp_monitor_tx_ppdu_stats_attach(struct dp_pdev *pdev)
2828*5113495bSYour Name {
2829*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2830*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2831*5113495bSYour Name 
2832*5113495bSYour Name 	if (!mon_soc) {
2833*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2834*5113495bSYour Name 		return;
2835*5113495bSYour Name 	}
2836*5113495bSYour Name 
2837*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2838*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_ppdu_stats_attach) {
2839*5113495bSYour Name 		dp_mon_debug("callback not registered");
2840*5113495bSYour Name 		return;
2841*5113495bSYour Name 	}
2842*5113495bSYour Name 
2843*5113495bSYour Name 	return monitor_ops->mon_tx_ppdu_stats_attach(pdev);
2844*5113495bSYour Name }
2845*5113495bSYour Name 
2846*5113495bSYour Name /**
2847*5113495bSYour Name  * dp_monitor_tx_ppdu_stats_detach() - Detach tx ppdu stats
2848*5113495bSYour Name  * @pdev: point to pdev
2849*5113495bSYour Name  *
2850*5113495bSYour Name  * Return: None
2851*5113495bSYour Name  */
dp_monitor_tx_ppdu_stats_detach(struct dp_pdev * pdev)2852*5113495bSYour Name static inline void dp_monitor_tx_ppdu_stats_detach(struct dp_pdev *pdev)
2853*5113495bSYour Name {
2854*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2855*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2856*5113495bSYour Name 
2857*5113495bSYour Name 	if (!mon_soc) {
2858*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2859*5113495bSYour Name 		return;
2860*5113495bSYour Name 	}
2861*5113495bSYour Name 
2862*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2863*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_ppdu_stats_detach) {
2864*5113495bSYour Name 		dp_mon_debug("callback not registered");
2865*5113495bSYour Name 		return;
2866*5113495bSYour Name 	}
2867*5113495bSYour Name 
2868*5113495bSYour Name 	return monitor_ops->mon_tx_ppdu_stats_detach(pdev);
2869*5113495bSYour Name }
2870*5113495bSYour Name 
2871*5113495bSYour Name /**
2872*5113495bSYour Name  * dp_monitor_tx_capture_debugfs_init() - Init tx capture debugfs
2873*5113495bSYour Name  * @pdev: point to pdev
2874*5113495bSYour Name  *
2875*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS
2876*5113495bSYour Name  */
2877*5113495bSYour Name static inline
dp_monitor_tx_capture_debugfs_init(struct dp_pdev * pdev)2878*5113495bSYour Name QDF_STATUS dp_monitor_tx_capture_debugfs_init(struct dp_pdev *pdev)
2879*5113495bSYour Name {
2880*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2881*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2882*5113495bSYour Name 
2883*5113495bSYour Name 	if (!mon_soc) {
2884*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2885*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2886*5113495bSYour Name 	}
2887*5113495bSYour Name 
2888*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2889*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_capture_debugfs_init) {
2890*5113495bSYour Name 		dp_mon_debug("callback not registered");
2891*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2892*5113495bSYour Name 	}
2893*5113495bSYour Name 
2894*5113495bSYour Name 	return monitor_ops->mon_tx_capture_debugfs_init(pdev);
2895*5113495bSYour Name }
2896*5113495bSYour Name 
2897*5113495bSYour Name /**
2898*5113495bSYour Name  * dp_monitor_peer_tx_capture_filter_check() - Check tx capture filter
2899*5113495bSYour Name  * @pdev: point to pdev
2900*5113495bSYour Name  * @peer: point to peer
2901*5113495bSYour Name  *
2902*5113495bSYour Name  * Return: None
2903*5113495bSYour Name  */
dp_monitor_peer_tx_capture_filter_check(struct dp_pdev * pdev,struct dp_peer * peer)2904*5113495bSYour Name static inline void dp_monitor_peer_tx_capture_filter_check(struct dp_pdev *pdev,
2905*5113495bSYour Name 							   struct dp_peer *peer)
2906*5113495bSYour Name {
2907*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2908*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
2909*5113495bSYour Name 
2910*5113495bSYour Name 	if (!mon_soc) {
2911*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2912*5113495bSYour Name 		return;
2913*5113495bSYour Name 	}
2914*5113495bSYour Name 
2915*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2916*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_tx_capture_filter_check) {
2917*5113495bSYour Name 		dp_mon_debug("callback not registered");
2918*5113495bSYour Name 		return;
2919*5113495bSYour Name 	}
2920*5113495bSYour Name 
2921*5113495bSYour Name 	return monitor_ops->mon_peer_tx_capture_filter_check(pdev, peer);
2922*5113495bSYour Name }
2923*5113495bSYour Name 
2924*5113495bSYour Name /**
2925*5113495bSYour Name  * dp_monitor_tx_add_to_comp_queue() - add completion msdu to queue
2926*5113495bSYour Name  *
2927*5113495bSYour Name  * This API returns QDF_STATUS_SUCCESS in case where buffer is added
2928*5113495bSYour Name  * to txmonitor queue successfully caller will not free the buffer in
2929*5113495bSYour Name  * this case. In other cases this API return QDF_STATUS_E_FAILURE and
2930*5113495bSYour Name  * caller frees the buffer
2931*5113495bSYour Name  *
2932*5113495bSYour Name  * @soc: point to soc
2933*5113495bSYour Name  * @desc: point to tx desc
2934*5113495bSYour Name  * @ts: Tx completion status from HAL/HTT descriptor
2935*5113495bSYour Name  * @peer_id: DP peer id
2936*5113495bSYour Name  *
2937*5113495bSYour Name  * Return: QDF_STATUS
2938*5113495bSYour Name  *
2939*5113495bSYour Name  */
2940*5113495bSYour Name static inline
dp_monitor_tx_add_to_comp_queue(struct dp_soc * soc,struct dp_tx_desc_s * desc,struct hal_tx_completion_status * ts,uint16_t peer_id)2941*5113495bSYour Name QDF_STATUS dp_monitor_tx_add_to_comp_queue(struct dp_soc *soc,
2942*5113495bSYour Name 					   struct dp_tx_desc_s *desc,
2943*5113495bSYour Name 					   struct hal_tx_completion_status *ts,
2944*5113495bSYour Name 					   uint16_t peer_id)
2945*5113495bSYour Name {
2946*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2947*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2948*5113495bSYour Name 
2949*5113495bSYour Name 	if (!mon_soc) {
2950*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2951*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2952*5113495bSYour Name 	}
2953*5113495bSYour Name 
2954*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2955*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_add_to_comp_queue) {
2956*5113495bSYour Name 		dp_mon_debug("callback not registered");
2957*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2958*5113495bSYour Name 	}
2959*5113495bSYour Name 
2960*5113495bSYour Name 	return monitor_ops->mon_tx_add_to_comp_queue(soc, desc, ts, peer_id);
2961*5113495bSYour Name }
2962*5113495bSYour Name 
2963*5113495bSYour Name static inline
monitor_update_msdu_to_list(struct dp_soc * soc,struct dp_pdev * pdev,struct dp_peer * peer,struct hal_tx_completion_status * ts,qdf_nbuf_t netbuf)2964*5113495bSYour Name QDF_STATUS monitor_update_msdu_to_list(struct dp_soc *soc,
2965*5113495bSYour Name 				       struct dp_pdev *pdev,
2966*5113495bSYour Name 				       struct dp_peer *peer,
2967*5113495bSYour Name 				       struct hal_tx_completion_status *ts,
2968*5113495bSYour Name 				       qdf_nbuf_t netbuf)
2969*5113495bSYour Name {
2970*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
2971*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
2972*5113495bSYour Name 
2973*5113495bSYour Name 	if (!mon_soc) {
2974*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
2975*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
2976*5113495bSYour Name 	}
2977*5113495bSYour Name 
2978*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
2979*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_update_msdu_to_list) {
2980*5113495bSYour Name 		dp_mon_debug("callback not registered");
2981*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
2982*5113495bSYour Name 	}
2983*5113495bSYour Name 
2984*5113495bSYour Name 	return monitor_ops->mon_update_msdu_to_list(soc, pdev,
2985*5113495bSYour Name 						    peer, ts, netbuf);
2986*5113495bSYour Name }
2987*5113495bSYour Name 
2988*5113495bSYour Name /**
2989*5113495bSYour Name  * dp_monitor_peer_tx_capture_get_stats - to get Peer Tx Capture stats
2990*5113495bSYour Name  * @soc: DP SOC handle
2991*5113495bSYour Name  * @peer: DP PEER handle
2992*5113495bSYour Name  * @stats: Pointer Peer tx capture stats
2993*5113495bSYour Name  *
2994*5113495bSYour Name  * Return: QDF_STATUS_E_FAILURE or QDF_STATUS_SUCCESS
2995*5113495bSYour Name  */
2996*5113495bSYour Name static inline QDF_STATUS
dp_monitor_peer_tx_capture_get_stats(struct dp_soc * soc,struct dp_peer * peer,struct cdp_peer_tx_capture_stats * stats)2997*5113495bSYour Name dp_monitor_peer_tx_capture_get_stats(struct dp_soc *soc, struct dp_peer *peer,
2998*5113495bSYour Name 				     struct cdp_peer_tx_capture_stats *stats)
2999*5113495bSYour Name {
3000*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3001*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3002*5113495bSYour Name 
3003*5113495bSYour Name 	if (!mon_soc) {
3004*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3005*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3006*5113495bSYour Name 	}
3007*5113495bSYour Name 
3008*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3009*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_peer_tx_capture_get_stats) {
3010*5113495bSYour Name 		dp_mon_debug("callback not registered");
3011*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3012*5113495bSYour Name 	}
3013*5113495bSYour Name 
3014*5113495bSYour Name 	return monitor_ops->mon_peer_tx_capture_get_stats(peer, stats);
3015*5113495bSYour Name }
3016*5113495bSYour Name 
3017*5113495bSYour Name /**
3018*5113495bSYour Name  * dp_monitor_pdev_tx_capture_get_stats - to get pdev tx capture stats
3019*5113495bSYour Name  * @soc: DP SOC handle
3020*5113495bSYour Name  * @pdev: DP PDEV handle
3021*5113495bSYour Name  * @stats: Pointer to pdev tx capture stats
3022*5113495bSYour Name  *
3023*5113495bSYour Name  * Return: QDF_STATUS_E_FAILURE or QDF_STATUS_SUCCESS
3024*5113495bSYour Name  */
3025*5113495bSYour Name static inline QDF_STATUS
dp_monitor_pdev_tx_capture_get_stats(struct dp_soc * soc,struct dp_pdev * pdev,struct cdp_pdev_tx_capture_stats * stats)3026*5113495bSYour Name dp_monitor_pdev_tx_capture_get_stats(struct dp_soc *soc, struct dp_pdev *pdev,
3027*5113495bSYour Name 				     struct cdp_pdev_tx_capture_stats *stats)
3028*5113495bSYour Name {
3029*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3030*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3031*5113495bSYour Name 
3032*5113495bSYour Name 	if (!mon_soc) {
3033*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3034*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3035*5113495bSYour Name 	}
3036*5113495bSYour Name 
3037*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3038*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_tx_capture_get_stats) {
3039*5113495bSYour Name 		dp_mon_debug("callback not registered");
3040*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3041*5113495bSYour Name 	}
3042*5113495bSYour Name 
3043*5113495bSYour Name 	return monitor_ops->mon_pdev_tx_capture_get_stats(pdev, stats);
3044*5113495bSYour Name }
3045*5113495bSYour Name #else
3046*5113495bSYour Name static inline
dp_monitor_peer_tid_peer_id_update(struct dp_soc * soc,struct dp_peer * peer,uint16_t peer_id)3047*5113495bSYour Name void dp_monitor_peer_tid_peer_id_update(struct dp_soc *soc,
3048*5113495bSYour Name 					struct dp_peer *peer,
3049*5113495bSYour Name 					uint16_t peer_id)
3050*5113495bSYour Name {
3051*5113495bSYour Name }
3052*5113495bSYour Name 
dp_monitor_tx_ppdu_stats_attach(struct dp_pdev * pdev)3053*5113495bSYour Name static inline void dp_monitor_tx_ppdu_stats_attach(struct dp_pdev *pdev)
3054*5113495bSYour Name {
3055*5113495bSYour Name }
3056*5113495bSYour Name 
dp_monitor_tx_ppdu_stats_detach(struct dp_pdev * pdev)3057*5113495bSYour Name static inline void dp_monitor_tx_ppdu_stats_detach(struct dp_pdev *pdev)
3058*5113495bSYour Name {
3059*5113495bSYour Name }
3060*5113495bSYour Name 
3061*5113495bSYour Name static inline
dp_monitor_tx_capture_debugfs_init(struct dp_pdev * pdev)3062*5113495bSYour Name QDF_STATUS dp_monitor_tx_capture_debugfs_init(struct dp_pdev *pdev)
3063*5113495bSYour Name {
3064*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3065*5113495bSYour Name }
3066*5113495bSYour Name 
dp_monitor_peer_tx_capture_filter_check(struct dp_pdev * pdev,struct dp_peer * peer)3067*5113495bSYour Name static inline void dp_monitor_peer_tx_capture_filter_check(struct dp_pdev *pdev,
3068*5113495bSYour Name 							   struct dp_peer *peer)
3069*5113495bSYour Name {
3070*5113495bSYour Name }
3071*5113495bSYour Name 
3072*5113495bSYour Name static inline
dp_monitor_tx_add_to_comp_queue(struct dp_soc * soc,struct dp_tx_desc_s * desc,struct hal_tx_completion_status * ts,uint16_t peer_id)3073*5113495bSYour Name QDF_STATUS dp_monitor_tx_add_to_comp_queue(struct dp_soc *soc,
3074*5113495bSYour Name 					   struct dp_tx_desc_s *desc,
3075*5113495bSYour Name 					   struct hal_tx_completion_status *ts,
3076*5113495bSYour Name 					   uint16_t peer_id)
3077*5113495bSYour Name {
3078*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3079*5113495bSYour Name }
3080*5113495bSYour Name 
3081*5113495bSYour Name static inline
monitor_update_msdu_to_list(struct dp_soc * soc,struct dp_pdev * pdev,struct dp_peer * peer,struct hal_tx_completion_status * ts,qdf_nbuf_t netbuf)3082*5113495bSYour Name QDF_STATUS monitor_update_msdu_to_list(struct dp_soc *soc,
3083*5113495bSYour Name 				       struct dp_pdev *pdev,
3084*5113495bSYour Name 				       struct dp_peer *peer,
3085*5113495bSYour Name 				       struct hal_tx_completion_status *ts,
3086*5113495bSYour Name 				       qdf_nbuf_t netbuf)
3087*5113495bSYour Name {
3088*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3089*5113495bSYour Name }
3090*5113495bSYour Name 
3091*5113495bSYour Name static inline QDF_STATUS
dp_monitor_peer_tx_capture_get_stats(struct dp_soc * soc,struct dp_peer * peer,struct cdp_peer_tx_capture_stats * stats)3092*5113495bSYour Name dp_monitor_peer_tx_capture_get_stats(struct dp_soc *soc, struct dp_peer *peer,
3093*5113495bSYour Name 				     struct cdp_peer_tx_capture_stats *stats)
3094*5113495bSYour Name {
3095*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3096*5113495bSYour Name }
3097*5113495bSYour Name 
3098*5113495bSYour Name static inline QDF_STATUS
dp_monitor_pdev_tx_capture_get_stats(struct dp_soc * soc,struct dp_pdev * pdev,struct cdp_pdev_tx_capture_stats * stats)3099*5113495bSYour Name dp_monitor_pdev_tx_capture_get_stats(struct dp_soc *soc, struct dp_pdev *pdev,
3100*5113495bSYour Name 				     struct cdp_pdev_tx_capture_stats *stats)
3101*5113495bSYour Name {
3102*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3103*5113495bSYour Name }
3104*5113495bSYour Name #endif
3105*5113495bSYour Name 
3106*5113495bSYour Name /**
3107*5113495bSYour Name  * dp_monitor_ppdu_stats_ind_handler() - PPDU stats msg handler
3108*5113495bSYour Name  * @soc:     HTT SOC handle
3109*5113495bSYour Name  * @msg_word:    Pointer to payload
3110*5113495bSYour Name  * @htt_t2h_msg: HTT msg nbuf
3111*5113495bSYour Name  *
3112*5113495bSYour Name  * Return: True if buffer should be freed by caller.
3113*5113495bSYour Name  */
3114*5113495bSYour Name #if defined(WDI_EVENT_ENABLE) &&\
3115*5113495bSYour Name 	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG) ||\
3116*5113495bSYour Name 	 defined(WLAN_FEATURE_PKT_CAPTURE_V2))
dp_monitor_ppdu_stats_ind_handler(struct htt_soc * soc,uint32_t * msg_word,qdf_nbuf_t htt_t2h_msg)3117*5113495bSYour Name static inline bool dp_monitor_ppdu_stats_ind_handler(struct htt_soc *soc,
3118*5113495bSYour Name 						     uint32_t *msg_word,
3119*5113495bSYour Name 						     qdf_nbuf_t htt_t2h_msg)
3120*5113495bSYour Name {
3121*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3122*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->dp_soc->monitor_soc;
3123*5113495bSYour Name 
3124*5113495bSYour Name 	if (!mon_soc) {
3125*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3126*5113495bSYour Name 		return true;
3127*5113495bSYour Name 	}
3128*5113495bSYour Name 
3129*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3130*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_ppdu_stats_ind_handler) {
3131*5113495bSYour Name 		dp_mon_debug("callback not registered");
3132*5113495bSYour Name 		return true;
3133*5113495bSYour Name 	}
3134*5113495bSYour Name 
3135*5113495bSYour Name 	return monitor_ops->mon_ppdu_stats_ind_handler(soc, msg_word,
3136*5113495bSYour Name 						       htt_t2h_msg);
3137*5113495bSYour Name }
3138*5113495bSYour Name #else
dp_monitor_ppdu_stats_ind_handler(struct htt_soc * soc,uint32_t * msg_word,qdf_nbuf_t htt_t2h_msg)3139*5113495bSYour Name static inline bool dp_monitor_ppdu_stats_ind_handler(struct htt_soc *soc,
3140*5113495bSYour Name 						     uint32_t *msg_word,
3141*5113495bSYour Name 						     qdf_nbuf_t htt_t2h_msg)
3142*5113495bSYour Name {
3143*5113495bSYour Name 	return true;
3144*5113495bSYour Name }
3145*5113495bSYour Name #endif
3146*5113495bSYour Name 
3147*5113495bSYour Name /**
3148*5113495bSYour Name  * dp_monitor_htt_ppdu_stats_attach() - attach resources for HTT PPDU
3149*5113495bSYour Name  * stats processing
3150*5113495bSYour Name  * @pdev: Datapath PDEV handle
3151*5113495bSYour Name  *
3152*5113495bSYour Name  * Return: QDF_STATUS
3153*5113495bSYour Name  */
dp_monitor_htt_ppdu_stats_attach(struct dp_pdev * pdev)3154*5113495bSYour Name static inline QDF_STATUS dp_monitor_htt_ppdu_stats_attach(struct dp_pdev *pdev)
3155*5113495bSYour Name {
3156*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3157*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3158*5113495bSYour Name 
3159*5113495bSYour Name 	if (!mon_soc) {
3160*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3161*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
3162*5113495bSYour Name 	}
3163*5113495bSYour Name 
3164*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3165*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_htt_ppdu_stats_attach) {
3166*5113495bSYour Name 		dp_mon_debug("callback not registered");
3167*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3168*5113495bSYour Name 	}
3169*5113495bSYour Name 
3170*5113495bSYour Name 	return monitor_ops->mon_htt_ppdu_stats_attach(pdev);
3171*5113495bSYour Name }
3172*5113495bSYour Name 
3173*5113495bSYour Name /**
3174*5113495bSYour Name  * dp_monitor_htt_ppdu_stats_detach() - detach stats resources
3175*5113495bSYour Name  * @pdev: Datapath PDEV handle
3176*5113495bSYour Name  *
3177*5113495bSYour Name  * Return: void
3178*5113495bSYour Name  */
dp_monitor_htt_ppdu_stats_detach(struct dp_pdev * pdev)3179*5113495bSYour Name static inline void dp_monitor_htt_ppdu_stats_detach(struct dp_pdev *pdev)
3180*5113495bSYour Name {
3181*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3182*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3183*5113495bSYour Name 
3184*5113495bSYour Name 	if (!mon_soc) {
3185*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3186*5113495bSYour Name 		return;
3187*5113495bSYour Name 	}
3188*5113495bSYour Name 
3189*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3190*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_htt_ppdu_stats_detach) {
3191*5113495bSYour Name 		dp_mon_debug("callback not registered");
3192*5113495bSYour Name 		return;
3193*5113495bSYour Name 	}
3194*5113495bSYour Name 
3195*5113495bSYour Name 	return monitor_ops->mon_htt_ppdu_stats_detach(pdev);
3196*5113495bSYour Name }
3197*5113495bSYour Name 
3198*5113495bSYour Name /**
3199*5113495bSYour Name  * dp_monitor_print_pdev_rx_mon_stats() - print rx mon stats
3200*5113495bSYour Name  * @pdev: Datapath PDEV handle
3201*5113495bSYour Name  *
3202*5113495bSYour Name  * Return: void
3203*5113495bSYour Name  */
dp_monitor_print_pdev_rx_mon_stats(struct dp_pdev * pdev)3204*5113495bSYour Name static inline void dp_monitor_print_pdev_rx_mon_stats(struct dp_pdev *pdev)
3205*5113495bSYour Name {
3206*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3207*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3208*5113495bSYour Name 
3209*5113495bSYour Name 	if (!mon_soc) {
3210*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3211*5113495bSYour Name 		return;
3212*5113495bSYour Name 	}
3213*5113495bSYour Name 
3214*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3215*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_print_pdev_rx_mon_stats) {
3216*5113495bSYour Name 		dp_mon_debug("callback not registered");
3217*5113495bSYour Name 		return;
3218*5113495bSYour Name 	}
3219*5113495bSYour Name 
3220*5113495bSYour Name 	return monitor_ops->mon_print_pdev_rx_mon_stats(pdev);
3221*5113495bSYour Name }
3222*5113495bSYour Name 
3223*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
3224*5113495bSYour Name /**
3225*5113495bSYour Name  * dp_monitor_print_pdev_tx_capture_stats() - print tx capture stats
3226*5113495bSYour Name  * @pdev: Datapath PDEV handle
3227*5113495bSYour Name  *
3228*5113495bSYour Name  * Return: void
3229*5113495bSYour Name  */
dp_monitor_print_pdev_tx_capture_stats(struct dp_pdev * pdev)3230*5113495bSYour Name static inline void dp_monitor_print_pdev_tx_capture_stats(struct dp_pdev *pdev)
3231*5113495bSYour Name {
3232*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3233*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3234*5113495bSYour Name 
3235*5113495bSYour Name 	if (!mon_soc) {
3236*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3237*5113495bSYour Name 		return;
3238*5113495bSYour Name 	}
3239*5113495bSYour Name 
3240*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3241*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_print_pdev_tx_capture_stats) {
3242*5113495bSYour Name 		dp_mon_debug("callback not registered");
3243*5113495bSYour Name 		return;
3244*5113495bSYour Name 	}
3245*5113495bSYour Name 
3246*5113495bSYour Name 	return monitor_ops->mon_print_pdev_tx_capture_stats(pdev);
3247*5113495bSYour Name }
3248*5113495bSYour Name 
3249*5113495bSYour Name /**
3250*5113495bSYour Name  * dp_monitor_config_enh_tx_capture() - configure tx capture
3251*5113495bSYour Name  * @pdev: Datapath PDEV handle
3252*5113495bSYour Name  * @val: mode
3253*5113495bSYour Name  *
3254*5113495bSYour Name  * Return: status
3255*5113495bSYour Name  */
dp_monitor_config_enh_tx_capture(struct dp_pdev * pdev,uint32_t val)3256*5113495bSYour Name static inline QDF_STATUS dp_monitor_config_enh_tx_capture(struct dp_pdev *pdev,
3257*5113495bSYour Name 							  uint32_t val)
3258*5113495bSYour Name {
3259*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3260*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3261*5113495bSYour Name 
3262*5113495bSYour Name 	if (!mon_soc) {
3263*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3264*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3265*5113495bSYour Name 	}
3266*5113495bSYour Name 
3267*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3268*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_config_enh_tx_capture) {
3269*5113495bSYour Name 		dp_mon_debug("callback not registered");
3270*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3271*5113495bSYour Name 	}
3272*5113495bSYour Name 
3273*5113495bSYour Name 	return monitor_ops->mon_config_enh_tx_capture(pdev, val);
3274*5113495bSYour Name }
3275*5113495bSYour Name 
3276*5113495bSYour Name /**
3277*5113495bSYour Name  * dp_monitor_tx_peer_filter() -  add tx monitor peer filter
3278*5113495bSYour Name  * @pdev: Datapath PDEV handle
3279*5113495bSYour Name  * @peer: Datapath PEER handle
3280*5113495bSYour Name  * @is_tx_pkt_cap_enable: flag for tx capture enable/disable
3281*5113495bSYour Name  * @peer_mac: peer mac address
3282*5113495bSYour Name  *
3283*5113495bSYour Name  * Return: status
3284*5113495bSYour Name  */
dp_monitor_tx_peer_filter(struct dp_pdev * pdev,struct dp_peer * peer,uint8_t is_tx_pkt_cap_enable,uint8_t * peer_mac)3285*5113495bSYour Name static inline QDF_STATUS dp_monitor_tx_peer_filter(struct dp_pdev *pdev,
3286*5113495bSYour Name 						   struct dp_peer *peer,
3287*5113495bSYour Name 						   uint8_t is_tx_pkt_cap_enable,
3288*5113495bSYour Name 						   uint8_t *peer_mac)
3289*5113495bSYour Name {
3290*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3291*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3292*5113495bSYour Name 
3293*5113495bSYour Name 	if (!mon_soc) {
3294*5113495bSYour Name 		qdf_err("monitor soc is NULL");
3295*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3296*5113495bSYour Name 	}
3297*5113495bSYour Name 
3298*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3299*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_tx_peer_filter) {
3300*5113495bSYour Name 		qdf_err("callback not registered");
3301*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3302*5113495bSYour Name 	}
3303*5113495bSYour Name 
3304*5113495bSYour Name 	return monitor_ops->mon_tx_peer_filter(pdev, peer, is_tx_pkt_cap_enable,
3305*5113495bSYour Name 					       peer_mac);
3306*5113495bSYour Name }
3307*5113495bSYour Name #endif
3308*5113495bSYour Name 
3309*5113495bSYour Name #ifdef WLAN_RX_PKT_CAPTURE_ENH
dp_monitor_config_enh_rx_capture(struct dp_pdev * pdev,uint32_t val)3310*5113495bSYour Name static inline QDF_STATUS dp_monitor_config_enh_rx_capture(struct dp_pdev *pdev,
3311*5113495bSYour Name 							  uint32_t val)
3312*5113495bSYour Name {
3313*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3314*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3315*5113495bSYour Name 
3316*5113495bSYour Name 	if (!mon_soc) {
3317*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3318*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3319*5113495bSYour Name 	}
3320*5113495bSYour Name 
3321*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3322*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_config_enh_rx_capture) {
3323*5113495bSYour Name 		dp_mon_debug("callback not registered");
3324*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3325*5113495bSYour Name 	}
3326*5113495bSYour Name 
3327*5113495bSYour Name 	return monitor_ops->mon_config_enh_rx_capture(pdev, val);
3328*5113495bSYour Name }
3329*5113495bSYour Name #else
dp_monitor_config_enh_rx_capture(struct dp_pdev * pdev,uint32_t val)3330*5113495bSYour Name static inline QDF_STATUS dp_monitor_config_enh_rx_capture(struct dp_pdev *pdev,
3331*5113495bSYour Name 							  uint32_t val)
3332*5113495bSYour Name {
3333*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
3334*5113495bSYour Name }
3335*5113495bSYour Name #endif
3336*5113495bSYour Name 
3337*5113495bSYour Name #ifdef QCA_SUPPORT_BPR
dp_monitor_set_bpr_enable(struct dp_pdev * pdev,uint32_t val)3338*5113495bSYour Name static inline QDF_STATUS dp_monitor_set_bpr_enable(struct dp_pdev *pdev,
3339*5113495bSYour Name 						   uint32_t val)
3340*5113495bSYour Name {
3341*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3342*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3343*5113495bSYour Name 
3344*5113495bSYour Name 	if (!mon_soc) {
3345*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3346*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3347*5113495bSYour Name 	}
3348*5113495bSYour Name 
3349*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3350*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_set_bpr_enable) {
3351*5113495bSYour Name 		dp_mon_debug("callback not registered");
3352*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3353*5113495bSYour Name 	}
3354*5113495bSYour Name 
3355*5113495bSYour Name 	return monitor_ops->mon_set_bpr_enable(pdev, val);
3356*5113495bSYour Name }
3357*5113495bSYour Name #else
dp_monitor_set_bpr_enable(struct dp_pdev * pdev,uint32_t val)3358*5113495bSYour Name static inline QDF_STATUS dp_monitor_set_bpr_enable(struct dp_pdev *pdev,
3359*5113495bSYour Name 						   uint32_t val)
3360*5113495bSYour Name {
3361*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3362*5113495bSYour Name }
3363*5113495bSYour Name #endif
3364*5113495bSYour Name 
3365*5113495bSYour Name #ifdef ATH_SUPPORT_NAC
3366*5113495bSYour Name static inline
dp_monitor_set_filter_neigh_peers(struct dp_pdev * pdev,bool val)3367*5113495bSYour Name int dp_monitor_set_filter_neigh_peers(struct dp_pdev *pdev, bool val)
3368*5113495bSYour Name {
3369*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3370*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3371*5113495bSYour Name 
3372*5113495bSYour Name 	if (!mon_soc) {
3373*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3374*5113495bSYour Name 		return 0;
3375*5113495bSYour Name 	}
3376*5113495bSYour Name 
3377*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3378*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_set_filter_neigh_peers) {
3379*5113495bSYour Name 		dp_mon_debug("callback not registered");
3380*5113495bSYour Name 		return 0;
3381*5113495bSYour Name 	}
3382*5113495bSYour Name 
3383*5113495bSYour Name 	return monitor_ops->mon_set_filter_neigh_peers(pdev, val);
3384*5113495bSYour Name }
3385*5113495bSYour Name #else
3386*5113495bSYour Name static inline
dp_monitor_set_filter_neigh_peers(struct dp_pdev * pdev,bool val)3387*5113495bSYour Name int dp_monitor_set_filter_neigh_peers(struct dp_pdev *pdev, bool val)
3388*5113495bSYour Name {
3389*5113495bSYour Name 	return 0;
3390*5113495bSYour Name }
3391*5113495bSYour Name #endif
3392*5113495bSYour Name 
3393*5113495bSYour Name #ifdef WLAN_ATF_ENABLE
3394*5113495bSYour Name static inline
dp_monitor_set_atf_stats_enable(struct dp_pdev * pdev,bool value)3395*5113495bSYour Name void dp_monitor_set_atf_stats_enable(struct dp_pdev *pdev, bool value)
3396*5113495bSYour Name {
3397*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3398*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3399*5113495bSYour Name 
3400*5113495bSYour Name 	if (!mon_soc) {
3401*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3402*5113495bSYour Name 		return;
3403*5113495bSYour Name 	}
3404*5113495bSYour Name 
3405*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3406*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_set_atf_stats_enable) {
3407*5113495bSYour Name 		dp_mon_debug("callback not registered");
3408*5113495bSYour Name 		return;
3409*5113495bSYour Name 	}
3410*5113495bSYour Name 
3411*5113495bSYour Name 	return monitor_ops->mon_set_atf_stats_enable(pdev, value);
3412*5113495bSYour Name }
3413*5113495bSYour Name #else
3414*5113495bSYour Name static inline
dp_monitor_set_atf_stats_enable(struct dp_pdev * pdev,bool value)3415*5113495bSYour Name void dp_monitor_set_atf_stats_enable(struct dp_pdev *pdev, bool value)
3416*5113495bSYour Name {
3417*5113495bSYour Name }
3418*5113495bSYour Name #endif
3419*5113495bSYour Name 
3420*5113495bSYour Name static inline
dp_monitor_set_bsscolor(struct dp_pdev * pdev,uint8_t bsscolor)3421*5113495bSYour Name void dp_monitor_set_bsscolor(struct dp_pdev *pdev, uint8_t bsscolor)
3422*5113495bSYour Name {
3423*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3424*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3425*5113495bSYour Name 
3426*5113495bSYour Name 	if (!mon_soc) {
3427*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3428*5113495bSYour Name 		return;
3429*5113495bSYour Name 	}
3430*5113495bSYour Name 
3431*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3432*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_set_bsscolor) {
3433*5113495bSYour Name 		dp_mon_debug("callback not registered");
3434*5113495bSYour Name 		return;
3435*5113495bSYour Name 	}
3436*5113495bSYour Name 
3437*5113495bSYour Name 	return monitor_ops->mon_set_bsscolor(pdev, bsscolor);
3438*5113495bSYour Name }
3439*5113495bSYour Name 
3440*5113495bSYour Name static inline
dp_monitor_pdev_get_filter_mcast_data(struct cdp_pdev * pdev_handle)3441*5113495bSYour Name bool dp_monitor_pdev_get_filter_mcast_data(struct cdp_pdev *pdev_handle)
3442*5113495bSYour Name {
3443*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3444*5113495bSYour Name 	struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
3445*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3446*5113495bSYour Name 
3447*5113495bSYour Name 	if (!mon_soc) {
3448*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3449*5113495bSYour Name 		return false;
3450*5113495bSYour Name 	}
3451*5113495bSYour Name 
3452*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3453*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_get_filter_mcast_data) {
3454*5113495bSYour Name 		dp_mon_debug("callback not registered");
3455*5113495bSYour Name 		return false;
3456*5113495bSYour Name 	}
3457*5113495bSYour Name 
3458*5113495bSYour Name 	return monitor_ops->mon_pdev_get_filter_mcast_data(pdev_handle);
3459*5113495bSYour Name }
3460*5113495bSYour Name 
3461*5113495bSYour Name static inline
dp_monitor_pdev_get_filter_non_data(struct cdp_pdev * pdev_handle)3462*5113495bSYour Name bool dp_monitor_pdev_get_filter_non_data(struct cdp_pdev *pdev_handle)
3463*5113495bSYour Name {
3464*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3465*5113495bSYour Name 	struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
3466*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3467*5113495bSYour Name 
3468*5113495bSYour Name 	if (!mon_soc) {
3469*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3470*5113495bSYour Name 		return false;
3471*5113495bSYour Name 	}
3472*5113495bSYour Name 
3473*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3474*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_get_filter_non_data) {
3475*5113495bSYour Name 		dp_mon_debug("callback not registered");
3476*5113495bSYour Name 		return false;
3477*5113495bSYour Name 	}
3478*5113495bSYour Name 
3479*5113495bSYour Name 	return monitor_ops->mon_pdev_get_filter_non_data(pdev_handle);
3480*5113495bSYour Name }
3481*5113495bSYour Name 
3482*5113495bSYour Name static inline
dp_monitor_pdev_get_filter_ucast_data(struct cdp_pdev * pdev_handle)3483*5113495bSYour Name bool dp_monitor_pdev_get_filter_ucast_data(struct cdp_pdev *pdev_handle)
3484*5113495bSYour Name {
3485*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3486*5113495bSYour Name 	struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
3487*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3488*5113495bSYour Name 
3489*5113495bSYour Name 	if (!mon_soc) {
3490*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3491*5113495bSYour Name 		return false;
3492*5113495bSYour Name 	}
3493*5113495bSYour Name 
3494*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3495*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pdev_get_filter_ucast_data) {
3496*5113495bSYour Name 		dp_mon_debug("callback not registered");
3497*5113495bSYour Name 		return false;
3498*5113495bSYour Name 	}
3499*5113495bSYour Name 
3500*5113495bSYour Name 	return monitor_ops->mon_pdev_get_filter_ucast_data(pdev_handle);
3501*5113495bSYour Name }
3502*5113495bSYour Name 
3503*5113495bSYour Name #ifdef WDI_EVENT_ENABLE
3504*5113495bSYour Name static inline
dp_monitor_set_pktlog_wifi3(struct dp_pdev * pdev,uint32_t event,bool enable)3505*5113495bSYour Name int dp_monitor_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
3506*5113495bSYour Name 				bool enable)
3507*5113495bSYour Name {
3508*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3509*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3510*5113495bSYour Name 
3511*5113495bSYour Name 	if (!mon_soc) {
3512*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3513*5113495bSYour Name 		return 0;
3514*5113495bSYour Name 	}
3515*5113495bSYour Name 
3516*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3517*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_set_pktlog_wifi3) {
3518*5113495bSYour Name 		dp_mon_debug("callback not registered");
3519*5113495bSYour Name 		return 0;
3520*5113495bSYour Name 	}
3521*5113495bSYour Name 
3522*5113495bSYour Name 	return monitor_ops->mon_set_pktlog_wifi3(pdev, event, enable);
3523*5113495bSYour Name }
3524*5113495bSYour Name #else
3525*5113495bSYour Name static inline
dp_monitor_set_pktlog_wifi3(struct dp_pdev * pdev,uint32_t event,bool enable)3526*5113495bSYour Name int dp_monitor_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
3527*5113495bSYour Name 				bool enable)
3528*5113495bSYour Name {
3529*5113495bSYour Name 	return 0;
3530*5113495bSYour Name }
3531*5113495bSYour Name #endif
3532*5113495bSYour Name 
3533*5113495bSYour Name #if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
dp_monitor_pktlogmod_exit(struct dp_pdev * pdev)3534*5113495bSYour Name static inline void dp_monitor_pktlogmod_exit(struct dp_pdev *pdev)
3535*5113495bSYour Name {
3536*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3537*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3538*5113495bSYour Name 
3539*5113495bSYour Name 	if (!mon_soc) {
3540*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3541*5113495bSYour Name 		return;
3542*5113495bSYour Name 	}
3543*5113495bSYour Name 
3544*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3545*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_pktlogmod_exit) {
3546*5113495bSYour Name 		dp_mon_debug("callback not registered");
3547*5113495bSYour Name 		return;
3548*5113495bSYour Name 	}
3549*5113495bSYour Name 
3550*5113495bSYour Name 	return monitor_ops->mon_pktlogmod_exit(pdev);
3551*5113495bSYour Name }
3552*5113495bSYour Name #else
dp_monitor_pktlogmod_exit(struct dp_pdev * pdev)3553*5113495bSYour Name static inline void dp_monitor_pktlogmod_exit(struct dp_pdev *pdev) {}
3554*5113495bSYour Name #endif
3555*5113495bSYour Name 
3556*5113495bSYour Name static inline
dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev * pdev)3557*5113495bSYour Name QDF_STATUS dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
3558*5113495bSYour Name {
3559*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3560*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3561*5113495bSYour Name 
3562*5113495bSYour Name 	if (!mon_soc) {
3563*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3564*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3565*5113495bSYour Name 	}
3566*5113495bSYour Name 
3567*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3568*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_set_monitor_mode_buf_rings) {
3569*5113495bSYour Name 		dp_mon_debug("callback not registered");
3570*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3571*5113495bSYour Name 	}
3572*5113495bSYour Name 
3573*5113495bSYour Name 	return monitor_ops->mon_vdev_set_monitor_mode_buf_rings(pdev);
3574*5113495bSYour Name }
3575*5113495bSYour Name 
3576*5113495bSYour Name static inline
dp_monitor_neighbour_peers_detach(struct dp_pdev * pdev)3577*5113495bSYour Name void dp_monitor_neighbour_peers_detach(struct dp_pdev *pdev)
3578*5113495bSYour Name {
3579*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3580*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3581*5113495bSYour Name 
3582*5113495bSYour Name 	if (!mon_soc) {
3583*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3584*5113495bSYour Name 		return;
3585*5113495bSYour Name 	}
3586*5113495bSYour Name 
3587*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3588*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_neighbour_peers_detach) {
3589*5113495bSYour Name 		dp_mon_debug("callback not registered");
3590*5113495bSYour Name 		return;
3591*5113495bSYour Name 	}
3592*5113495bSYour Name 
3593*5113495bSYour Name 	return monitor_ops->mon_neighbour_peers_detach(pdev);
3594*5113495bSYour Name }
3595*5113495bSYour Name 
3596*5113495bSYour Name #ifdef FEATURE_NAC_RSSI
dp_monitor_filter_neighbour_peer(struct dp_pdev * pdev,uint8_t * rx_pkt_hdr)3597*5113495bSYour Name static inline QDF_STATUS dp_monitor_filter_neighbour_peer(struct dp_pdev *pdev,
3598*5113495bSYour Name 							  uint8_t *rx_pkt_hdr)
3599*5113495bSYour Name {
3600*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3601*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3602*5113495bSYour Name 
3603*5113495bSYour Name 	if (!mon_soc) {
3604*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3605*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3606*5113495bSYour Name 	}
3607*5113495bSYour Name 
3608*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3609*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_filter_neighbour_peer) {
3610*5113495bSYour Name 		dp_mon_debug("callback not registered");
3611*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3612*5113495bSYour Name 	}
3613*5113495bSYour Name 
3614*5113495bSYour Name 	return monitor_ops->mon_filter_neighbour_peer(pdev, rx_pkt_hdr);
3615*5113495bSYour Name }
3616*5113495bSYour Name #else
dp_monitor_filter_neighbour_peer(struct dp_pdev * pdev,uint8_t * rx_pkt_hdr)3617*5113495bSYour Name static inline QDF_STATUS dp_monitor_filter_neighbour_peer(struct dp_pdev *pdev,
3618*5113495bSYour Name 							  uint8_t *rx_pkt_hdr)
3619*5113495bSYour Name {
3620*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
3621*5113495bSYour Name }
3622*5113495bSYour Name #endif
3623*5113495bSYour Name 
3624*5113495bSYour Name static inline
dp_monitor_reap_timer_init(struct dp_soc * soc)3625*5113495bSYour Name void dp_monitor_reap_timer_init(struct dp_soc *soc)
3626*5113495bSYour Name {
3627*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3628*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3629*5113495bSYour Name 
3630*5113495bSYour Name 	if (!mon_soc) {
3631*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3632*5113495bSYour Name 		return;
3633*5113495bSYour Name 	}
3634*5113495bSYour Name 
3635*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3636*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_reap_timer_init) {
3637*5113495bSYour Name 		dp_mon_debug("callback not registered");
3638*5113495bSYour Name 		return;
3639*5113495bSYour Name 	}
3640*5113495bSYour Name 
3641*5113495bSYour Name 	monitor_ops->mon_reap_timer_init(soc);
3642*5113495bSYour Name }
3643*5113495bSYour Name 
3644*5113495bSYour Name static inline
dp_monitor_reap_timer_deinit(struct dp_soc * soc)3645*5113495bSYour Name void dp_monitor_reap_timer_deinit(struct dp_soc *soc)
3646*5113495bSYour Name {
3647*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3648*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3649*5113495bSYour Name 
3650*5113495bSYour Name 	if (!mon_soc) {
3651*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3652*5113495bSYour Name 		return;
3653*5113495bSYour Name 	}
3654*5113495bSYour Name 
3655*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3656*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_reap_timer_deinit) {
3657*5113495bSYour Name 		dp_mon_debug("callback not registered");
3658*5113495bSYour Name 		return;
3659*5113495bSYour Name 	}
3660*5113495bSYour Name 
3661*5113495bSYour Name 	monitor_ops->mon_reap_timer_deinit(soc);
3662*5113495bSYour Name }
3663*5113495bSYour Name 
3664*5113495bSYour Name /**
3665*5113495bSYour Name  * dp_monitor_reap_timer_start() - start reap timer of monitor status ring
3666*5113495bSYour Name  * @soc: point to soc
3667*5113495bSYour Name  * @source: trigger source
3668*5113495bSYour Name  *
3669*5113495bSYour Name  * Return: true if timer-start is performed, false otherwise.
3670*5113495bSYour Name  */
3671*5113495bSYour Name static inline bool
dp_monitor_reap_timer_start(struct dp_soc * soc,enum cdp_mon_reap_source source)3672*5113495bSYour Name dp_monitor_reap_timer_start(struct dp_soc *soc,
3673*5113495bSYour Name 			    enum cdp_mon_reap_source source)
3674*5113495bSYour Name {
3675*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3676*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3677*5113495bSYour Name 
3678*5113495bSYour Name 	if (!mon_soc) {
3679*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3680*5113495bSYour Name 		return false;
3681*5113495bSYour Name 	}
3682*5113495bSYour Name 
3683*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3684*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_reap_timer_start) {
3685*5113495bSYour Name 		dp_mon_debug("callback not registered");
3686*5113495bSYour Name 		return false;
3687*5113495bSYour Name 	}
3688*5113495bSYour Name 
3689*5113495bSYour Name 	return monitor_ops->mon_reap_timer_start(soc, source);
3690*5113495bSYour Name }
3691*5113495bSYour Name 
3692*5113495bSYour Name /**
3693*5113495bSYour Name  * dp_monitor_reap_timer_stop() - stop reap timer of monitor status ring
3694*5113495bSYour Name  * @soc: point to soc
3695*5113495bSYour Name  * @source: trigger source
3696*5113495bSYour Name  *
3697*5113495bSYour Name  * Return: true if timer-stop is performed, false otherwise.
3698*5113495bSYour Name  */
3699*5113495bSYour Name static inline bool
dp_monitor_reap_timer_stop(struct dp_soc * soc,enum cdp_mon_reap_source source)3700*5113495bSYour Name dp_monitor_reap_timer_stop(struct dp_soc *soc,
3701*5113495bSYour Name 			   enum cdp_mon_reap_source source)
3702*5113495bSYour Name {
3703*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3704*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3705*5113495bSYour Name 
3706*5113495bSYour Name 	if (!mon_soc) {
3707*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3708*5113495bSYour Name 		return false;
3709*5113495bSYour Name 	}
3710*5113495bSYour Name 
3711*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3712*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_reap_timer_stop) {
3713*5113495bSYour Name 		dp_mon_debug("callback not registered");
3714*5113495bSYour Name 		return false;
3715*5113495bSYour Name 	}
3716*5113495bSYour Name 
3717*5113495bSYour Name 	return monitor_ops->mon_reap_timer_stop(soc, source);
3718*5113495bSYour Name }
3719*5113495bSYour Name 
3720*5113495bSYour Name static inline
dp_monitor_vdev_timer_init(struct dp_soc * soc)3721*5113495bSYour Name void dp_monitor_vdev_timer_init(struct dp_soc *soc)
3722*5113495bSYour Name {
3723*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3724*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3725*5113495bSYour Name 
3726*5113495bSYour Name 	if (!mon_soc) {
3727*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3728*5113495bSYour Name 		return;
3729*5113495bSYour Name 	}
3730*5113495bSYour Name 
3731*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3732*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_timer_init) {
3733*5113495bSYour Name 		dp_mon_debug("callback not registered");
3734*5113495bSYour Name 		return;
3735*5113495bSYour Name 	}
3736*5113495bSYour Name 
3737*5113495bSYour Name 	monitor_ops->mon_vdev_timer_init(soc);
3738*5113495bSYour Name }
3739*5113495bSYour Name 
3740*5113495bSYour Name static inline
dp_monitor_vdev_timer_deinit(struct dp_soc * soc)3741*5113495bSYour Name void dp_monitor_vdev_timer_deinit(struct dp_soc *soc)
3742*5113495bSYour Name {
3743*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3744*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3745*5113495bSYour Name 
3746*5113495bSYour Name 	if (!mon_soc) {
3747*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3748*5113495bSYour Name 		return;
3749*5113495bSYour Name 	}
3750*5113495bSYour Name 
3751*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3752*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_timer_deinit) {
3753*5113495bSYour Name 		dp_mon_debug("callback not registered");
3754*5113495bSYour Name 		return;
3755*5113495bSYour Name 	}
3756*5113495bSYour Name 
3757*5113495bSYour Name 	monitor_ops->mon_vdev_timer_deinit(soc);
3758*5113495bSYour Name }
3759*5113495bSYour Name 
3760*5113495bSYour Name static inline
dp_monitor_vdev_timer_start(struct dp_soc * soc)3761*5113495bSYour Name void dp_monitor_vdev_timer_start(struct dp_soc *soc)
3762*5113495bSYour Name {
3763*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3764*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3765*5113495bSYour Name 
3766*5113495bSYour Name 	if (!mon_soc) {
3767*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3768*5113495bSYour Name 		return;
3769*5113495bSYour Name 	}
3770*5113495bSYour Name 
3771*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3772*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_timer_start) {
3773*5113495bSYour Name 		dp_mon_debug("callback not registered");
3774*5113495bSYour Name 		return;
3775*5113495bSYour Name 	}
3776*5113495bSYour Name 
3777*5113495bSYour Name 	monitor_ops->mon_vdev_timer_start(soc);
3778*5113495bSYour Name }
3779*5113495bSYour Name 
3780*5113495bSYour Name static inline
dp_monitor_vdev_timer_stop(struct dp_soc * soc)3781*5113495bSYour Name bool dp_monitor_vdev_timer_stop(struct dp_soc *soc)
3782*5113495bSYour Name {
3783*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3784*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3785*5113495bSYour Name 
3786*5113495bSYour Name 	if (!mon_soc) {
3787*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3788*5113495bSYour Name 		return false;
3789*5113495bSYour Name 	}
3790*5113495bSYour Name 
3791*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3792*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_vdev_timer_stop) {
3793*5113495bSYour Name 		dp_mon_debug("callback not registered");
3794*5113495bSYour Name 		return false;
3795*5113495bSYour Name 	}
3796*5113495bSYour Name 
3797*5113495bSYour Name 	return monitor_ops->mon_vdev_timer_stop(soc);
3798*5113495bSYour Name }
3799*5113495bSYour Name 
3800*5113495bSYour Name #ifdef QCA_MCOPY_SUPPORT
3801*5113495bSYour Name static inline
dp_monitor_mcopy_check_deliver(struct dp_pdev * pdev,uint16_t peer_id,uint32_t ppdu_id,uint8_t first_msdu)3802*5113495bSYour Name QDF_STATUS dp_monitor_mcopy_check_deliver(struct dp_pdev *pdev,
3803*5113495bSYour Name 					  uint16_t peer_id, uint32_t ppdu_id,
3804*5113495bSYour Name 					  uint8_t first_msdu)
3805*5113495bSYour Name {
3806*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3807*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3808*5113495bSYour Name 
3809*5113495bSYour Name 	if (!mon_soc) {
3810*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3811*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3812*5113495bSYour Name 	}
3813*5113495bSYour Name 
3814*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3815*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_mcopy_check_deliver) {
3816*5113495bSYour Name 		dp_mon_debug("callback not registered");
3817*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
3818*5113495bSYour Name 	}
3819*5113495bSYour Name 
3820*5113495bSYour Name 	return monitor_ops->mon_mcopy_check_deliver(pdev, peer_id,
3821*5113495bSYour Name 						    ppdu_id, first_msdu);
3822*5113495bSYour Name }
3823*5113495bSYour Name #else
3824*5113495bSYour Name static inline
dp_monitor_mcopy_check_deliver(struct dp_pdev * pdev,uint16_t peer_id,uint32_t ppdu_id,uint8_t first_msdu)3825*5113495bSYour Name QDF_STATUS dp_monitor_mcopy_check_deliver(struct dp_pdev *pdev,
3826*5113495bSYour Name 					  uint16_t peer_id, uint32_t ppdu_id,
3827*5113495bSYour Name 					  uint8_t first_msdu)
3828*5113495bSYour Name {
3829*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
3830*5113495bSYour Name }
3831*5113495bSYour Name #endif
3832*5113495bSYour Name 
3833*5113495bSYour Name /**
3834*5113495bSYour Name  * dp_monitor_neighbour_peer_add_ast() - Add ast entry
3835*5113495bSYour Name  * @pdev: point to dp pdev
3836*5113495bSYour Name  * @ta_peer: point to peer
3837*5113495bSYour Name  * @mac_addr: mac address
3838*5113495bSYour Name  * @nbuf: point to nbuf
3839*5113495bSYour Name  * @flags: flags
3840*5113495bSYour Name  *
3841*5113495bSYour Name  * Return: void
3842*5113495bSYour Name  */
3843*5113495bSYour Name static inline void
dp_monitor_neighbour_peer_add_ast(struct dp_pdev * pdev,struct dp_peer * ta_peer,uint8_t * mac_addr,qdf_nbuf_t nbuf,uint32_t flags)3844*5113495bSYour Name dp_monitor_neighbour_peer_add_ast(struct dp_pdev *pdev,
3845*5113495bSYour Name 				  struct dp_peer *ta_peer,
3846*5113495bSYour Name 				  uint8_t *mac_addr,
3847*5113495bSYour Name 				  qdf_nbuf_t nbuf,
3848*5113495bSYour Name 				  uint32_t flags)
3849*5113495bSYour Name {
3850*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
3851*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3852*5113495bSYour Name 
3853*5113495bSYour Name 	if (!mon_soc) {
3854*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
3855*5113495bSYour Name 		return;
3856*5113495bSYour Name 	}
3857*5113495bSYour Name 
3858*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3859*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_neighbour_peer_add_ast) {
3860*5113495bSYour Name 		dp_mon_debug("callback not registered");
3861*5113495bSYour Name 		return;
3862*5113495bSYour Name 	}
3863*5113495bSYour Name 
3864*5113495bSYour Name 	return monitor_ops->mon_neighbour_peer_add_ast(pdev, ta_peer, mac_addr,
3865*5113495bSYour Name 						       nbuf, flags);
3866*5113495bSYour Name }
3867*5113495bSYour Name 
3868*5113495bSYour Name /**
3869*5113495bSYour Name  * dp_monitor_vdev_delete() - delete monitor vdev
3870*5113495bSYour Name  * @soc: point to dp soc
3871*5113495bSYour Name  * @vdev: point to dp vdev
3872*5113495bSYour Name  *
3873*5113495bSYour Name  * Return: void
3874*5113495bSYour Name  */
dp_monitor_vdev_delete(struct dp_soc * soc,struct dp_vdev * vdev)3875*5113495bSYour Name static inline void dp_monitor_vdev_delete(struct dp_soc *soc,
3876*5113495bSYour Name 					  struct dp_vdev *vdev)
3877*5113495bSYour Name {
3878*5113495bSYour Name 	if (soc->intr_mode == DP_INTR_POLL) {
3879*5113495bSYour Name 		qdf_timer_sync_cancel(&soc->int_timer);
3880*5113495bSYour Name 		dp_monitor_flush_rings(soc);
3881*5113495bSYour Name 	} else if (soc->intr_mode == DP_INTR_MSI) {
3882*5113495bSYour Name 		dp_monitor_vdev_timer_stop(soc);
3883*5113495bSYour Name 		dp_monitor_flush_rings(soc);
3884*5113495bSYour Name 	}
3885*5113495bSYour Name 
3886*5113495bSYour Name 	dp_monitor_vdev_detach(vdev);
3887*5113495bSYour Name }
3888*5113495bSYour Name 
3889*5113495bSYour Name #ifdef DP_POWER_SAVE
3890*5113495bSYour Name /**
3891*5113495bSYour Name  * dp_monitor_reap_timer_suspend() - Stop monitor reap timer
3892*5113495bSYour Name  * and reap any pending frames in ring
3893*5113495bSYour Name  * @soc: DP soc context
3894*5113495bSYour Name  *
3895*5113495bSYour Name  * Return: void
3896*5113495bSYour Name  */
3897*5113495bSYour Name static inline void
dp_monitor_reap_timer_suspend(struct dp_soc * soc)3898*5113495bSYour Name dp_monitor_reap_timer_suspend(struct dp_soc *soc)
3899*5113495bSYour Name {
3900*5113495bSYour Name 	if (dp_monitor_reap_timer_stop(soc, CDP_MON_REAP_SOURCE_ANY))
3901*5113495bSYour Name 		dp_monitor_service_mon_rings(soc, DP_MON_REAP_BUDGET);
3902*5113495bSYour Name }
3903*5113495bSYour Name 
3904*5113495bSYour Name #endif
3905*5113495bSYour Name 
3906*5113495bSYour Name /**
3907*5113495bSYour Name  * dp_monitor_neighbour_peer_list_remove() - remove neighbour peer list
3908*5113495bSYour Name  * @pdev: point to dp pdev
3909*5113495bSYour Name  * @vdev: point to dp vdev
3910*5113495bSYour Name  * @peer: point to dp_neighbour_peer
3911*5113495bSYour Name  *
3912*5113495bSYour Name  * Return: void
3913*5113495bSYour Name  */
3914*5113495bSYour Name static inline
dp_monitor_neighbour_peer_list_remove(struct dp_pdev * pdev,struct dp_vdev * vdev,struct dp_neighbour_peer * peer)3915*5113495bSYour Name void dp_monitor_neighbour_peer_list_remove(struct dp_pdev *pdev,
3916*5113495bSYour Name 					   struct dp_vdev *vdev,
3917*5113495bSYour Name 					   struct dp_neighbour_peer *peer)
3918*5113495bSYour Name {
3919*5113495bSYour Name 	struct dp_mon_pdev *mon_pdev;
3920*5113495bSYour Name 	struct dp_neighbour_peer *temp_peer = NULL;
3921*5113495bSYour Name 
3922*5113495bSYour Name 	if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
3923*5113495bSYour Name 		return;
3924*5113495bSYour Name 
3925*5113495bSYour Name 	mon_pdev = pdev->monitor_pdev;
3926*5113495bSYour Name 	qdf_spin_lock_bh(&mon_pdev->neighbour_peer_mutex);
3927*5113495bSYour Name 	if (!pdev->soc->monitor_soc->hw_nac_monitor_support) {
3928*5113495bSYour Name 		TAILQ_FOREACH(peer, &mon_pdev->neighbour_peers_list,
3929*5113495bSYour Name 			      neighbour_peer_list_elem) {
3930*5113495bSYour Name 				QDF_ASSERT(peer->vdev != vdev);
3931*5113495bSYour Name 			}
3932*5113495bSYour Name 	} else {
3933*5113495bSYour Name 		TAILQ_FOREACH_SAFE(peer, &mon_pdev->neighbour_peers_list,
3934*5113495bSYour Name 				   neighbour_peer_list_elem, temp_peer) {
3935*5113495bSYour Name 			if (peer->vdev == vdev) {
3936*5113495bSYour Name 				TAILQ_REMOVE(&mon_pdev->neighbour_peers_list,
3937*5113495bSYour Name 					     peer,
3938*5113495bSYour Name 					     neighbour_peer_list_elem);
3939*5113495bSYour Name 				qdf_mem_free(peer);
3940*5113495bSYour Name 			}
3941*5113495bSYour Name 		}
3942*5113495bSYour Name 	}
3943*5113495bSYour Name 	qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
3944*5113495bSYour Name }
3945*5113495bSYour Name 
3946*5113495bSYour Name static inline
dp_monitor_pdev_set_mon_vdev(struct dp_vdev * vdev)3947*5113495bSYour Name void dp_monitor_pdev_set_mon_vdev(struct dp_vdev *vdev)
3948*5113495bSYour Name {
3949*5113495bSYour Name 	if (!vdev->pdev->monitor_pdev)
3950*5113495bSYour Name 		return;
3951*5113495bSYour Name 
3952*5113495bSYour Name 	vdev->pdev->monitor_pdev->mvdev = vdev;
3953*5113495bSYour Name }
3954*5113495bSYour Name 
3955*5113495bSYour Name static inline
dp_monitor_pdev_config_scan_spcl_vap(struct dp_pdev * pdev,bool val)3956*5113495bSYour Name void dp_monitor_pdev_config_scan_spcl_vap(struct dp_pdev *pdev, bool val)
3957*5113495bSYour Name {
3958*5113495bSYour Name 	if (!pdev || !pdev->monitor_pdev)
3959*5113495bSYour Name 		return;
3960*5113495bSYour Name 
3961*5113495bSYour Name 	pdev->monitor_pdev->scan_spcl_vap_configured = val;
3962*5113495bSYour Name }
3963*5113495bSYour Name 
3964*5113495bSYour Name #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS
3965*5113495bSYour Name static inline
dp_monitor_pdev_reset_scan_spcl_vap_stats_enable(struct dp_pdev * pdev,bool val)3966*5113495bSYour Name void dp_monitor_pdev_reset_scan_spcl_vap_stats_enable(struct dp_pdev *pdev,
3967*5113495bSYour Name 						      bool val)
3968*5113495bSYour Name {
3969*5113495bSYour Name 	if (!pdev || !pdev->monitor_pdev)
3970*5113495bSYour Name 		return;
3971*5113495bSYour Name 
3972*5113495bSYour Name 	pdev->monitor_pdev->reset_scan_spcl_vap_stats_enable = val;
3973*5113495bSYour Name }
3974*5113495bSYour Name #else
3975*5113495bSYour Name static inline
dp_monitor_pdev_reset_scan_spcl_vap_stats_enable(struct dp_pdev * pdev,bool val)3976*5113495bSYour Name void dp_monitor_pdev_reset_scan_spcl_vap_stats_enable(struct dp_pdev *pdev,
3977*5113495bSYour Name 						      bool val)
3978*5113495bSYour Name {
3979*5113495bSYour Name }
3980*5113495bSYour Name #endif
3981*5113495bSYour Name 
3982*5113495bSYour Name #if defined(CONFIG_MON_WORD_BASED_TLV)
3983*5113495bSYour Name static inline void
dp_mon_rx_wmask_subscribe(struct dp_soc * soc,uint32_t * msg_word,int pdev_id,struct htt_rx_ring_tlv_filter * tlv_filter)3984*5113495bSYour Name dp_mon_rx_wmask_subscribe(struct dp_soc *soc,
3985*5113495bSYour Name 			  uint32_t *msg_word, int pdev_id,
3986*5113495bSYour Name 			  struct htt_rx_ring_tlv_filter *tlv_filter)
3987*5113495bSYour Name {
3988*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
3989*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
3990*5113495bSYour Name 
3991*5113495bSYour Name 	if (!mon_soc) {
3992*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
3993*5113495bSYour Name 		return;
3994*5113495bSYour Name 
3995*5113495bSYour Name 	}
3996*5113495bSYour Name 
3997*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
3998*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_wmask_subscribe) {
3999*5113495bSYour Name 		dp_mon_debug("callback not registered");
4000*5113495bSYour Name 		return;
4001*5113495bSYour Name 	}
4002*5113495bSYour Name 
4003*5113495bSYour Name 	monitor_ops->rx_wmask_subscribe(soc, msg_word, pdev_id, tlv_filter);
4004*5113495bSYour Name }
4005*5113495bSYour Name #else
4006*5113495bSYour Name static inline void
dp_mon_rx_wmask_subscribe(struct dp_soc * soc,uint32_t * msg_word,int pdev_id,struct htt_rx_ring_tlv_filter * tlv_filter)4007*5113495bSYour Name dp_mon_rx_wmask_subscribe(struct dp_soc *soc,
4008*5113495bSYour Name 			  uint32_t *msg_word, int pdev_id,
4009*5113495bSYour Name 			  struct htt_rx_ring_tlv_filter *tlv_filter)
4010*5113495bSYour Name {
4011*5113495bSYour Name }
4012*5113495bSYour Name #endif
4013*5113495bSYour Name 
4014*5113495bSYour Name static inline void
dp_mon_rx_enable_pkt_tlv_offset(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4015*5113495bSYour Name dp_mon_rx_enable_pkt_tlv_offset(struct dp_soc *soc, uint32_t *msg_word,
4016*5113495bSYour Name 				struct htt_rx_ring_tlv_filter *tlv_filter)
4017*5113495bSYour Name {
4018*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4019*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4020*5113495bSYour Name 
4021*5113495bSYour Name 	if (!mon_soc) {
4022*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4023*5113495bSYour Name 		return;
4024*5113495bSYour Name 	}
4025*5113495bSYour Name 
4026*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4027*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_pkt_tlv_offset) {
4028*5113495bSYour Name 		dp_mon_debug("callback not registered");
4029*5113495bSYour Name 		return;
4030*5113495bSYour Name 	}
4031*5113495bSYour Name 
4032*5113495bSYour Name 	monitor_ops->rx_pkt_tlv_offset(msg_word, tlv_filter);
4033*5113495bSYour Name }
4034*5113495bSYour Name 
4035*5113495bSYour Name static inline void
dp_mon_rx_enable_mpdu_logging(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4036*5113495bSYour Name dp_mon_rx_enable_mpdu_logging(struct dp_soc *soc, uint32_t *msg_word,
4037*5113495bSYour Name 			      struct htt_rx_ring_tlv_filter *tlv_filter)
4038*5113495bSYour Name {
4039*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4040*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4041*5113495bSYour Name 
4042*5113495bSYour Name 	if (!mon_soc) {
4043*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4044*5113495bSYour Name 		return;
4045*5113495bSYour Name 
4046*5113495bSYour Name 	}
4047*5113495bSYour Name 
4048*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4049*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_enable_mpdu_logging) {
4050*5113495bSYour Name 		dp_mon_debug("callback not registered");
4051*5113495bSYour Name 		return;
4052*5113495bSYour Name 	}
4053*5113495bSYour Name 
4054*5113495bSYour Name 	monitor_ops->rx_enable_mpdu_logging(msg_word, tlv_filter);
4055*5113495bSYour Name }
4056*5113495bSYour Name 
4057*5113495bSYour Name /**
4058*5113495bSYour Name  * dp_mon_rx_enable_fpmo() - set fpmo filters
4059*5113495bSYour Name  * @soc: dp soc handle
4060*5113495bSYour Name  * @msg_word: msg word
4061*5113495bSYour Name  * @tlv_filter: rx fing filter config
4062*5113495bSYour Name  *
4063*5113495bSYour Name  * Return: void
4064*5113495bSYour Name  */
4065*5113495bSYour Name static inline void
dp_mon_rx_enable_fpmo(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4066*5113495bSYour Name dp_mon_rx_enable_fpmo(struct dp_soc *soc, uint32_t *msg_word,
4067*5113495bSYour Name 		      struct htt_rx_ring_tlv_filter *tlv_filter)
4068*5113495bSYour Name {
4069*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4070*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4071*5113495bSYour Name 
4072*5113495bSYour Name 	if (!mon_soc) {
4073*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4074*5113495bSYour Name 		return;
4075*5113495bSYour Name 	}
4076*5113495bSYour Name 
4077*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4078*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_enable_fpmo) {
4079*5113495bSYour Name 		dp_mon_debug("callback not registered");
4080*5113495bSYour Name 		return;
4081*5113495bSYour Name 	}
4082*5113495bSYour Name 
4083*5113495bSYour Name 	monitor_ops->rx_enable_fpmo(msg_word, tlv_filter);
4084*5113495bSYour Name }
4085*5113495bSYour Name 
4086*5113495bSYour Name /**
4087*5113495bSYour Name  * dp_mon_rx_hdr_length_set() - set rx hdr tlv length
4088*5113495bSYour Name  * @soc: dp soc handle
4089*5113495bSYour Name  * @msg_word: msg word
4090*5113495bSYour Name  * @tlv_filter: rx fing filter config
4091*5113495bSYour Name  *
4092*5113495bSYour Name  * Return: void
4093*5113495bSYour Name  */
4094*5113495bSYour Name static inline void
dp_mon_rx_hdr_length_set(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4095*5113495bSYour Name dp_mon_rx_hdr_length_set(struct dp_soc *soc, uint32_t *msg_word,
4096*5113495bSYour Name 			 struct htt_rx_ring_tlv_filter *tlv_filter)
4097*5113495bSYour Name {
4098*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4099*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4100*5113495bSYour Name 
4101*5113495bSYour Name 	if (!mon_soc) {
4102*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4103*5113495bSYour Name 		return;
4104*5113495bSYour Name 	}
4105*5113495bSYour Name 
4106*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4107*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_hdr_length_set) {
4108*5113495bSYour Name 		dp_mon_debug("callback not registered");
4109*5113495bSYour Name 		return;
4110*5113495bSYour Name 	}
4111*5113495bSYour Name 
4112*5113495bSYour Name 	monitor_ops->rx_hdr_length_set(msg_word, tlv_filter);
4113*5113495bSYour Name }
4114*5113495bSYour Name 
4115*5113495bSYour Name static inline void
dp_mon_rx_packet_length_set(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4116*5113495bSYour Name dp_mon_rx_packet_length_set(struct dp_soc *soc, uint32_t *msg_word,
4117*5113495bSYour Name 			    struct htt_rx_ring_tlv_filter *tlv_filter)
4118*5113495bSYour Name {
4119*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4120*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4121*5113495bSYour Name 
4122*5113495bSYour Name 	if (!mon_soc) {
4123*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4124*5113495bSYour Name 		return;
4125*5113495bSYour Name 
4126*5113495bSYour Name 	}
4127*5113495bSYour Name 
4128*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4129*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_packet_length_set) {
4130*5113495bSYour Name 		dp_mon_debug("callback not registered");
4131*5113495bSYour Name 		return;
4132*5113495bSYour Name 	}
4133*5113495bSYour Name 
4134*5113495bSYour Name 	monitor_ops->rx_packet_length_set(msg_word, tlv_filter);
4135*5113495bSYour Name }
4136*5113495bSYour Name 
4137*5113495bSYour Name static inline void
dp_rx_mon_enable(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4138*5113495bSYour Name dp_rx_mon_enable(struct dp_soc *soc, uint32_t *msg_word,
4139*5113495bSYour Name 		 struct htt_rx_ring_tlv_filter *tlv_filter)
4140*5113495bSYour Name {
4141*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4142*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4143*5113495bSYour Name 
4144*5113495bSYour Name 	if (!mon_soc) {
4145*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4146*5113495bSYour Name 		return;
4147*5113495bSYour Name 	}
4148*5113495bSYour Name 
4149*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4150*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->rx_mon_enable) {
4151*5113495bSYour Name 		dp_mon_debug("callback not registered");
4152*5113495bSYour Name 		return;
4153*5113495bSYour Name 	}
4154*5113495bSYour Name 
4155*5113495bSYour Name 	monitor_ops->rx_mon_enable(msg_word, tlv_filter);
4156*5113495bSYour Name }
4157*5113495bSYour Name 
4158*5113495bSYour Name static inline void
dp_mon_rx_mac_filter_set(struct dp_soc * soc,uint32_t * msg_word,struct htt_rx_ring_tlv_filter * tlv_filter)4159*5113495bSYour Name dp_mon_rx_mac_filter_set(struct dp_soc *soc, uint32_t *msg_word,
4160*5113495bSYour Name 			 struct htt_rx_ring_tlv_filter *tlv_filter)
4161*5113495bSYour Name {
4162*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4163*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4164*5113495bSYour Name 
4165*5113495bSYour Name 	if (!mon_soc) {
4166*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4167*5113495bSYour Name 		return;
4168*5113495bSYour Name 	}
4169*5113495bSYour Name 
4170*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4171*5113495bSYour Name 	if (!monitor_ops || !monitor_ops->mon_mac_filter_set) {
4172*5113495bSYour Name 		dp_mon_debug("callback not registered");
4173*5113495bSYour Name 		return;
4174*5113495bSYour Name 	}
4175*5113495bSYour Name 
4176*5113495bSYour Name 	monitor_ops->mon_mac_filter_set(msg_word, tlv_filter);
4177*5113495bSYour Name }
4178*5113495bSYour Name 
4179*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
4180*5113495bSYour Name QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
4181*5113495bSYour Name 				    struct cdp_rx_stats_ppdu_user *ppdu_user);
4182*5113495bSYour Name #endif
4183*5113495bSYour Name 
4184*5113495bSYour Name /**
4185*5113495bSYour Name  * dp_print_pdev_rx_mon_stats() - print rx mon stats
4186*5113495bSYour Name  * @pdev: device object
4187*5113495bSYour Name  *
4188*5113495bSYour Name  * Return: void
4189*5113495bSYour Name  */
4190*5113495bSYour Name void
4191*5113495bSYour Name dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev);
4192*5113495bSYour Name 
4193*5113495bSYour Name /**
4194*5113495bSYour Name  * dp_mcopy_check_deliver() - mcopy check deliver
4195*5113495bSYour Name  * @pdev: DP pdev handle
4196*5113495bSYour Name  * @peer_id: peer id
4197*5113495bSYour Name  * @ppdu_id: ppdu
4198*5113495bSYour Name  * @first_msdu: flag to indicate first msdu of ppdu
4199*5113495bSYour Name  * Return: 0 on success, not 0 on failure
4200*5113495bSYour Name  */
4201*5113495bSYour Name QDF_STATUS dp_mcopy_check_deliver(struct dp_pdev *pdev,
4202*5113495bSYour Name 				  uint16_t peer_id,
4203*5113495bSYour Name 				  uint32_t ppdu_id,
4204*5113495bSYour Name 				  uint8_t first_msdu);
4205*5113495bSYour Name 
4206*5113495bSYour Name /**
4207*5113495bSYour Name  * dp_pdev_set_advance_monitor_filter() - Set DP PDEV monitor filter
4208*5113495bSYour Name  * @soc_hdl: soc handle
4209*5113495bSYour Name  * @pdev_id: id of Datapath PDEV handle
4210*5113495bSYour Name  * @filter_val: Flag to select Filter for monitor mode
4211*5113495bSYour Name  *
4212*5113495bSYour Name  * Return: 0 on success, not 0 on failure
4213*5113495bSYour Name  */
4214*5113495bSYour Name #ifdef QCA_ADVANCE_MON_FILTER_SUPPORT
4215*5113495bSYour Name QDF_STATUS
4216*5113495bSYour Name dp_pdev_set_advance_monitor_filter(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
4217*5113495bSYour Name 				   struct cdp_monitor_filter *filter_val);
4218*5113495bSYour Name #else
4219*5113495bSYour Name static inline QDF_STATUS
dp_pdev_set_advance_monitor_filter(struct cdp_soc_t * soc_hdl,uint8_t pdev_id,struct cdp_monitor_filter * filter_val)4220*5113495bSYour Name dp_pdev_set_advance_monitor_filter(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
4221*5113495bSYour Name 				   struct cdp_monitor_filter *filter_val)
4222*5113495bSYour Name {
4223*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
4224*5113495bSYour Name }
4225*5113495bSYour Name #endif /* QCA_ADVANCE_MON_FILTER_SUPPORT */
4226*5113495bSYour Name 
4227*5113495bSYour Name /**
4228*5113495bSYour Name  * dp_deliver_tx_mgmt() - Deliver mgmt frame for tx capture
4229*5113495bSYour Name  * @cdp_soc : data path soc handle
4230*5113495bSYour Name  * @pdev_id : pdev_id
4231*5113495bSYour Name  * @nbuf: Management frame buffer
4232*5113495bSYour Name  *
4233*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
4234*5113495bSYour Name  *	   QDF_STATUS_E_FAILURE on failure
4235*5113495bSYour Name  */
4236*5113495bSYour Name QDF_STATUS
4237*5113495bSYour Name dp_deliver_tx_mgmt(struct cdp_soc_t *cdp_soc, uint8_t pdev_id, qdf_nbuf_t nbuf);
4238*5113495bSYour Name 
4239*5113495bSYour Name /**
4240*5113495bSYour Name  * dp_filter_neighbour_peer() - API to filter neighbour peer
4241*5113495bSYour Name  * @pdev : DP pdev handle
4242*5113495bSYour Name  * @rx_pkt_hdr : packet header
4243*5113495bSYour Name  *
4244*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
4245*5113495bSYour Name  *	   QDF_STATUS_E_FAILURE on failure
4246*5113495bSYour Name  */
4247*5113495bSYour Name #ifdef FEATURE_NAC_RSSI
4248*5113495bSYour Name QDF_STATUS dp_filter_neighbour_peer(struct dp_pdev *pdev,
4249*5113495bSYour Name 				    uint8_t *rx_pkt_hdr);
4250*5113495bSYour Name #else
4251*5113495bSYour Name static inline
dp_filter_neighbour_peer(struct dp_pdev * pdev,uint8_t * rx_pkt_hdr)4252*5113495bSYour Name QDF_STATUS dp_filter_neighbour_peer(struct dp_pdev *pdev,
4253*5113495bSYour Name 				    uint8_t *rx_pkt_hdr)
4254*5113495bSYour Name {
4255*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
4256*5113495bSYour Name }
4257*5113495bSYour Name #endif /* FEATURE_NAC_RSSI */
4258*5113495bSYour Name 
4259*5113495bSYour Name /**
4260*5113495bSYour Name  * dp_neighbour_peers_detach() - Detach neighbour peers(nac clients)
4261*5113495bSYour Name  * @pdev: device object
4262*5113495bSYour Name  *
4263*5113495bSYour Name  * Return: void
4264*5113495bSYour Name  */
4265*5113495bSYour Name void dp_neighbour_peers_detach(struct dp_pdev *pdev);
4266*5113495bSYour Name 
4267*5113495bSYour Name /**
4268*5113495bSYour Name  * dp_reset_monitor_mode() - Disable monitor mode
4269*5113495bSYour Name  * @soc_hdl: Datapath soc handle
4270*5113495bSYour Name  * @pdev_id: id of datapath PDEV handle
4271*5113495bSYour Name  * @smart_monitor: smart monitor flag
4272*5113495bSYour Name  *
4273*5113495bSYour Name  * Return: QDF_STATUS
4274*5113495bSYour Name  */
4275*5113495bSYour Name QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl,
4276*5113495bSYour Name 				 uint8_t pdev_id,
4277*5113495bSYour Name 				 uint8_t smart_monitor);
4278*5113495bSYour Name 
4279*5113495bSYour Name /**
4280*5113495bSYour Name  * dp_reset_monitor_mode_unlock() - Disable monitor mode with no locks
4281*5113495bSYour Name  * @soc_hdl: Datapath soc handle
4282*5113495bSYour Name  * @pdev_id: id of datapath PDEV handle
4283*5113495bSYour Name  * @smart_monitor: smart monitor flag
4284*5113495bSYour Name  *
4285*5113495bSYour Name  * Return: QDF_STATUS
4286*5113495bSYour Name  */
4287*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
4288*5113495bSYour Name QDF_STATUS dp_reset_monitor_mode_unlock(struct cdp_soc_t *soc_hdl,
4289*5113495bSYour Name 					uint8_t pdev_id,
4290*5113495bSYour Name 					uint8_t smart_monitor);
4291*5113495bSYour Name #else
dp_reset_monitor_mode_unlock(struct cdp_soc_t * soc_hdl,uint8_t pdev_id,uint8_t smart_monitor)4292*5113495bSYour Name QDF_STATUS dp_reset_monitor_mode_unlock(struct cdp_soc_t *soc_hdl,
4293*5113495bSYour Name 					uint8_t pdev_id,
4294*5113495bSYour Name 					uint8_t smart_monitor)
4295*5113495bSYour Name {
4296*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
4297*5113495bSYour Name }
4298*5113495bSYour Name #endif
4299*5113495bSYour Name 
4300*5113495bSYour Name static inline
dp_mon_ops_get(struct dp_soc * soc)4301*5113495bSYour Name struct dp_mon_ops *dp_mon_ops_get(struct dp_soc *soc)
4302*5113495bSYour Name {
4303*5113495bSYour Name 	if (soc && soc->monitor_soc)
4304*5113495bSYour Name 		return soc->monitor_soc->mon_ops;
4305*5113495bSYour Name 
4306*5113495bSYour Name 	return NULL;
4307*5113495bSYour Name }
4308*5113495bSYour Name 
4309*5113495bSYour Name static inline
dp_mon_cdp_ops_get(struct dp_soc * soc)4310*5113495bSYour Name struct cdp_mon_ops *dp_mon_cdp_ops_get(struct dp_soc *soc)
4311*5113495bSYour Name {
4312*5113495bSYour Name 	struct cdp_ops *ops = soc->cdp_soc.ops;
4313*5113495bSYour Name 
4314*5113495bSYour Name 	return ops->mon_ops;
4315*5113495bSYour Name }
4316*5113495bSYour Name 
4317*5113495bSYour Name /**
4318*5113495bSYour Name  * dp_monitor_soc_attach() - Monitor SOC attach
4319*5113495bSYour Name  * @soc: DP soc handle
4320*5113495bSYour Name  *
4321*5113495bSYour Name  * Return: void
4322*5113495bSYour Name  */
dp_monitor_soc_attach(struct dp_soc * soc)4323*5113495bSYour Name static inline void dp_monitor_soc_attach(struct dp_soc *soc)
4324*5113495bSYour Name {
4325*5113495bSYour Name 	struct dp_mon_ops *mon_ops;
4326*5113495bSYour Name 
4327*5113495bSYour Name 	mon_ops = dp_mon_ops_get(soc);
4328*5113495bSYour Name 
4329*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_attach[0])
4330*5113495bSYour Name 		mon_ops->mon_soc_attach[0](soc);
4331*5113495bSYour Name 
4332*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_attach[1])
4333*5113495bSYour Name 		mon_ops->mon_soc_attach[1](soc);
4334*5113495bSYour Name }
4335*5113495bSYour Name 
4336*5113495bSYour Name /**
4337*5113495bSYour Name  * dp_monitor_soc_detach() - Monitor SOC detach
4338*5113495bSYour Name  * @soc: DP soc handle
4339*5113495bSYour Name  *
4340*5113495bSYour Name  * Return: void
4341*5113495bSYour Name  */
dp_monitor_soc_detach(struct dp_soc * soc)4342*5113495bSYour Name static inline void dp_monitor_soc_detach(struct dp_soc *soc)
4343*5113495bSYour Name {
4344*5113495bSYour Name 	struct dp_mon_ops *mon_ops;
4345*5113495bSYour Name 
4346*5113495bSYour Name 	mon_ops = dp_mon_ops_get(soc);
4347*5113495bSYour Name 
4348*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_detach[0])
4349*5113495bSYour Name 		mon_ops->mon_soc_detach[0](soc);
4350*5113495bSYour Name 
4351*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_detach[1])
4352*5113495bSYour Name 		mon_ops->mon_soc_detach[1](soc);
4353*5113495bSYour Name }
4354*5113495bSYour Name 
4355*5113495bSYour Name /**
4356*5113495bSYour Name  * dp_monitor_soc_init() - Monitor SOC init
4357*5113495bSYour Name  * @soc: DP soc handle
4358*5113495bSYour Name  *
4359*5113495bSYour Name  * Return: void
4360*5113495bSYour Name  */
dp_monitor_soc_init(struct dp_soc * soc)4361*5113495bSYour Name static inline void dp_monitor_soc_init(struct dp_soc *soc)
4362*5113495bSYour Name {
4363*5113495bSYour Name 	struct dp_mon_ops *mon_ops;
4364*5113495bSYour Name 
4365*5113495bSYour Name 	mon_ops = dp_mon_ops_get(soc);
4366*5113495bSYour Name 
4367*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_init[0])
4368*5113495bSYour Name 		mon_ops->mon_soc_init[0](soc);
4369*5113495bSYour Name 
4370*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_init[1])
4371*5113495bSYour Name 		mon_ops->mon_soc_init[1](soc);
4372*5113495bSYour Name }
4373*5113495bSYour Name 
4374*5113495bSYour Name /**
4375*5113495bSYour Name  * dp_monitor_soc_deinit() - Monitor SOC deinit
4376*5113495bSYour Name  * @soc: DP soc handle
4377*5113495bSYour Name  *
4378*5113495bSYour Name  * Return: void
4379*5113495bSYour Name  */
dp_monitor_soc_deinit(struct dp_soc * soc)4380*5113495bSYour Name static inline void dp_monitor_soc_deinit(struct dp_soc *soc)
4381*5113495bSYour Name {
4382*5113495bSYour Name 	struct dp_mon_ops *mon_ops;
4383*5113495bSYour Name 
4384*5113495bSYour Name 	mon_ops = dp_mon_ops_get(soc);
4385*5113495bSYour Name 
4386*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_deinit[0])
4387*5113495bSYour Name 		mon_ops->mon_soc_deinit[0](soc);
4388*5113495bSYour Name 
4389*5113495bSYour Name 	if (mon_ops && mon_ops->mon_soc_deinit[1])
4390*5113495bSYour Name 		mon_ops->mon_soc_deinit[1](soc);
4391*5113495bSYour Name }
4392*5113495bSYour Name 
4393*5113495bSYour Name /**
4394*5113495bSYour Name  * dp_ppdu_desc_user_stats_update(): Function to update TX user stats
4395*5113495bSYour Name  * @pdev: DP pdev handle
4396*5113495bSYour Name  * @ppdu_info: per PPDU TLV descriptor
4397*5113495bSYour Name  *
4398*5113495bSYour Name  * Return: void
4399*5113495bSYour Name  */
4400*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
4401*5113495bSYour Name void
4402*5113495bSYour Name dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
4403*5113495bSYour Name 			       struct ppdu_info *ppdu_info);
4404*5113495bSYour Name #else
4405*5113495bSYour Name static inline void
dp_ppdu_desc_user_stats_update(struct dp_pdev * pdev,struct ppdu_info * ppdu_info)4406*5113495bSYour Name dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
4407*5113495bSYour Name 			       struct ppdu_info *ppdu_info)
4408*5113495bSYour Name {
4409*5113495bSYour Name }
4410*5113495bSYour Name #endif /* QCA_ENHANCED_STATS_SUPPORT */
4411*5113495bSYour Name 
4412*5113495bSYour Name /**
4413*5113495bSYour Name  * dp_mon_ops_register_1_0(): register legacy monitor ops
4414*5113495bSYour Name  * @mon_soc: monitor soc handle
4415*5113495bSYour Name  *
4416*5113495bSYour Name  * return: void
4417*5113495bSYour Name  */
4418*5113495bSYour Name void dp_mon_ops_register_1_0(struct dp_mon_soc *mon_soc);
4419*5113495bSYour Name 
4420*5113495bSYour Name /**
4421*5113495bSYour Name  * dp_mon_cdp_ops_register_1_0(): register legacy monitor cdp ops
4422*5113495bSYour Name  * @ops: cdp ops handle
4423*5113495bSYour Name  *
4424*5113495bSYour Name  * return: void
4425*5113495bSYour Name  */
4426*5113495bSYour Name void dp_mon_cdp_ops_register_1_0(struct cdp_ops *ops);
4427*5113495bSYour Name 
4428*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
4429*5113495bSYour Name /**
4430*5113495bSYour Name  * dp_cfr_filter_register_1_0(): register cfr filter setting API
4431*5113495bSYour Name  * @ops: cdp ops handle
4432*5113495bSYour Name  *
4433*5113495bSYour Name  * return: void
4434*5113495bSYour Name  */
4435*5113495bSYour Name void dp_cfr_filter_register_1_0(struct cdp_ops *ops);
4436*5113495bSYour Name #endif
4437*5113495bSYour Name 
4438*5113495bSYour Name QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
4439*5113495bSYour Name 					  struct dp_pdev *pdev,
4440*5113495bSYour Name 					  int mac_id,
4441*5113495bSYour Name 					  int mac_for_pdev);
4442*5113495bSYour Name QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc);
4443*5113495bSYour Name QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc);
4444*5113495bSYour Name QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc);
4445*5113495bSYour Name void dp_mon_soc_deinit_2_0(struct dp_soc *soc);
4446*5113495bSYour Name QDF_STATUS dp_mon_soc_detach_2_0(struct dp_soc *soc);
4447*5113495bSYour Name void dp_pdev_mon_rings_deinit_2_0(struct dp_pdev *pdev);
4448*5113495bSYour Name QDF_STATUS dp_pdev_mon_rings_init_2_0(struct dp_pdev *pdev);
4449*5113495bSYour Name void dp_pdev_mon_rings_free_2_0(struct dp_pdev *pdev);
4450*5113495bSYour Name QDF_STATUS dp_pdev_mon_rings_alloc_2_0(struct dp_pdev *pdev);
4451*5113495bSYour Name 
4452*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
4453*5113495bSYour Name /**
4454*5113495bSYour Name  * dp_mon_ops_register_tx_2_0(): register monitor tx ops 2.0
4455*5113495bSYour Name  * @mon_soc: monitor soc handle
4456*5113495bSYour Name  *
4457*5113495bSYour Name  * return: void
4458*5113495bSYour Name  */
4459*5113495bSYour Name void dp_mon_ops_register_tx_2_0(struct dp_mon_soc *mon_soc);
4460*5113495bSYour Name #else
4461*5113495bSYour Name static inline
dp_mon_ops_register_tx_2_0(struct dp_mon_soc * mon_soc)4462*5113495bSYour Name void dp_mon_ops_register_tx_2_0(struct dp_mon_soc *mon_soc)
4463*5113495bSYour Name {
4464*5113495bSYour Name }
4465*5113495bSYour Name #endif /* WLAN_PKT_CAPTURE_TX_2_0 */
4466*5113495bSYour Name 
4467*5113495bSYour Name #if defined(WLAN_PKT_CAPTURE_TX_2_0) || \
4468*5113495bSYour Name defined(WLAN_PKT_CAPTURE_RX_2_0)
4469*5113495bSYour Name /**
4470*5113495bSYour Name  * dp_mon_ops_register_2_0(): register monitor ops
4471*5113495bSYour Name  * @mon_soc: monitor soc handle
4472*5113495bSYour Name  *
4473*5113495bSYour Name  * return: void
4474*5113495bSYour Name  */
4475*5113495bSYour Name void dp_mon_ops_register_2_0(struct dp_mon_soc *mon_soc);
4476*5113495bSYour Name 
4477*5113495bSYour Name /**
4478*5113495bSYour Name  * dp_mon_cdp_ops_register_2_0(): register monitor cdp ops
4479*5113495bSYour Name  * @ops: cdp ops handle
4480*5113495bSYour Name  *
4481*5113495bSYour Name  * return: void
4482*5113495bSYour Name  */
4483*5113495bSYour Name void dp_mon_cdp_ops_register_2_0(struct cdp_ops *ops);
4484*5113495bSYour Name 
4485*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
4486*5113495bSYour Name /**
4487*5113495bSYour Name  * dp_cfr_filter_register_2_0(): register cfr filter setting API
4488*5113495bSYour Name  * @ops: cdp ops handle
4489*5113495bSYour Name  *
4490*5113495bSYour Name  * return: void
4491*5113495bSYour Name  */
4492*5113495bSYour Name void dp_cfr_filter_register_2_0(struct cdp_ops *ops);
4493*5113495bSYour Name #endif
4494*5113495bSYour Name void dp_mon_ops_register_cmn_2_0(struct dp_mon_soc *mon_soc);
4495*5113495bSYour Name #else
4496*5113495bSYour Name static inline void
dp_mon_ops_register_2_0(struct dp_mon_soc * mon_soc)4497*5113495bSYour Name dp_mon_ops_register_2_0(struct dp_mon_soc *mon_soc)
4498*5113495bSYour Name {
4499*5113495bSYour Name }
4500*5113495bSYour Name 
4501*5113495bSYour Name static inline void
dp_mon_cdp_ops_register_2_0(struct cdp_ops * ops)4502*5113495bSYour Name dp_mon_cdp_ops_register_2_0(struct cdp_ops *ops)
4503*5113495bSYour Name {
4504*5113495bSYour Name }
4505*5113495bSYour Name 
4506*5113495bSYour Name static inline void
dp_mon_ops_register_cmn_2_0(struct dp_mon_soc * mon_soc)4507*5113495bSYour Name dp_mon_ops_register_cmn_2_0(struct dp_mon_soc *mon_soc)
4508*5113495bSYour Name {
4509*5113495bSYour Name }
4510*5113495bSYour Name #endif /* WLAN_PKT_CAPTURE_TX_2_0 OR WLAN_PKT_CAPTURE_RX_2_0 */
4511*5113495bSYour Name 
4512*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_RX_2_0
4513*5113495bSYour Name /**
4514*5113495bSYour Name  * dp_mon_ops_register_rx_2_0(): register monitor rx ops 2.0
4515*5113495bSYour Name  * @mon_soc: monitor soc handle
4516*5113495bSYour Name  *
4517*5113495bSYour Name  * return: void
4518*5113495bSYour Name  */
4519*5113495bSYour Name void dp_mon_ops_register_rx_2_0(struct dp_mon_soc *mon_soc);
4520*5113495bSYour Name #else
4521*5113495bSYour Name static inline
dp_mon_ops_register_rx_2_0(struct dp_mon_soc * mon_soc)4522*5113495bSYour Name void dp_mon_ops_register_rx_2_0(struct dp_mon_soc *mon_soc)
4523*5113495bSYour Name {
4524*5113495bSYour Name }
4525*5113495bSYour Name #endif
4526*5113495bSYour Name 
4527*5113495bSYour Name /**
4528*5113495bSYour Name  * dp_mon_register_feature_ops(): Register mon feature ops
4529*5113495bSYour Name  * @soc: Datapath soc context
4530*5113495bSYour Name  *
4531*5113495bSYour Name  * return: void
4532*5113495bSYour Name  */
4533*5113495bSYour Name static inline
dp_mon_register_feature_ops(struct dp_soc * soc)4534*5113495bSYour Name void dp_mon_register_feature_ops(struct dp_soc *soc)
4535*5113495bSYour Name {
4536*5113495bSYour Name 	struct dp_mon_ops *mon_ops = NULL;
4537*5113495bSYour Name 
4538*5113495bSYour Name 	mon_ops = dp_mon_ops_get(soc);
4539*5113495bSYour Name 	if (!mon_ops) {
4540*5113495bSYour Name 		dp_mon_err("Monitor ops is NULL");
4541*5113495bSYour Name 		return;
4542*5113495bSYour Name 	}
4543*5113495bSYour Name 	if (mon_ops->mon_register_feature_ops)
4544*5113495bSYour Name 		mon_ops->mon_register_feature_ops(soc);
4545*5113495bSYour Name }
4546*5113495bSYour Name 
4547*5113495bSYour Name /**
4548*5113495bSYour Name  * dp_pdev_get_rx_mon_stats(): Get pdev Rx monitor stats
4549*5113495bSYour Name  * @soc_hdl: soc handle
4550*5113495bSYour Name  * @pdev_id: id of pdev handle
4551*5113495bSYour Name  * @stats: User allocated stats buffer
4552*5113495bSYour Name  *
4553*5113495bSYour Name  * return: status success/failure
4554*5113495bSYour Name  */
4555*5113495bSYour Name QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
4556*5113495bSYour Name 				    struct cdp_pdev_mon_stats *stats);
4557*5113495bSYour Name 
4558*5113495bSYour Name /**
4559*5113495bSYour Name  * dp_enable_mon_reap_timer() - enable/disable reap timer
4560*5113495bSYour Name  * @soc_hdl: Datapath soc handle
4561*5113495bSYour Name  * @source: trigger source of the timer
4562*5113495bSYour Name  * @enable: Enable/Disable reap timer of monitor status ring
4563*5113495bSYour Name  *
4564*5113495bSYour Name  * Return: true if a timer-start/stop is performed, false otherwise.
4565*5113495bSYour Name  */
4566*5113495bSYour Name bool dp_enable_mon_reap_timer(struct cdp_soc_t *soc_hdl,
4567*5113495bSYour Name 			      enum cdp_mon_reap_source source, bool enable);
4568*5113495bSYour Name 
4569*5113495bSYour Name QDF_STATUS dp_vdev_set_monitor_mode(struct cdp_soc_t *dp_soc,
4570*5113495bSYour Name 				    uint8_t vdev_id,
4571*5113495bSYour Name 				    uint8_t special_monitor);
4572*5113495bSYour Name 
4573*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
4574*5113495bSYour Name /**
4575*5113495bSYour Name  * dp_enable_enhanced_stats() - enable enhanced and MLD Link Peer stats
4576*5113495bSYour Name  * @soc: Datapath soc handle
4577*5113495bSYour Name  * @pdev_id: Pdev Id on which stats will get enable
4578*5113495bSYour Name  *
4579*5113495bSYour Name  * Return: status success/failure
4580*5113495bSYour Name  */
4581*5113495bSYour Name QDF_STATUS
4582*5113495bSYour Name dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id);
4583*5113495bSYour Name 
4584*5113495bSYour Name /**
4585*5113495bSYour Name  * dp_disable_enhanced_stats() - disable enhanced and MLD Link Peer stats
4586*5113495bSYour Name  * @soc: Datapath soc handle
4587*5113495bSYour Name  * @pdev_id: Pdev Id on which stats will get disable
4588*5113495bSYour Name  *
4589*5113495bSYour Name  * Return: status success/failure
4590*5113495bSYour Name  */
4591*5113495bSYour Name QDF_STATUS
4592*5113495bSYour Name dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id);
4593*5113495bSYour Name #endif /* QCA_ENHANCED_STATS_SUPPORT */
4594*5113495bSYour Name 
4595*5113495bSYour Name /*
4596*5113495bSYour Name  * dp_monitor_lite_mon_disable_rx() - disables rx lite mon
4597*5113495bSYour Name  * @pdev: dp pdev
4598*5113495bSYour Name  *
4599*5113495bSYour Name  * Return: void
4600*5113495bSYour Name  */
4601*5113495bSYour Name static inline void
dp_monitor_lite_mon_disable_rx(struct dp_pdev * pdev)4602*5113495bSYour Name dp_monitor_lite_mon_disable_rx(struct dp_pdev *pdev)
4603*5113495bSYour Name {
4604*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4605*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
4606*5113495bSYour Name 
4607*5113495bSYour Name 	if (!mon_soc) {
4608*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
4609*5113495bSYour Name 		return;
4610*5113495bSYour Name }
4611*5113495bSYour Name 
4612*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4613*5113495bSYour Name 	if (!monitor_ops ||
4614*5113495bSYour Name 	    !monitor_ops->mon_lite_mon_disable_rx) {
4615*5113495bSYour Name 		dp_mon_debug("callback not registered");
4616*5113495bSYour Name 		return;
4617*5113495bSYour Name }
4618*5113495bSYour Name 
4619*5113495bSYour Name 	return monitor_ops->mon_lite_mon_disable_rx(pdev);
4620*5113495bSYour Name }
4621*5113495bSYour Name 
4622*5113495bSYour Name /*
4623*5113495bSYour Name  * dp_monitor_lite_mon_is_rx_adv_filter_enable()
4624*5113495bSYour Name  *   - check if advance mon filter is already applied
4625*5113495bSYour Name  * @pdev: dp pdev
4626*5113495bSYour Name  *
4627*5113495bSYour Name  * Return: bool
4628*5113495bSYour Name  */
4629*5113495bSYour Name static inline bool
dp_monitor_lite_mon_is_rx_adv_filter_enable(struct dp_pdev * pdev)4630*5113495bSYour Name dp_monitor_lite_mon_is_rx_adv_filter_enable(struct dp_pdev *pdev)
4631*5113495bSYour Name {
4632*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4633*5113495bSYour Name 	struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
4634*5113495bSYour Name 
4635*5113495bSYour Name 	if (!mon_soc) {
4636*5113495bSYour Name 		dp_mon_debug("monitor soc is NULL");
4637*5113495bSYour Name 		return false;
4638*5113495bSYour Name 	}
4639*5113495bSYour Name 
4640*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4641*5113495bSYour Name 	if (!monitor_ops ||
4642*5113495bSYour Name 	    !monitor_ops->mon_lite_mon_disable_rx) {
4643*5113495bSYour Name 		dp_mon_debug("callback not registered");
4644*5113495bSYour Name 		return false;
4645*5113495bSYour Name 	}
4646*5113495bSYour Name 
4647*5113495bSYour Name 	return monitor_ops->mon_lite_mon_is_rx_adv_filter_enable(pdev);
4648*5113495bSYour Name }
4649*5113495bSYour Name 
4650*5113495bSYour Name #ifndef QCA_SUPPORT_LITE_MONITOR
4651*5113495bSYour Name static inline void
dp_lite_mon_disable_rx(struct dp_pdev * pdev)4652*5113495bSYour Name dp_lite_mon_disable_rx(struct dp_pdev *pdev)
4653*5113495bSYour Name {
4654*5113495bSYour Name }
4655*5113495bSYour Name 
4656*5113495bSYour Name static inline void
dp_lite_mon_disable_tx(struct dp_pdev * pdev)4657*5113495bSYour Name dp_lite_mon_disable_tx(struct dp_pdev *pdev)
4658*5113495bSYour Name {
4659*5113495bSYour Name }
4660*5113495bSYour Name 
4661*5113495bSYour Name static inline bool
dp_lite_mon_is_rx_adv_filter_enable(struct dp_pdev * pdev)4662*5113495bSYour Name dp_lite_mon_is_rx_adv_filter_enable(struct dp_pdev *pdev)
4663*5113495bSYour Name {
4664*5113495bSYour Name 	return false;
4665*5113495bSYour Name }
4666*5113495bSYour Name 
4667*5113495bSYour Name static inline bool
dp_lite_mon_get_filter_ucast_data(struct cdp_pdev * pdev_handle)4668*5113495bSYour Name dp_lite_mon_get_filter_ucast_data(struct cdp_pdev *pdev_handle)
4669*5113495bSYour Name {
4670*5113495bSYour Name 	return false;
4671*5113495bSYour Name }
4672*5113495bSYour Name 
4673*5113495bSYour Name static inline bool
dp_lite_mon_get_filter_mcast_data(struct cdp_pdev * pdev_handle)4674*5113495bSYour Name dp_lite_mon_get_filter_mcast_data(struct cdp_pdev *pdev_handle)
4675*5113495bSYour Name {
4676*5113495bSYour Name 	return false;
4677*5113495bSYour Name }
4678*5113495bSYour Name 
4679*5113495bSYour Name static inline bool
dp_lite_mon_get_filter_non_data(struct cdp_pdev * pdev_handle)4680*5113495bSYour Name dp_lite_mon_get_filter_non_data(struct cdp_pdev *pdev_handle)
4681*5113495bSYour Name {
4682*5113495bSYour Name 	return false;
4683*5113495bSYour Name }
4684*5113495bSYour Name 
4685*5113495bSYour Name static inline int
dp_lite_mon_is_level_msdu(struct dp_mon_pdev * mon_pdev)4686*5113495bSYour Name dp_lite_mon_is_level_msdu(struct dp_mon_pdev *mon_pdev)
4687*5113495bSYour Name {
4688*5113495bSYour Name 	return 0;
4689*5113495bSYour Name }
4690*5113495bSYour Name 
4691*5113495bSYour Name static inline int
dp_lite_mon_is_rx_enabled(struct dp_mon_pdev * mon_pdev)4692*5113495bSYour Name dp_lite_mon_is_rx_enabled(struct dp_mon_pdev *mon_pdev)
4693*5113495bSYour Name {
4694*5113495bSYour Name 	return 0;
4695*5113495bSYour Name }
4696*5113495bSYour Name 
4697*5113495bSYour Name static inline int
dp_lite_mon_is_tx_enabled(struct dp_mon_pdev * mon_pdev)4698*5113495bSYour Name dp_lite_mon_is_tx_enabled(struct dp_mon_pdev *mon_pdev)
4699*5113495bSYour Name {
4700*5113495bSYour Name 	return 0;
4701*5113495bSYour Name }
4702*5113495bSYour Name 
4703*5113495bSYour Name static inline QDF_STATUS
dp_lite_mon_alloc(struct dp_pdev * pdev)4704*5113495bSYour Name dp_lite_mon_alloc(struct dp_pdev *pdev)
4705*5113495bSYour Name {
4706*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
4707*5113495bSYour Name }
4708*5113495bSYour Name 
4709*5113495bSYour Name static inline void
dp_lite_mon_dealloc(struct dp_pdev * pdev)4710*5113495bSYour Name dp_lite_mon_dealloc(struct dp_pdev *pdev)
4711*5113495bSYour Name {
4712*5113495bSYour Name }
4713*5113495bSYour Name 
4714*5113495bSYour Name static inline void
dp_lite_mon_vdev_delete(struct dp_pdev * pdev,struct dp_vdev * vdev)4715*5113495bSYour Name dp_lite_mon_vdev_delete(struct dp_pdev *pdev, struct dp_vdev *vdev)
4716*5113495bSYour Name {
4717*5113495bSYour Name }
4718*5113495bSYour Name 
4719*5113495bSYour Name static inline int
dp_lite_mon_config_nac_peer(struct cdp_soc_t * soc_hdl,uint8_t vdev_id,uint32_t cmd,uint8_t * macaddr)4720*5113495bSYour Name dp_lite_mon_config_nac_peer(struct cdp_soc_t *soc_hdl,
4721*5113495bSYour Name 			    uint8_t vdev_id,
4722*5113495bSYour Name 			    uint32_t cmd, uint8_t *macaddr)
4723*5113495bSYour Name {
4724*5113495bSYour Name 	return 0;
4725*5113495bSYour Name }
4726*5113495bSYour Name 
4727*5113495bSYour Name static inline QDF_STATUS
dp_lite_mon_config_nac_rssi_peer(struct cdp_soc_t * soc_hdl,uint8_t vdev_id,enum cdp_nac_param_cmd cmd,char * bssid,char * macaddr,uint8_t chan_num)4728*5113495bSYour Name dp_lite_mon_config_nac_rssi_peer(struct cdp_soc_t *soc_hdl,
4729*5113495bSYour Name 				 uint8_t vdev_id,
4730*5113495bSYour Name 				 enum cdp_nac_param_cmd cmd,
4731*5113495bSYour Name 				 char *bssid, char *macaddr,
4732*5113495bSYour Name 				 uint8_t chan_num)
4733*5113495bSYour Name {
4734*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
4735*5113495bSYour Name }
4736*5113495bSYour Name 
4737*5113495bSYour Name static inline QDF_STATUS
dp_lite_mon_get_nac_peer_rssi(struct cdp_soc_t * soc_hdl,uint8_t vdev_id,char * macaddr,uint8_t * rssi)4738*5113495bSYour Name dp_lite_mon_get_nac_peer_rssi(struct cdp_soc_t *soc_hdl,
4739*5113495bSYour Name 			      uint8_t vdev_id, char *macaddr,
4740*5113495bSYour Name 			      uint8_t *rssi)
4741*5113495bSYour Name {
4742*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
4743*5113495bSYour Name }
4744*5113495bSYour Name 
4745*5113495bSYour Name static inline QDF_STATUS
dp_lite_mon_rx_mpdu_process(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,qdf_nbuf_t mon_mpdu,uint16_t mpdu_id,uint8_t user)4746*5113495bSYour Name dp_lite_mon_rx_mpdu_process(struct dp_pdev *pdev,
4747*5113495bSYour Name 			    struct hal_rx_ppdu_info *ppdu_info,
4748*5113495bSYour Name 			    qdf_nbuf_t mon_mpdu, uint16_t mpdu_id,
4749*5113495bSYour Name 			    uint8_t user)
4750*5113495bSYour Name {
4751*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
4752*5113495bSYour Name }
4753*5113495bSYour Name 
4754*5113495bSYour Name static inline int
dp_lite_mon_get_legacy_feature_enabled(struct cdp_soc_t * soc,uint8_t pdev_id,uint8_t direction)4755*5113495bSYour Name dp_lite_mon_get_legacy_feature_enabled(struct cdp_soc_t *soc,
4756*5113495bSYour Name 				       uint8_t pdev_id,
4757*5113495bSYour Name 				       uint8_t direction)
4758*5113495bSYour Name {
4759*5113495bSYour Name 	return 0;
4760*5113495bSYour Name }
4761*5113495bSYour Name #endif
4762*5113495bSYour Name 
4763*5113495bSYour Name #ifdef WLAN_CONFIG_TELEMETRY_AGENT
4764*5113495bSYour Name static inline
dp_monitor_peer_telemetry_stats(struct dp_peer * peer,struct cdp_peer_telemetry_stats * stats)4765*5113495bSYour Name void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
4766*5113495bSYour Name 				     struct cdp_peer_telemetry_stats *stats)
4767*5113495bSYour Name {
4768*5113495bSYour Name 	struct dp_mon_peer_stats *mon_peer_stats = NULL;
4769*5113495bSYour Name 	uint8_t ac;
4770*5113495bSYour Name 
4771*5113495bSYour Name 	if (qdf_unlikely(!peer->monitor_peer))
4772*5113495bSYour Name 		return;
4773*5113495bSYour Name 
4774*5113495bSYour Name 	mon_peer_stats = &peer->monitor_peer->stats;
4775*5113495bSYour Name 	for (ac = 0; ac < WME_AC_MAX; ac++) {
4776*5113495bSYour Name 		stats->tx_airtime_consumption[ac] =
4777*5113495bSYour Name 			mon_peer_stats->airtime_stats.tx_airtime_consumption[ac].avg_consumption_per_sec;
4778*5113495bSYour Name 		stats->rx_airtime_consumption[ac] =
4779*5113495bSYour Name 			mon_peer_stats->airtime_stats.rx_airtime_consumption[ac].avg_consumption_per_sec;
4780*5113495bSYour Name 	}
4781*5113495bSYour Name 	stats->tx_mpdu_retried = mon_peer_stats->tx.retries;
4782*5113495bSYour Name 	stats->tx_mpdu_total = mon_peer_stats->tx.tx_mpdus_tried;
4783*5113495bSYour Name 	stats->rx_mpdu_retried = mon_peer_stats->rx.mpdu_retry_cnt;
4784*5113495bSYour Name 	stats->rx_mpdu_total = mon_peer_stats->rx.rx_mpdus;
4785*5113495bSYour Name 	stats->snr = CDP_SNR_OUT(mon_peer_stats->rx.avg_snr);
4786*5113495bSYour Name }
4787*5113495bSYour Name 
4788*5113495bSYour Name static inline
dp_monitor_peer_deter_stats(struct dp_peer * peer,struct cdp_peer_deter_stats * stats)4789*5113495bSYour Name void dp_monitor_peer_deter_stats(struct dp_peer *peer,
4790*5113495bSYour Name 				 struct cdp_peer_deter_stats *stats)
4791*5113495bSYour Name {
4792*5113495bSYour Name 	struct dp_mon_peer_stats *mon_peer_stats = NULL;
4793*5113495bSYour Name 	struct cdp_peer_deter_stats *deter_stats;
4794*5113495bSYour Name 
4795*5113495bSYour Name 	if (qdf_unlikely(!peer->monitor_peer))
4796*5113495bSYour Name 		return;
4797*5113495bSYour Name 
4798*5113495bSYour Name 	mon_peer_stats = &peer->monitor_peer->stats;
4799*5113495bSYour Name 	deter_stats = &mon_peer_stats->deter_stats.deter[0];
4800*5113495bSYour Name 	qdf_mem_copy(stats, deter_stats, sizeof(*stats) * CDP_DATA_TID_MAX);
4801*5113495bSYour Name }
4802*5113495bSYour Name #endif
4803*5113495bSYour Name 
4804*5113495bSYour Name /**
4805*5113495bSYour Name  * dp_monitor_is_tx_cap_enabled() - get tx-cature enabled/disabled
4806*5113495bSYour Name  * @peer: DP peer handle
4807*5113495bSYour Name  *
4808*5113495bSYour Name  * Return: true if tx-capture is enabled
4809*5113495bSYour Name  */
dp_monitor_is_tx_cap_enabled(struct dp_peer * peer)4810*5113495bSYour Name static inline bool dp_monitor_is_tx_cap_enabled(struct dp_peer *peer)
4811*5113495bSYour Name {
4812*5113495bSYour Name 	return peer->monitor_peer ? peer->monitor_peer->tx_cap_enabled : 0;
4813*5113495bSYour Name }
4814*5113495bSYour Name 
4815*5113495bSYour Name /**
4816*5113495bSYour Name  * dp_monitor_is_rx_cap_enabled() - get rx-cature enabled/disabled
4817*5113495bSYour Name  * @peer: DP peer handle
4818*5113495bSYour Name  *
4819*5113495bSYour Name  * Return: true if rx-capture is enabled
4820*5113495bSYour Name  */
dp_monitor_is_rx_cap_enabled(struct dp_peer * peer)4821*5113495bSYour Name static inline bool dp_monitor_is_rx_cap_enabled(struct dp_peer *peer)
4822*5113495bSYour Name {
4823*5113495bSYour Name 	return peer->monitor_peer ? peer->monitor_peer->rx_cap_enabled : 0;
4824*5113495bSYour Name }
4825*5113495bSYour Name 
4826*5113495bSYour Name #if !(!defined(DISABLE_MON_CONFIG) && (defined(WLAN_PKT_CAPTURE_TX_2_0) || \
4827*5113495bSYour Name 	defined(WLAN_PKT_CAPTURE_RX_2_0)))
4828*5113495bSYour Name /**
4829*5113495bSYour Name  * dp_mon_get_context_size_be() - get BE specific size for mon pdev/soc
4830*5113495bSYour Name  * @context_type: context type for which the size is needed
4831*5113495bSYour Name  *
4832*5113495bSYour Name  * Return: size in bytes for the context_type
4833*5113495bSYour Name  */
4834*5113495bSYour Name static inline
dp_mon_get_context_size_be(enum dp_context_type context_type)4835*5113495bSYour Name qdf_size_t dp_mon_get_context_size_be(enum dp_context_type context_type)
4836*5113495bSYour Name {
4837*5113495bSYour Name 	switch (context_type) {
4838*5113495bSYour Name 	case DP_CONTEXT_TYPE_MON_SOC:
4839*5113495bSYour Name 		return sizeof(struct dp_mon_soc);
4840*5113495bSYour Name 	case DP_CONTEXT_TYPE_MON_PDEV:
4841*5113495bSYour Name 		return sizeof(struct dp_mon_pdev);
4842*5113495bSYour Name 	default:
4843*5113495bSYour Name 		return 0;
4844*5113495bSYour Name 	}
4845*5113495bSYour Name }
4846*5113495bSYour Name #endif
4847*5113495bSYour Name 
4848*5113495bSYour Name /**
4849*5113495bSYour Name  * dp_mon_rx_print_advanced_stats() - print advanced monitor stats
4850*5113495bSYour Name  * @soc: DP soc handle
4851*5113495bSYour Name  * @pdev: DP pdev handle
4852*5113495bSYour Name  *
4853*5113495bSYour Name  * Return: void
4854*5113495bSYour Name  */
4855*5113495bSYour Name static inline void
dp_mon_rx_print_advanced_stats(struct dp_soc * soc,struct dp_pdev * pdev)4856*5113495bSYour Name dp_mon_rx_print_advanced_stats(struct dp_soc *soc,
4857*5113495bSYour Name 			       struct dp_pdev *pdev)
4858*5113495bSYour Name {
4859*5113495bSYour Name 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
4860*5113495bSYour Name 	struct dp_mon_ops *monitor_ops;
4861*5113495bSYour Name 
4862*5113495bSYour Name 	if (!mon_soc) {
4863*5113495bSYour Name 		dp_mon_debug("mon soc is NULL");
4864*5113495bSYour Name 		return;
4865*5113495bSYour Name 	}
4866*5113495bSYour Name 
4867*5113495bSYour Name 	monitor_ops = mon_soc->mon_ops;
4868*5113495bSYour Name 	if (!monitor_ops ||
4869*5113495bSYour Name 	    !monitor_ops->mon_rx_print_advanced_stats) {
4870*5113495bSYour Name 		dp_mon_debug("callback not registered");
4871*5113495bSYour Name 		return;
4872*5113495bSYour Name 	}
4873*5113495bSYour Name 	return monitor_ops->mon_rx_print_advanced_stats(soc, pdev);
4874*5113495bSYour Name }
4875*5113495bSYour Name 
4876*5113495bSYour Name #ifdef WLAN_CONFIG_TELEMETRY_AGENT
4877*5113495bSYour Name /*
4878*5113495bSYour Name  * dp_update_pdev_mon_telemetry_airtime_stats() - update telemetry airtime
4879*5113495bSYour Name  * stats in monitor pdev
4880*5113495bSYour Name  *
4881*5113495bSYour Name  *@soc: dp soc handle
4882*5113495bSYour Name  *@pdev_id: pdev id
4883*5113495bSYour Name  *
4884*5113495bSYour Name  * This API is used to update telemetry airtime stats in monitor pdev
4885*5113495bSYour Name  *
4886*5113495bSYour Name  * Return: Success if stats are updated, else failure
4887*5113495bSYour Name  */
4888*5113495bSYour Name 
4889*5113495bSYour Name QDF_STATUS dp_pdev_update_telemetry_airtime_stats(struct cdp_soc_t *soc,
4890*5113495bSYour Name 						  uint8_t pdev_id);
4891*5113495bSYour Name #endif
4892*5113495bSYour Name 
4893*5113495bSYour Name /*
4894*5113495bSYour Name  * dp_mon_register_lpc_ops_1_0() - set local packet capture 1_0 mon ops
4895*5113495bSYour Name  * @mon_ops: monitor ops
4896*5113495bSYour Name  *
4897*5113495bSYour Name  * This function initializes the mon_ops callbacks.
4898*5113495bSYour Name  * index [0] is for Monitor 1.0 and index [1] is for Monitor 2.0
4899*5113495bSYour Name  * based on the @WLAN_FEATURE_LOCAL_PKT_CAPTURE macro, it sets the
4900*5113495bSYour Name  * appropriate callbacks
4901*5113495bSYour Name  *
4902*5113495bSYour Name  * Return: None
4903*5113495bSYour Name  */
4904*5113495bSYour Name void dp_mon_register_lpc_ops_1_0(struct dp_mon_ops *mon_ops);
4905*5113495bSYour Name 
4906*5113495bSYour Name /*
4907*5113495bSYour Name  * dp_mon_register_tx_pkt_enh_ops_1_0() - set tx pkt enh mon ops
4908*5113495bSYour Name  * @mon_ops: monitor ops
4909*5113495bSYour Name  *
4910*5113495bSYour Name  * Return: None
4911*5113495bSYour Name  */
4912*5113495bSYour Name void dp_mon_register_tx_pkt_enh_ops_1_0(struct dp_mon_ops *mon_ops);
4913*5113495bSYour Name 
4914*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
4915*5113495bSYour Name /*
4916*5113495bSYour Name  * dp_local_pkt_capture_tx_config() - local packet capture tx config
4917*5113495bSYour Name  * @pdev: physical device handle
4918*5113495bSYour Name  *
4919*5113495bSYour Name  * Return: QDF_STATUS
4920*5113495bSYour Name  */
4921*5113495bSYour Name QDF_STATUS dp_local_pkt_capture_tx_config(struct dp_pdev *pdev);
4922*5113495bSYour Name 
4923*5113495bSYour Name /*
4924*5113495bSYour Name  * dp_mon_mode_local_pkt_capture() - Check if in LPC mode
4925*5113495bSYour Name  * @soc: DP SOC handle
4926*5113495bSYour Name  *
4927*5113495bSYour Name  * Return: True in case of LPC mode else false
4928*5113495bSYour Name  *
4929*5113495bSYour Name  */
4930*5113495bSYour Name static inline bool
dp_mon_mode_local_pkt_capture(struct dp_soc * soc)4931*5113495bSYour Name dp_mon_mode_local_pkt_capture(struct dp_soc *soc)
4932*5113495bSYour Name {
4933*5113495bSYour Name 	/* Currently there is no way to distinguish between
4934*5113495bSYour Name 	 * Local Packet Capture and STA+Mon mode as both mode
4935*5113495bSYour Name 	 * uses same monitor interface. So to distinguish between
4936*5113495bSYour Name 	 * two mode in local_packet_capture enable case use
4937*5113495bSYour Name 	 * mon_flags which can be passed during monitor interface
4938*5113495bSYour Name 	 * add time. If "flags otherbss" is passed during
4939*5113495bSYour Name 	 * monitor interface add driver will consider current mode
4940*5113495bSYour Name 	 * as STA+MON mode, LPC otherwise.
4941*5113495bSYour Name 	 */
4942*5113495bSYour Name 	if (wlan_cfg_get_local_pkt_capture(soc->wlan_cfg_ctx) &&
4943*5113495bSYour Name 	    !(soc->mon_flags & QDF_MONITOR_FLAG_OTHER_BSS))
4944*5113495bSYour Name 		return true;
4945*5113495bSYour Name 
4946*5113495bSYour Name 	return false;
4947*5113495bSYour Name }
4948*5113495bSYour Name #else
4949*5113495bSYour Name static inline
dp_local_pkt_capture_tx_config(struct dp_pdev * pdev)4950*5113495bSYour Name QDF_STATUS dp_local_pkt_capture_tx_config(struct dp_pdev *pdev)
4951*5113495bSYour Name {
4952*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
4953*5113495bSYour Name }
4954*5113495bSYour Name 
4955*5113495bSYour Name static inline bool
dp_mon_mode_local_pkt_capture(struct dp_soc * soc)4956*5113495bSYour Name dp_mon_mode_local_pkt_capture(struct dp_soc *soc)
4957*5113495bSYour Name {
4958*5113495bSYour Name 	return false;
4959*5113495bSYour Name }
4960*5113495bSYour Name #endif
4961*5113495bSYour Name 
4962*5113495bSYour Name #ifdef WIFI_MONITOR_SUPPORT
4963*5113495bSYour Name void
4964*5113495bSYour Name dp_check_and_dump_full_mon_info(struct dp_soc *soc, struct dp_pdev *pdev,
4965*5113495bSYour Name 				int mac_id, int war);
4966*5113495bSYour Name 
4967*5113495bSYour Name /**
4968*5113495bSYour Name  * dp_mon_rx_ppdu_status_reset() - reset and clear ppdu rx status
4969*5113495bSYour Name  * @mon_pdev: monitor pdev
4970*5113495bSYour Name  *
4971*5113495bSYour Name  * Return: none
4972*5113495bSYour Name  */
4973*5113495bSYour Name static inline void
dp_mon_rx_ppdu_status_reset(struct dp_mon_pdev * mon_pdev)4974*5113495bSYour Name dp_mon_rx_ppdu_status_reset(struct dp_mon_pdev *mon_pdev)
4975*5113495bSYour Name {
4976*5113495bSYour Name 	mon_pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
4977*5113495bSYour Name 	mon_pdev->ppdu_info.com_info.num_users = 0;
4978*5113495bSYour Name 	qdf_mem_zero(&mon_pdev->ppdu_info.rx_status,
4979*5113495bSYour Name 		     sizeof(mon_pdev->ppdu_info.rx_status));
4980*5113495bSYour Name }
4981*5113495bSYour Name #else
4982*5113495bSYour Name void
4983*5113495bSYour Name dp_check_and_dump_full_mon_info(struct dp_soc *soc, struct dp_pdev *pdev,
4984*5113495bSYour Name 				int mac_id, int war);
4985*5113495bSYour Name 
4986*5113495bSYour Name {
4987*5113495bSYour Name }
4988*5113495bSYour Name 
4989*5113495bSYour Name static inline void
dp_mon_rx_ppdu_status_reset(struct dp_mon_pdev * mon_pdev)4990*5113495bSYour Name dp_mon_rx_ppdu_status_reset(struct dp_mon_pdev *mon_pdev)
4991*5113495bSYour Name {
4992*5113495bSYour Name }
4993*5113495bSYour Name #endif
4994*5113495bSYour Name 
4995*5113495bSYour Name static inline void
dp_mon_pdev_filter_init(struct dp_mon_pdev * mon_pdev)4996*5113495bSYour Name dp_mon_pdev_filter_init(struct dp_mon_pdev *mon_pdev)
4997*5113495bSYour Name {
4998*5113495bSYour Name 	if (!mon_pdev)
4999*5113495bSYour Name 		return;
5000*5113495bSYour Name 
5001*5113495bSYour Name 	mon_pdev->mon_filter_mode = MON_FILTER_ALL;
5002*5113495bSYour Name 	mon_pdev->fp_mgmt_filter = FILTER_MGMT_ALL;
5003*5113495bSYour Name 	mon_pdev->fp_ctrl_filter = FILTER_CTRL_ALL;
5004*5113495bSYour Name 	mon_pdev->fp_data_filter = FILTER_DATA_ALL;
5005*5113495bSYour Name 	mon_pdev->mo_mgmt_filter = FILTER_MGMT_ALL;
5006*5113495bSYour Name 	mon_pdev->mo_ctrl_filter = FILTER_CTRL_ALL;
5007*5113495bSYour Name 	mon_pdev->mo_data_filter = FILTER_DATA_ALL;
5008*5113495bSYour Name }
5009*5113495bSYour Name #endif /* _DP_MON_H_ */
5010