1*5113495bSYour Name /*
2*5113495bSYour Name * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name * Copyright (c) 2021-2023 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_1_0_H_
19*5113495bSYour Name #define _DP_MON_1_0_H_
20*5113495bSYour Name
21*5113495bSYour Name #ifdef WLAN_RX_PKT_CAPTURE_ENH
22*5113495bSYour Name #include <dp_rx_mon_feature.h>
23*5113495bSYour Name #endif
24*5113495bSYour Name
25*5113495bSYour Name #include <dp_rx_mon.h>
26*5113495bSYour Name
27*5113495bSYour Name void dp_flush_monitor_rings(struct dp_soc *soc);
28*5113495bSYour Name
29*5113495bSYour Name #if !defined(DISABLE_MON_CONFIG)
30*5113495bSYour Name /**
31*5113495bSYour Name * dp_mon_htt_srng_setup_1_0() - Prepare HTT messages for Monitor rings
32*5113495bSYour Name * @soc: soc handle
33*5113495bSYour Name * @pdev: physical device handle
34*5113495bSYour Name * @mac_id: ring number
35*5113495bSYour Name * @mac_for_pdev: mac_id
36*5113495bSYour Name *
37*5113495bSYour Name * Return: non-zero for failure, zero for success
38*5113495bSYour Name */
39*5113495bSYour Name QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
40*5113495bSYour Name struct dp_pdev *pdev,
41*5113495bSYour Name int mac_id,
42*5113495bSYour Name int mac_for_pdev);
43*5113495bSYour Name
44*5113495bSYour Name /**
45*5113495bSYour Name * dp_mon_rings_alloc_1_0() - DP monitor rings allocation
46*5113495bSYour Name * @pdev: physical device handle
47*5113495bSYour Name *
48*5113495bSYour Name * Return: non-zero for failure, zero for success
49*5113495bSYour Name */
50*5113495bSYour Name QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev);
51*5113495bSYour Name
52*5113495bSYour Name /**
53*5113495bSYour Name * dp_mon_rings_free_1_0() - DP monitor rings deallocation
54*5113495bSYour Name * @pdev: physical device handle
55*5113495bSYour Name *
56*5113495bSYour Name * Return: non-zero for failure, zero for success
57*5113495bSYour Name */
58*5113495bSYour Name void dp_mon_rings_free_1_0(struct dp_pdev *pdev);
59*5113495bSYour Name
60*5113495bSYour Name /**
61*5113495bSYour Name * dp_mon_rings_init_1_0() - DP monitor rings initialization
62*5113495bSYour Name * @pdev: physical device handle
63*5113495bSYour Name *
64*5113495bSYour Name * Return: non-zero for failure, zero for success
65*5113495bSYour Name */
66*5113495bSYour Name QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev);
67*5113495bSYour Name
68*5113495bSYour Name /**
69*5113495bSYour Name * dp_mon_rings_deinit_1_0() - DP monitor rings deinitialization
70*5113495bSYour Name * @pdev: physical device handle
71*5113495bSYour Name *
72*5113495bSYour Name * Return: non-zero for failure, zero for success
73*5113495bSYour Name */
74*5113495bSYour Name void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev);
75*5113495bSYour Name #else
76*5113495bSYour Name static inline
dp_mon_rings_deinit_1_0(struct dp_pdev * pdev)77*5113495bSYour Name void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev)
78*5113495bSYour Name {
79*5113495bSYour Name }
80*5113495bSYour Name
81*5113495bSYour Name static inline
dp_mon_rings_free_1_0(struct dp_pdev * pdev)82*5113495bSYour Name void dp_mon_rings_free_1_0(struct dp_pdev *pdev)
83*5113495bSYour Name {
84*5113495bSYour Name }
85*5113495bSYour Name
86*5113495bSYour Name static inline
dp_mon_rings_init_1_0(struct dp_pdev * pdev)87*5113495bSYour Name QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev)
88*5113495bSYour Name {
89*5113495bSYour Name return QDF_STATUS_SUCCESS;
90*5113495bSYour Name }
91*5113495bSYour Name
92*5113495bSYour Name static inline
dp_mon_rings_alloc_1_0(struct dp_pdev * pdev)93*5113495bSYour Name QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
94*5113495bSYour Name {
95*5113495bSYour Name return QDF_STATUS_SUCCESS;
96*5113495bSYour Name }
97*5113495bSYour Name
98*5113495bSYour Name #endif
99*5113495bSYour Name
100*5113495bSYour Name /* MCL specific functions */
101*5113495bSYour Name #if defined(DP_CON_MON)
102*5113495bSYour Name
103*5113495bSYour Name /*
104*5113495bSYour Name * dp_service_mon_rings()- service monitor rings
105*5113495bSYour Name * @soc: soc dp handle
106*5113495bSYour Name * @quota: number of ring entry that can be serviced
107*5113495bSYour Name *
108*5113495bSYour Name * Return: None
109*5113495bSYour Name *
110*5113495bSYour Name */
111*5113495bSYour Name void dp_service_mon_rings(struct dp_soc *soc, uint32_t quota);
112*5113495bSYour Name #endif
113*5113495bSYour Name
114*5113495bSYour Name /**
115*5113495bSYour Name * dp_mon_drop_packets_for_mac() - Drop the mon status ring and
116*5113495bSYour Name * dest ring packets for a given mac. Packets in status ring and
117*5113495bSYour Name * dest ring are dropped independently.
118*5113495bSYour Name * @pdev: DP pdev
119*5113495bSYour Name * @mac_id: mac id
120*5113495bSYour Name * @quota: max number of status ring entries that can be processed
121*5113495bSYour Name * @force_flush: Force flush ring
122*5113495bSYour Name *
123*5113495bSYour Name * Return: work done
124*5113495bSYour Name */
125*5113495bSYour Name uint32_t dp_mon_drop_packets_for_mac(struct dp_pdev *pdev, uint32_t mac_id,
126*5113495bSYour Name uint32_t quota, bool force_flush);
127*5113495bSYour Name
128*5113495bSYour Name /**
129*5113495bSYour Name * struct dp_mon_soc_li - Extended DP mon soc for LI targets
130*5113495bSYour Name * @mon_soc: dp_mon_soc structure
131*5113495bSYour Name */
132*5113495bSYour Name struct dp_mon_soc_li {
133*5113495bSYour Name struct dp_mon_soc mon_soc;
134*5113495bSYour Name };
135*5113495bSYour Name
136*5113495bSYour Name /**
137*5113495bSYour Name * struct dp_mon_pdev_li - Extended DP mon pdev for LI targets
138*5113495bSYour Name * @mon_pdev: dp_mon_pdev structure
139*5113495bSYour Name */
140*5113495bSYour Name struct dp_mon_pdev_li {
141*5113495bSYour Name struct dp_mon_pdev mon_pdev;
142*5113495bSYour Name };
143*5113495bSYour Name
144*5113495bSYour Name /**
145*5113495bSYour Name * dp_mon_get_context_size_li() - get LI specific size for mon pdev/soc
146*5113495bSYour Name * @context_type: context type for which the size is needed
147*5113495bSYour Name *
148*5113495bSYour Name * Return: size in bytes for the context_type
149*5113495bSYour Name */
150*5113495bSYour Name static inline
dp_mon_get_context_size_li(enum dp_context_type context_type)151*5113495bSYour Name qdf_size_t dp_mon_get_context_size_li(enum dp_context_type context_type)
152*5113495bSYour Name {
153*5113495bSYour Name switch (context_type) {
154*5113495bSYour Name case DP_CONTEXT_TYPE_MON_PDEV:
155*5113495bSYour Name return sizeof(struct dp_mon_pdev_li);
156*5113495bSYour Name case DP_CONTEXT_TYPE_MON_SOC:
157*5113495bSYour Name return sizeof(struct dp_mon_soc_li);
158*5113495bSYour Name default:
159*5113495bSYour Name return 0;
160*5113495bSYour Name }
161*5113495bSYour Name }
162*5113495bSYour Name #endif /* _DP_MON_1_0_H_ */
163