xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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_TX_MON_2_0_H_
19*5113495bSYour Name #define _DP_TX_MON_2_0_H_
20*5113495bSYour Name 
21*5113495bSYour Name #include <qdf_nbuf_frag.h>
22*5113495bSYour Name #include <hal_be_api_mon.h>
23*5113495bSYour Name 
24*5113495bSYour Name struct dp_mon_desc;
25*5113495bSYour Name 
26*5113495bSYour Name /**
27*5113495bSYour Name  * struct dp_tx_mon_desc_list - structure to store descriptor linked list
28*5113495bSYour Name  * @desc_list: descriptor list
29*5113495bSYour Name  * @tail: descriptor list tail
30*5113495bSYour Name  * @tx_mon_reap_cnt: tx monitor reap count
31*5113495bSYour Name  */
32*5113495bSYour Name struct dp_tx_mon_desc_list {
33*5113495bSYour Name 	union dp_mon_desc_list_elem_t *desc_list;
34*5113495bSYour Name 	union dp_mon_desc_list_elem_t *tail;
35*5113495bSYour Name 	uint32_t tx_mon_reap_cnt;
36*5113495bSYour Name };
37*5113495bSYour Name 
38*5113495bSYour Name /**
39*5113495bSYour Name  * dp_tx_mon_buf_desc_pool_deinit() - deinit tx monitor descriptor pool
40*5113495bSYour Name  * @soc: dp soc handle
41*5113495bSYour Name  *
42*5113495bSYour Name  */
43*5113495bSYour Name void
44*5113495bSYour Name dp_tx_mon_buf_desc_pool_deinit(struct dp_soc *soc);
45*5113495bSYour Name 
46*5113495bSYour Name /**
47*5113495bSYour Name  * dp_tx_mon_buf_desc_pool_init() - init tx monitor descriptor pool
48*5113495bSYour Name  * @soc: dp soc handle
49*5113495bSYour Name  *
50*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: Success
51*5113495bSYour Name  *         QDF_STATUS_E_FAILURE: Error
52*5113495bSYour Name  */
53*5113495bSYour Name QDF_STATUS
54*5113495bSYour Name dp_tx_mon_buf_desc_pool_init(struct dp_soc *soc);
55*5113495bSYour Name 
56*5113495bSYour Name /**
57*5113495bSYour Name  * dp_tx_mon_buf_desc_pool_free() - free tx monitor descriptor pool
58*5113495bSYour Name  * @soc: dp soc handle
59*5113495bSYour Name  *
60*5113495bSYour Name  */
61*5113495bSYour Name void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc);
62*5113495bSYour Name 
63*5113495bSYour Name /**
64*5113495bSYour Name  * dp_tx_mon_update_end_reason() - API to update end reason
65*5113495bSYour Name  *
66*5113495bSYour Name  * @mon_pdev: DP_MON_PDEV handle
67*5113495bSYour Name  * @ppdu_id: ppdu_id
68*5113495bSYour Name  * @end_reason: monitor destination descriptor end reason
69*5113495bSYour Name  *
70*5113495bSYour Name  * Return: void
71*5113495bSYour Name  */
72*5113495bSYour Name void dp_tx_mon_update_end_reason(struct dp_mon_pdev *mon_pdev,
73*5113495bSYour Name 				 int ppdu_id, int end_reason);
74*5113495bSYour Name 
75*5113495bSYour Name /**
76*5113495bSYour Name  * dp_tx_mon_status_free_packet_buf() - API to free packet buffer
77*5113495bSYour Name  * @pdev: pdev Handle
78*5113495bSYour Name  * @status_frag: status frag
79*5113495bSYour Name  * @end_offset: status fragment end offset
80*5113495bSYour Name  * @mon_desc_list_ref: tx monitor descriptor list reference
81*5113495bSYour Name  *
82*5113495bSYour Name  * Return: void
83*5113495bSYour Name  */
84*5113495bSYour Name void
85*5113495bSYour Name dp_tx_mon_status_free_packet_buf(struct dp_pdev *pdev,
86*5113495bSYour Name 				 qdf_frag_t status_frag,
87*5113495bSYour Name 				 uint32_t end_offset,
88*5113495bSYour Name 				 struct dp_tx_mon_desc_list *mon_desc_list_ref);
89*5113495bSYour Name 
90*5113495bSYour Name #if defined(WLAN_TX_PKT_CAPTURE_ENH_BE) && defined(WLAN_PKT_CAPTURE_TX_2_0) && \
91*5113495bSYour Name 	defined(BE_PKTLOG_SUPPORT)
92*5113495bSYour Name /**
93*5113495bSYour Name  * dp_tx_process_pktlog_be() - process pktlog
94*5113495bSYour Name  * @soc: dp soc handle
95*5113495bSYour Name  * @pdev: dp pdev handle
96*5113495bSYour Name  * @status_frag: frag pointer which needs to be added to nbuf
97*5113495bSYour Name  * @end_offset: Offset in frag to be added to nbuf_frags
98*5113495bSYour Name  *
99*5113495bSYour Name  * Return:
100*5113495bSYour Name  * * 0             - OK to runtime suspend the device
101*5113495bSYour Name  * * -EINVAL - invalid argument
102*5113495bSYour Name  * * -ENOMEM - out of memory
103*5113495bSYour Name  */
104*5113495bSYour Name QDF_STATUS
105*5113495bSYour Name dp_tx_process_pktlog_be(struct dp_soc *soc, struct dp_pdev *pdev,
106*5113495bSYour Name 			void *status_frag, uint32_t end_offset);
107*5113495bSYour Name #else
108*5113495bSYour Name static inline QDF_STATUS
dp_tx_process_pktlog_be(struct dp_soc * soc,struct dp_pdev * pdev,void * status_frag,uint32_t end_offset)109*5113495bSYour Name dp_tx_process_pktlog_be(struct dp_soc *soc, struct dp_pdev *pdev,
110*5113495bSYour Name 			void *status_frag, uint32_t end_offset)
111*5113495bSYour Name {
112*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
113*5113495bSYour Name }
114*5113495bSYour Name #endif
115*5113495bSYour Name 
116*5113495bSYour Name /**
117*5113495bSYour Name  * dp_tx_mon_process_status_tlv() - API to processed TLV
118*5113495bSYour Name  * invoked from interrupt handler
119*5113495bSYour Name  *
120*5113495bSYour Name  * @soc: DP_SOC handle
121*5113495bSYour Name  * @pdev: DP_PDEV handle
122*5113495bSYour Name  * @mon_ring_desc: descriptor status info
123*5113495bSYour Name  * @status_frag: status buffer frag address
124*5113495bSYour Name  * @end_offset: end offset of buffer that has valid buffer
125*5113495bSYour Name  * @mon_desc_list_ref: tx monitor descriptor list reference
126*5113495bSYour Name  *
127*5113495bSYour Name  * Return: QDF_STATUS
128*5113495bSYour Name  */
129*5113495bSYour Name QDF_STATUS
130*5113495bSYour Name dp_tx_mon_process_status_tlv(struct dp_soc *soc,
131*5113495bSYour Name 			     struct dp_pdev *pdev,
132*5113495bSYour Name 			     struct hal_mon_desc *mon_ring_desc,
133*5113495bSYour Name 			     qdf_frag_t status_frag,
134*5113495bSYour Name 			     uint32_t end_offset,
135*5113495bSYour Name 			     struct dp_tx_mon_desc_list *mon_desc_list_ref);
136*5113495bSYour Name 
137*5113495bSYour Name /**
138*5113495bSYour Name  * dp_tx_mon_process_2_0() - tx monitor interrupt process
139*5113495bSYour Name  * @soc: dp soc handle
140*5113495bSYour Name  * @int_ctx: interrupt context
141*5113495bSYour Name  * @mac_id: mac id
142*5113495bSYour Name  * @quota: quota to process
143*5113495bSYour Name  *
144*5113495bSYour Name  */
145*5113495bSYour Name uint32_t
146*5113495bSYour Name dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
147*5113495bSYour Name 		      uint32_t mac_id, uint32_t quota);
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * dp_tx_mon_print_ring_stat_2_0() - Print monitor ring stats
151*5113495bSYour Name  * @pdev: dp pdev handle
152*5113495bSYour Name  *
153*5113495bSYour Name  */
154*5113495bSYour Name void
155*5113495bSYour Name dp_tx_mon_print_ring_stat_2_0(struct dp_pdev *pdev);
156*5113495bSYour Name 
157*5113495bSYour Name /* The maximum buffer length allocated for radiotap for monitor status buffer */
158*5113495bSYour Name #define MAX_MONITOR_HEADER (512)
159*5113495bSYour Name #define MAX_DUMMY_FRM_BODY (128)
160*5113495bSYour Name 
161*5113495bSYour Name #define MAX_STATUS_BUFFER_IN_PPDU (128)
162*5113495bSYour Name #define TXMON_NO_BUFFER_SZ (64)
163*5113495bSYour Name 
164*5113495bSYour Name #define DP_BA_ACK_FRAME_SIZE (sizeof(struct ieee80211_ctlframe_addr2) + 36)
165*5113495bSYour Name #define DP_ACK_FRAME_SIZE (sizeof(struct ieee80211_frame_min_one))
166*5113495bSYour Name #define DP_CTS_FRAME_SIZE (sizeof(struct ieee80211_frame_min_one))
167*5113495bSYour Name #define DP_ACKNOACK_FRAME_SIZE (sizeof(struct ieee80211_frame) + 16)
168*5113495bSYour Name 
169*5113495bSYour Name #define DP_IEEE80211_BAR_CTL_TID_S 12
170*5113495bSYour Name #define DP_IEEE80211_BAR_CTL_TID_M 0xf
171*5113495bSYour Name #define DP_IEEE80211_BAR_CTL_POLICY_S 0
172*5113495bSYour Name #define DP_IEEE80211_BAR_CTL_POLICY_M 0x1
173*5113495bSYour Name #define DP_IEEE80211_BA_S_SEQ_S 4
174*5113495bSYour Name #define DP_IEEE80211_BAR_CTL_COMBA 0x0004
175*5113495bSYour Name 
176*5113495bSYour Name #define TXMON_PPDU(ppdu_info, field)	ppdu_info->field
177*5113495bSYour Name #define TXMON_PPDU_USR(ppdu_info, user_index, field)	\
178*5113495bSYour Name 			ppdu_info->hal_txmon.rx_user_status[user_index].field
179*5113495bSYour Name #define TXMON_PPDU_COM(ppdu_info, field) ppdu_info->hal_txmon.rx_status.field
180*5113495bSYour Name #define TXMON_PPDU_HAL(ppdu_info, field) ppdu_info->hal_txmon.field
181*5113495bSYour Name 
182*5113495bSYour Name #define HE_DATA_CNT	6
183*5113495bSYour Name 
184*5113495bSYour Name #define INITIATOR_WINDOW 0
185*5113495bSYour Name #define RESPONSE_WINDOW 1
186*5113495bSYour Name 
187*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
188*5113495bSYour Name /**
189*5113495bSYour Name  * enum bf_type -  tx monitor supported Beamformed type
190*5113495bSYour Name  * @NO_BF:
191*5113495bSYour Name  * @LEGACY_BF:
192*5113495bSYour Name  * @SU_BF:
193*5113495bSYour Name  * @MU_BF:
194*5113495bSYour Name  */
195*5113495bSYour Name enum bf_type {
196*5113495bSYour Name 	NO_BF = 0,
197*5113495bSYour Name 	LEGACY_BF,
198*5113495bSYour Name 	SU_BF,
199*5113495bSYour Name 	MU_BF
200*5113495bSYour Name };
201*5113495bSYour Name 
202*5113495bSYour Name /**
203*5113495bSYour Name  * enum dot11b_preamble_type - tx monitor supported 11b preamble type
204*5113495bSYour Name  * @SHORT_PREAMBLE:
205*5113495bSYour Name  * @LONG_PREAMBLE:
206*5113495bSYour Name  */
207*5113495bSYour Name enum dot11b_preamble_type {
208*5113495bSYour Name 	SHORT_PREAMBLE = 0,
209*5113495bSYour Name 	LONG_PREAMBLE,
210*5113495bSYour Name };
211*5113495bSYour Name 
212*5113495bSYour Name /**
213*5113495bSYour Name  * enum bw_type - tx monitor supported bandwidth type
214*5113495bSYour Name  * @TXMON_BW_20_MHZ:
215*5113495bSYour Name  * @TXMON_BW_40_MHZ:
216*5113495bSYour Name  * @TXMON_BW_80_MHZ:
217*5113495bSYour Name  * @TXMON_BW_160_MHZ:
218*5113495bSYour Name  * @TXMON_BW_240_MHZ:
219*5113495bSYour Name  * @TXMON_BW_320_MHZ:
220*5113495bSYour Name  */
221*5113495bSYour Name enum bw_type {
222*5113495bSYour Name 	TXMON_BW_20_MHZ = 0,
223*5113495bSYour Name 	TXMON_BW_40_MHZ,
224*5113495bSYour Name 	TXMON_BW_80_MHZ,
225*5113495bSYour Name 	TXMON_BW_160_MHZ,
226*5113495bSYour Name 	TXMON_BW_240_MHZ,
227*5113495bSYour Name 	TXMON_BW_320_MHZ
228*5113495bSYour Name };
229*5113495bSYour Name 
230*5113495bSYour Name /**
231*5113495bSYour Name  * enum ppdu_start_reason - tx monitor supported PPDU start reason type
232*5113495bSYour Name  * @TXMON_FES_PROTECTION_FRAME:
233*5113495bSYour Name  * @TXMON_FES_AFTER_PROTECTION:
234*5113495bSYour Name  * @TXMON_FES_ONLY:
235*5113495bSYour Name  * @TXMON_RESPONSE_FRAME:
236*5113495bSYour Name  * @TXMON_TRIG_RESPONSE_FRAME:
237*5113495bSYour Name  * @TXMON_DYNAMIC_PROTECTION_FES_ONLY:
238*5113495bSYour Name  */
239*5113495bSYour Name enum ppdu_start_reason {
240*5113495bSYour Name 	TXMON_FES_PROTECTION_FRAME,
241*5113495bSYour Name 	TXMON_FES_AFTER_PROTECTION,
242*5113495bSYour Name 	TXMON_FES_ONLY,
243*5113495bSYour Name 	TXMON_RESPONSE_FRAME,
244*5113495bSYour Name 	TXMON_TRIG_RESPONSE_FRAME,
245*5113495bSYour Name 	TXMON_DYNAMIC_PROTECTION_FES_ONLY
246*5113495bSYour Name };
247*5113495bSYour Name 
248*5113495bSYour Name /**
249*5113495bSYour Name  * enum guard_interval - tx monitor supported Guard interval type
250*5113495bSYour Name  * @TXMON_GI_0_8_US:
251*5113495bSYour Name  * @TXMON_GI_0_4_US:
252*5113495bSYour Name  * @TXMON_GI_1_6_US:
253*5113495bSYour Name  * @TXMON_GI_3_2_US:
254*5113495bSYour Name  */
255*5113495bSYour Name enum guard_interval {
256*5113495bSYour Name 	TXMON_GI_0_8_US = 0,
257*5113495bSYour Name 	TXMON_GI_0_4_US,
258*5113495bSYour Name 	TXMON_GI_1_6_US,
259*5113495bSYour Name 	TXMON_GI_3_2_US
260*5113495bSYour Name };
261*5113495bSYour Name 
262*5113495bSYour Name /**
263*5113495bSYour Name  * enum RU_size_start - tx monitor supported RU size start type
264*5113495bSYour Name  * @TXMON_RU_26:
265*5113495bSYour Name  * @TXMON_RU_52:
266*5113495bSYour Name  * @TXMON_RU_106:
267*5113495bSYour Name  * @TXMON_RU_242:
268*5113495bSYour Name  * @TXMON_RU_484:
269*5113495bSYour Name  * @TXMON_RU_996:
270*5113495bSYour Name  * @TXMON_RU_1992:
271*5113495bSYour Name  * @TXMON_RU_FULLBW_240:
272*5113495bSYour Name  * @TXMON_RU_FULLBW_320:
273*5113495bSYour Name  * @TXMON_RU_MULTI_LARGE:
274*5113495bSYour Name  * @TXMON_RU_78:
275*5113495bSYour Name  * @TXMON_RU_132:
276*5113495bSYour Name  */
277*5113495bSYour Name enum RU_size_start {
278*5113495bSYour Name 	TXMON_RU_26 = 0,
279*5113495bSYour Name 	TXMON_RU_52,
280*5113495bSYour Name 	TXMON_RU_106,
281*5113495bSYour Name 	TXMON_RU_242,
282*5113495bSYour Name 	TXMON_RU_484,
283*5113495bSYour Name 	TXMON_RU_996,
284*5113495bSYour Name 	TXMON_RU_1992,
285*5113495bSYour Name 	TXMON_RU_FULLBW_240,
286*5113495bSYour Name 	TXMON_RU_FULLBW_320,
287*5113495bSYour Name 	TXMON_RU_MULTI_LARGE,
288*5113495bSYour Name 	TXMON_RU_78,
289*5113495bSYour Name 	TXMON_RU_132
290*5113495bSYour Name };
291*5113495bSYour Name 
292*5113495bSYour Name /**
293*5113495bSYour Name  * enum response_type_expected - expected response type
294*5113495bSYour Name  * @TXMON_RESP_NO_RESP:
295*5113495bSYour Name  * @TXMON_RESP_ACK:
296*5113495bSYour Name  * @TXMON_RESP_BA_64_BITMAP:
297*5113495bSYour Name  * @TXMON_RESP_BA_256:
298*5113495bSYour Name  * @TXMON_RESP_ACTIONNOACK:
299*5113495bSYour Name  * @TXMON_RESP_ACK_BA:
300*5113495bSYour Name  * @TXMON_RESP_CTS:
301*5113495bSYour Name  * @TXMON_RESP_ACK_DATA:
302*5113495bSYour Name  * @TXMON_RESP_NDP_ACK:
303*5113495bSYour Name  * @TXMON_RESP_NDP_MODIFIED_ACK:
304*5113495bSYour Name  * @TXMON_RESP_NDP_BA:
305*5113495bSYour Name  * @TXMON_RESP_NDP_CTS:
306*5113495bSYour Name  * @TXMON_RESP_NDP_ACK_OR_NDP_MODIFIED_ACK:
307*5113495bSYour Name  * @TXMON_RESP_UL_MU_BA:
308*5113495bSYour Name  * @TXMON_RESP_UL_MU_BA_AND_DATA:
309*5113495bSYour Name  * @TXMON_RESP_UL_MU_CBF:
310*5113495bSYour Name  * @TXMON_RESP_UL_MU_FRAMES:
311*5113495bSYour Name  * @TXMON_RESP_ANY_RESP_TO_DEVICE:
312*5113495bSYour Name  * @TXMON_RESP_ANY_RESP_ACCEPTED:
313*5113495bSYour Name  * @TXMON_RESP_FRAMELESS_PHYRX_RESP_ACCEPTED:
314*5113495bSYour Name  * @TXMON_RESP_RANGING_NDP_AND_LMR:
315*5113495bSYour Name  * @TXMON_RESP_BA_512:
316*5113495bSYour Name  * @TXMON_RESP_BA_1024:
317*5113495bSYour Name  * @TXMON_RESP_UL_MU_RANGING_CTS2S:
318*5113495bSYour Name  * @TXMON_RESP_UL_MU_RANGING_NDP:
319*5113495bSYour Name  * @TXMON_RESP_UL_MU_RANGING_LMR:
320*5113495bSYour Name  */
321*5113495bSYour Name enum response_type_expected {
322*5113495bSYour Name 	TXMON_RESP_NO_RESP = 0,
323*5113495bSYour Name 	TXMON_RESP_ACK,
324*5113495bSYour Name 	TXMON_RESP_BA_64_BITMAP,
325*5113495bSYour Name 	TXMON_RESP_BA_256,
326*5113495bSYour Name 	TXMON_RESP_ACTIONNOACK,
327*5113495bSYour Name 	TXMON_RESP_ACK_BA,
328*5113495bSYour Name 	TXMON_RESP_CTS,
329*5113495bSYour Name 	TXMON_RESP_ACK_DATA,
330*5113495bSYour Name 	TXMON_RESP_NDP_ACK,
331*5113495bSYour Name 	TXMON_RESP_NDP_MODIFIED_ACK,
332*5113495bSYour Name 	TXMON_RESP_NDP_BA,
333*5113495bSYour Name 	TXMON_RESP_NDP_CTS,
334*5113495bSYour Name 	TXMON_RESP_NDP_ACK_OR_NDP_MODIFIED_ACK,
335*5113495bSYour Name 	TXMON_RESP_UL_MU_BA,
336*5113495bSYour Name 	TXMON_RESP_UL_MU_BA_AND_DATA,
337*5113495bSYour Name 	TXMON_RESP_UL_MU_CBF,
338*5113495bSYour Name 	TXMON_RESP_UL_MU_FRAMES,
339*5113495bSYour Name 	TXMON_RESP_ANY_RESP_TO_DEVICE,
340*5113495bSYour Name 	TXMON_RESP_ANY_RESP_ACCEPTED,
341*5113495bSYour Name 	TXMON_RESP_FRAMELESS_PHYRX_RESP_ACCEPTED,
342*5113495bSYour Name 	TXMON_RESP_RANGING_NDP_AND_LMR,
343*5113495bSYour Name 	TXMON_RESP_BA_512,
344*5113495bSYour Name 	TXMON_RESP_BA_1024,
345*5113495bSYour Name 	TXMON_RESP_UL_MU_RANGING_CTS2S,
346*5113495bSYour Name 	TXMON_RESP_UL_MU_RANGING_NDP,
347*5113495bSYour Name 	TXMON_RESP_UL_MU_RANGING_LMR
348*5113495bSYour Name };
349*5113495bSYour Name 
350*5113495bSYour Name /**
351*5113495bSYour Name  * enum resposne_to_respone - tx monitor supported response to response type
352*5113495bSYour Name  * @TXMON_RESP_TO_RESP_NONE:
353*5113495bSYour Name  * @TXMON_RESP_TO_RESP_SU_BA:
354*5113495bSYour Name  * @TXMON_RESP_TO_RESP_MU_BA:
355*5113495bSYour Name  * @TXMON_RESP_TO_RESP_CMD:
356*5113495bSYour Name  */
357*5113495bSYour Name enum resposne_to_respone {
358*5113495bSYour Name 	TXMON_RESP_TO_RESP_NONE = 0,
359*5113495bSYour Name 	TXMON_RESP_TO_RESP_SU_BA,
360*5113495bSYour Name 	TXMON_RESP_TO_RESP_MU_BA,
361*5113495bSYour Name 	TXMON_RESP_TO_RESP_CMD
362*5113495bSYour Name };
363*5113495bSYour Name 
364*5113495bSYour Name /**
365*5113495bSYour Name  * enum medium_protection_type - tx monitor supported protection type
366*5113495bSYour Name  * @TXMON_MEDIUM_NO_PROTECTION:
367*5113495bSYour Name  * @TXMON_MEDIUM_RTS_LEGACY:
368*5113495bSYour Name  * @TXMON_MEDIUM_RTS_11AC_STATIC_BW:
369*5113495bSYour Name  * @TXMON_MEDIUM_RTS_11AC_DYNAMIC_BW:
370*5113495bSYour Name  * @TXMON_MEDIUM_CTS2SELF:
371*5113495bSYour Name  * @TXMON_MEDIUM_QOS_NULL_NO_ACK_3ADDR:
372*5113495bSYour Name  * @TXMON_MEDIUM_QOS_NULL_NO_ACK_4ADDR:
373*5113495bSYour Name  */
374*5113495bSYour Name enum medium_protection_type {
375*5113495bSYour Name 	TXMON_MEDIUM_NO_PROTECTION,
376*5113495bSYour Name 	TXMON_MEDIUM_RTS_LEGACY,
377*5113495bSYour Name 	TXMON_MEDIUM_RTS_11AC_STATIC_BW,
378*5113495bSYour Name 	TXMON_MEDIUM_RTS_11AC_DYNAMIC_BW,
379*5113495bSYour Name 	TXMON_MEDIUM_CTS2SELF,
380*5113495bSYour Name 	TXMON_MEDIUM_QOS_NULL_NO_ACK_3ADDR,
381*5113495bSYour Name 	TXMON_MEDIUM_QOS_NULL_NO_ACK_4ADDR,
382*5113495bSYour Name };
383*5113495bSYour Name 
384*5113495bSYour Name /**
385*5113495bSYour Name  * enum ndp_frame - tx monitor supported ndp frame type
386*5113495bSYour Name  * @TXMON_NO_NDP_TRANSMISSION:
387*5113495bSYour Name  * @TXMON_BEAMFORMING_NDP:
388*5113495bSYour Name  * @TXMON_HE_RANGING_NDP:
389*5113495bSYour Name  * @TXMON_HE_FEEDBACK_NDP:
390*5113495bSYour Name  */
391*5113495bSYour Name enum ndp_frame {
392*5113495bSYour Name 	TXMON_NO_NDP_TRANSMISSION,
393*5113495bSYour Name 	TXMON_BEAMFORMING_NDP,
394*5113495bSYour Name 	TXMON_HE_RANGING_NDP,
395*5113495bSYour Name 	TXMON_HE_FEEDBACK_NDP,
396*5113495bSYour Name };
397*5113495bSYour Name 
398*5113495bSYour Name /**
399*5113495bSYour Name  * enum tx_ppdu_info_type - tx monitor supported ppdu type
400*5113495bSYour Name  * @TX_PROT_PPDU_INFO:
401*5113495bSYour Name  * @TX_DATA_PPDU_INFO:
402*5113495bSYour Name  */
403*5113495bSYour Name enum tx_ppdu_info_type {
404*5113495bSYour Name 	TX_PROT_PPDU_INFO,
405*5113495bSYour Name 	TX_DATA_PPDU_INFO,
406*5113495bSYour Name };
407*5113495bSYour Name 
408*5113495bSYour Name /**
409*5113495bSYour Name  * struct dp_tx_ppdu_info - structure to store tx ppdu info
410*5113495bSYour Name  * @ppdu_id: current ppdu info ppdu id
411*5113495bSYour Name  * @frame_type: ppdu info frame type
412*5113495bSYour Name  * @cur_usr_idx: current user index of ppdu info
413*5113495bSYour Name  * @ulist: union of linked lists
414*5113495bSYour Name  * @tx_ppdu_info_dlist_elem: support adding to double linked list
415*5113495bSYour Name  * @tx_ppdu_info_slist_elem: support adding to single linked list
416*5113495bSYour Name  * @hal_txmon: hal tx monitor info for that ppdu
417*5113495bSYour Name  */
418*5113495bSYour Name struct dp_tx_ppdu_info {
419*5113495bSYour Name 	uint32_t ppdu_id;
420*5113495bSYour Name 	uint8_t frame_type;
421*5113495bSYour Name 	uint8_t cur_usr_idx;
422*5113495bSYour Name 
423*5113495bSYour Name 	union {
424*5113495bSYour Name 		TAILQ_ENTRY(dp_tx_ppdu_info) tx_ppdu_info_dlist_elem;
425*5113495bSYour Name 		STAILQ_ENTRY(dp_tx_ppdu_info) tx_ppdu_info_slist_elem;
426*5113495bSYour Name 	} ulist;
427*5113495bSYour Name 
428*5113495bSYour Name 	#define tx_ppdu_info_list_elem ulist.tx_ppdu_info_dlist_elem
429*5113495bSYour Name 	#define tx_ppdu_info_queue_elem ulist.tx_ppdu_info_slist_elem
430*5113495bSYour Name 
431*5113495bSYour Name 	struct hal_tx_ppdu_info hal_txmon;
432*5113495bSYour Name };
433*5113495bSYour Name 
434*5113495bSYour Name /**
435*5113495bSYour Name  * struct dp_tx_monitor_drop_stats - structure to store tx monitor drop
436*5113495bSYour Name  *                                   statistics
437*5113495bSYour Name  * @ppdu_drop_cnt: ppdu drop counter
438*5113495bSYour Name  * @mpdu_drop_cnt: mpdu drop counter
439*5113495bSYour Name  * @tlv_drop_cnt: tlv drop counter
440*5113495bSYour Name  * @pkt_buf_recv: tx monitor packet buffer received
441*5113495bSYour Name  * @pkt_buf_free: tx monitor packet buffer free
442*5113495bSYour Name  * @pkt_buf_processed: tx monitor packet buffer processed
443*5113495bSYour Name  * @pkt_buf_to_stack: tx monitor packet buffer send to stack
444*5113495bSYour Name  * @status_buf_recv: tx monitor status buffer received
445*5113495bSYour Name  * @status_buf_free: tx monitor status buffer free
446*5113495bSYour Name  * @totat_tx_mon_replenish_cnt: tx monitor replenish count
447*5113495bSYour Name  * @total_tx_mon_reap_cnt: tx monitor reap count
448*5113495bSYour Name  * @tx_mon_stuck: tx monitor stuck count
449*5113495bSYour Name  * @total_tx_mon_stuck: tx monitor stuck count
450*5113495bSYour Name  * @ppdu_info_drop_th: count ppdu info been dropped due threshold reached
451*5113495bSYour Name  * @ppdu_info_drop_flush: count ppdu info been dropped due to flush detected
452*5113495bSYour Name  * @ppdu_info_drop_trunc: count ppdu info been dropped due to truncated
453*5113495bSYour Name  */
454*5113495bSYour Name struct dp_tx_monitor_drop_stats {
455*5113495bSYour Name 	uint64_t ppdu_drop_cnt;
456*5113495bSYour Name 	uint64_t mpdu_drop_cnt;
457*5113495bSYour Name 	uint64_t tlv_drop_cnt;
458*5113495bSYour Name 
459*5113495bSYour Name 	uint64_t pkt_buf_recv;
460*5113495bSYour Name 	uint64_t pkt_buf_free;
461*5113495bSYour Name 	uint64_t pkt_buf_processed;
462*5113495bSYour Name 	uint64_t pkt_buf_to_stack;
463*5113495bSYour Name 
464*5113495bSYour Name 	uint64_t status_buf_recv;
465*5113495bSYour Name 	uint64_t status_buf_free;
466*5113495bSYour Name 
467*5113495bSYour Name 	uint64_t totat_tx_mon_replenish_cnt;
468*5113495bSYour Name 	uint64_t total_tx_mon_reap_cnt;
469*5113495bSYour Name 	uint8_t tx_mon_stuck;
470*5113495bSYour Name 	uint32_t total_tx_mon_stuck;
471*5113495bSYour Name 
472*5113495bSYour Name 	uint64_t ppdu_info_drop_th;
473*5113495bSYour Name 	uint64_t ppdu_info_drop_flush;
474*5113495bSYour Name 	uint64_t ppdu_info_drop_trunc;
475*5113495bSYour Name };
476*5113495bSYour Name 
477*5113495bSYour Name /**
478*5113495bSYour Name  * enum dp_tx_monitor_mode - tx monitor supported mode
479*5113495bSYour Name  * @TX_MON_BE_DISABLE: tx monitor disable
480*5113495bSYour Name  * @TX_MON_BE_FULL_CAPTURE: tx monitor mode to capture full packet
481*5113495bSYour Name  * @TX_MON_BE_PEER_FILTER: tx monitor mode to capture peer filter
482*5113495bSYour Name  */
483*5113495bSYour Name enum dp_tx_monitor_mode {
484*5113495bSYour Name 	TX_MON_BE_DISABLE,
485*5113495bSYour Name 	TX_MON_BE_FULL_CAPTURE,
486*5113495bSYour Name 	TX_MON_BE_PEER_FILTER,
487*5113495bSYour Name };
488*5113495bSYour Name 
489*5113495bSYour Name /**
490*5113495bSYour Name  * enum dp_tx_monitor_framework_mode - tx monitor framework mode
491*5113495bSYour Name  * @TX_MON_BE_FRM_WRK_DISABLE: tx monitor frame work disable
492*5113495bSYour Name  * @TX_MON_BE_FRM_WRK_FULL_CAPTURE: tx monitor frame work full capture
493*5113495bSYour Name  * @TX_MON_BE_FRM_WRK_128B_CAPTURE: tx monitor frame work 128B capture
494*5113495bSYour Name  */
495*5113495bSYour Name enum dp_tx_monitor_framework_mode {
496*5113495bSYour Name 	TX_MON_BE_FRM_WRK_DISABLE,
497*5113495bSYour Name 	TX_MON_BE_FRM_WRK_FULL_CAPTURE,
498*5113495bSYour Name 	TX_MON_BE_FRM_WRK_128B_CAPTURE,
499*5113495bSYour Name };
500*5113495bSYour Name 
501*5113495bSYour Name #define TX_TAILQ_INSERT_TAIL(pdev, tx_ppdu_info)			\
502*5113495bSYour Name 	do {								\
503*5113495bSYour Name 		STAILQ_INSERT_TAIL(&pdev->tx_ppdu_info_list,		\
504*5113495bSYour Name 				   tx_ppdu_info, tx_ppdu_info_list_elem);\
505*5113495bSYour Name 		pdev->tx_ppdu_info_queue_depth++;			\
506*5113495bSYour Name 	} while (0)
507*5113495bSYour Name 
508*5113495bSYour Name #define TX_TAILQ_REMOVE(pdev, tx_ppdu_info)				\
509*5113495bSYour Name 	do {								\
510*5113495bSYour Name 		TAILQ_REMOVE(&pdev->tx_ppdu_info_list, tx_ppdu_info,	\
511*5113495bSYour Name 			     tx_ppdu_info_list_elem);			\
512*5113495bSYour Name 		pdev->tx_ppdu_info_queue_depth--;			\
513*5113495bSYour Name 	} while (0)
514*5113495bSYour Name 
515*5113495bSYour Name #define TX_TAILQ_FIRST(pdev) TAILQ_FIRST(&pdev->tx_ppdu_info_list)
516*5113495bSYour Name 
517*5113495bSYour Name #define TX_TAILQ_FOREACH_SAFE(pdev, tx_ppdu_info)			\
518*5113495bSYour Name 	do {								\
519*5113495bSYour Name 		struct dp_tx_ppdu_info *tx_ppdu_info_next = NULL;	\
520*5113495bSYour Name 		TAILQ_FOREACH_SAFE(tx_ppdu_info,			\
521*5113495bSYour Name 				   &pdev->tx_ppdu_info_list,		\
522*5113495bSYour Name 				   tx_ppdu_info_list_elem,		\
523*5113495bSYour Name 				   tx_ppdu_info_next);			\
524*5113495bSYour Name 	} while (0)
525*5113495bSYour Name 
526*5113495bSYour Name #ifdef WLAN_TX_MON_CORE_DEBUG
527*5113495bSYour Name /**
528*5113495bSYour Name  * struct dp_pdev_tx_monitor_be - info to store tx capture information in pdev
529*5113495bSYour Name  * @be_ppdu_id: current ppdu id
530*5113495bSYour Name  * @mode: tx monitor core framework current mode
531*5113495bSYour Name  * @stats: tx monitor drop stats for that mac
532*5113495bSYour Name  *
533*5113495bSYour Name  */
534*5113495bSYour Name struct dp_pdev_tx_monitor_be {
535*5113495bSYour Name 	uint32_t be_ppdu_id;
536*5113495bSYour Name 	uint32_t mode;
537*5113495bSYour Name 	struct dp_tx_monitor_drop_stats stats;
538*5113495bSYour Name };
539*5113495bSYour Name 
540*5113495bSYour Name /**
541*5113495bSYour Name  * struct dp_peer_tx_capture_be - Tx monitor peer structure
542*5113495bSYour Name  *
543*5113495bSYour Name  * This is a dummy structure
544*5113495bSYour Name  */
545*5113495bSYour Name struct dp_peer_tx_capture_be {
546*5113495bSYour Name };
547*5113495bSYour Name #endif
548*5113495bSYour Name 
549*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH_BE
550*5113495bSYour Name /**
551*5113495bSYour Name  * struct dp_txmon_frag_vec - a contiguous range of physical memory address
552*5113495bSYour Name  * @frag_buf: frag buffer address
553*5113495bSYour Name  * @end_offset: byte offset within the frag buffer where valid data resides
554*5113495bSYour Name  */
555*5113495bSYour Name struct dp_txmon_frag_vec {
556*5113495bSYour Name 	qdf_frag_t frag_buf;
557*5113495bSYour Name 	uint32_t end_offset;
558*5113495bSYour Name };
559*5113495bSYour Name 
560*5113495bSYour Name /*
561*5113495bSYour Name  * NB: intentionally not using kernel-doc comment because the kernel-doc
562*5113495bSYour Name  *     script does not handle the STAILQ_HEAD macro
563*5113495bSYour Name  * struct dp_pdev_tx_monitor_be - info to store tx capture information in pdev
564*5113495bSYour Name  * @be_ppdu_id: current ppdu id
565*5113495bSYour Name  * @be_end_reason_bitmap: current end reason bitmap
566*5113495bSYour Name  * @mode: tx monitor current mode
567*5113495bSYour Name  * @tx_mon_list_lock: spinlock protection to list
568*5113495bSYour Name  * @post_ppdu_workqueue: tx monitor workqueue representation
569*5113495bSYour Name  * @post_ppdu_work: tx monitor post ppdu work
570*5113495bSYour Name  * @tx_ppdu_info_list_depth: list depth counter
571*5113495bSYour Name  * @tx_ppdu_info_list: ppdu info list to hold ppdu
572*5113495bSYour Name  * @defer_ppdu_info_list_depth: defer ppdu list depth counter
573*5113495bSYour Name  * @defer_ppdu_info_list: defer ppdu info list to hold defer ppdu
574*5113495bSYour Name  * @stats: tx monitor drop stats for that mac
575*5113495bSYour Name  * @tx_prot_ppdu_info: tx monitor protection ppdu info
576*5113495bSYour Name  * @tx_data_ppdu_info: tx monitor data ppdu info
577*5113495bSYour Name  * @last_prot_ppdu_info: last tx monitor protection ppdu info
578*5113495bSYour Name  * @last_data_ppdu_info: last tx monitor data ppdu info
579*5113495bSYour Name  * @prot_status_info: protection status info
580*5113495bSYour Name  * @data_status_info: data status info
581*5113495bSYour Name  * @last_tsft: last received tsft
582*5113495bSYour Name  * @last_ppdu_timestamp: last received ppdu_timestamp
583*5113495bSYour Name  * @last_frag_q_idx: last index of frag buffer
584*5113495bSYour Name  * @cur_frag_q_idx: current index of frag buffer
585*5113495bSYour Name  * @status_frag_queue: array of status frag queue to hold 64 status buffer
586*5113495bSYour Name  */
587*5113495bSYour Name struct dp_pdev_tx_monitor_be {
588*5113495bSYour Name 	uint32_t be_ppdu_id;
589*5113495bSYour Name 	uint32_t be_end_reason_bitmap;
590*5113495bSYour Name 	uint32_t mode;
591*5113495bSYour Name 
592*5113495bSYour Name 	qdf_spinlock_t tx_mon_list_lock;
593*5113495bSYour Name 
594*5113495bSYour Name 	qdf_work_t post_ppdu_work;
595*5113495bSYour Name 	qdf_workqueue_t *post_ppdu_workqueue;
596*5113495bSYour Name 
597*5113495bSYour Name 	uint32_t tx_ppdu_info_list_depth;
598*5113495bSYour Name 
599*5113495bSYour Name 	STAILQ_HEAD(, dp_tx_ppdu_info) tx_ppdu_info_queue;
600*5113495bSYour Name 
601*5113495bSYour Name 	uint32_t defer_ppdu_info_list_depth;
602*5113495bSYour Name 
603*5113495bSYour Name 	STAILQ_HEAD(, dp_tx_ppdu_info) defer_tx_ppdu_info_queue;
604*5113495bSYour Name 
605*5113495bSYour Name 	struct dp_tx_monitor_drop_stats stats;
606*5113495bSYour Name 
607*5113495bSYour Name 	struct dp_tx_ppdu_info *tx_prot_ppdu_info;
608*5113495bSYour Name 	struct dp_tx_ppdu_info *tx_data_ppdu_info;
609*5113495bSYour Name 
610*5113495bSYour Name 	struct dp_tx_ppdu_info *last_prot_ppdu_info;
611*5113495bSYour Name 	struct dp_tx_ppdu_info *last_data_ppdu_info;
612*5113495bSYour Name 
613*5113495bSYour Name 	struct hal_tx_status_info prot_status_info;
614*5113495bSYour Name 	struct hal_tx_status_info data_status_info;
615*5113495bSYour Name 
616*5113495bSYour Name 	uint64_t last_tsft;
617*5113495bSYour Name 	uint32_t last_ppdu_timestamp;
618*5113495bSYour Name 
619*5113495bSYour Name 	uint8_t last_frag_q_idx;
620*5113495bSYour Name 	uint8_t cur_frag_q_idx;
621*5113495bSYour Name 	struct dp_txmon_frag_vec frag_q_vec[MAX_STATUS_BUFFER_IN_PPDU];
622*5113495bSYour Name };
623*5113495bSYour Name 
624*5113495bSYour Name /**
625*5113495bSYour Name  * struct dp_peer_tx_capture_be - Tx monitor peer structure
626*5113495bSYour Name  *
627*5113495bSYour Name  * need to be added here
628*5113495bSYour Name  */
629*5113495bSYour Name struct dp_peer_tx_capture_be {
630*5113495bSYour Name };
631*5113495bSYour Name 
632*5113495bSYour Name /**
633*5113495bSYour Name  * dp_tx_mon_free_usr_mpduq() - API to free user mpduq
634*5113495bSYour Name  * @tx_ppdu_info: pointer to tx_ppdu_info
635*5113495bSYour Name  * @usr_idx: user index
636*5113495bSYour Name  * @tx_mon_be: pointer to tx monitor be
637*5113495bSYour Name  *
638*5113495bSYour Name  * Return: void
639*5113495bSYour Name  */
640*5113495bSYour Name void dp_tx_mon_free_usr_mpduq(struct dp_tx_ppdu_info *tx_ppdu_info,
641*5113495bSYour Name 			      uint8_t usr_idx,
642*5113495bSYour Name 			      struct dp_pdev_tx_monitor_be *tx_mon_be);
643*5113495bSYour Name 
644*5113495bSYour Name #endif /* WLAN_TX_PKT_CAPTURE_ENH_BE */
645*5113495bSYour Name 
646*5113495bSYour Name /**
647*5113495bSYour Name  * dp_tx_mon_ppdu_info_free() - API to free dp_tx_ppdu_info
648*5113495bSYour Name  * @tx_ppdu_info: pointer to tx_ppdu_info
649*5113495bSYour Name  *
650*5113495bSYour Name  * Return: void
651*5113495bSYour Name  */
652*5113495bSYour Name void dp_tx_mon_ppdu_info_free(struct dp_tx_ppdu_info *tx_ppdu_info);
653*5113495bSYour Name 
654*5113495bSYour Name /**
655*5113495bSYour Name  * dp_tx_mon_free_ppdu_info() - API to free dp_tx_ppdu_info
656*5113495bSYour Name  * @tx_ppdu_info: pointer to tx_ppdu_info
657*5113495bSYour Name  * @tx_mon_be: pointer to tx monitor be
658*5113495bSYour Name  *
659*5113495bSYour Name  * Return: void
660*5113495bSYour Name  */
661*5113495bSYour Name void dp_tx_mon_free_ppdu_info(struct dp_tx_ppdu_info *tx_ppdu_info,
662*5113495bSYour Name 			      struct dp_pdev_tx_monitor_be *tx_mon_be);
663*5113495bSYour Name 
664*5113495bSYour Name /**
665*5113495bSYour Name  * dp_tx_mon_get_ppdu_info() - API to allocate dp_tx_ppdu_info
666*5113495bSYour Name  * @pdev: pdev handle
667*5113495bSYour Name  * @type: type of ppdu_info data or protection
668*5113495bSYour Name  * @num_user: number user in a ppdu_info
669*5113495bSYour Name  * @ppdu_id: ppdu_id number
670*5113495bSYour Name  *
671*5113495bSYour Name  * Return: pointer to dp_tx_ppdu_info
672*5113495bSYour Name  */
673*5113495bSYour Name struct dp_tx_ppdu_info *dp_tx_mon_get_ppdu_info(struct dp_pdev *pdev,
674*5113495bSYour Name 						enum tx_ppdu_info_type type,
675*5113495bSYour Name 						uint8_t num_user,
676*5113495bSYour Name 						uint32_t ppdu_id);
677*5113495bSYour Name 
678*5113495bSYour Name #endif /* WLAN_PKT_CAPTURE_TX_2_0 */
679*5113495bSYour Name 
680*5113495bSYour Name #if (defined(WIFI_MONITOR_SUPPORT) && defined(WLAN_TX_PKT_CAPTURE_ENH_BE))
681*5113495bSYour Name /**
682*5113495bSYour Name  * dp_config_enh_tx_monitor_2_0()- API to validate tx monitor feature
683*5113495bSYour Name  * @pdev: DP_PDEV handle
684*5113495bSYour Name  * @val: user provided value
685*5113495bSYour Name  *
686*5113495bSYour Name  * Return: QDF_STATUS
687*5113495bSYour Name  */
688*5113495bSYour Name QDF_STATUS dp_config_enh_tx_monitor_2_0(struct dp_pdev *pdev, uint8_t val);
689*5113495bSYour Name #endif
690*5113495bSYour Name 
691*5113495bSYour Name #ifdef WLAN_TX_MON_CORE_DEBUG
692*5113495bSYour Name /**
693*5113495bSYour Name  * dp_config_enh_tx_core_monitor_2_0()- API to validate core framework
694*5113495bSYour Name  * @pdev: DP_PDEV handle
695*5113495bSYour Name  * @val: user provided value
696*5113495bSYour Name  *
697*5113495bSYour Name  * Return: QDF_STATUS
698*5113495bSYour Name  */
699*5113495bSYour Name QDF_STATUS dp_config_enh_tx_core_monitor_2_0(struct dp_pdev *pdev, uint8_t val);
700*5113495bSYour Name #endif
701*5113495bSYour Name 
702*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
703*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
704*5113495bSYour Name 					     struct dp_pdev *pdev,
705*5113495bSYour Name 					     int mac_id,
706*5113495bSYour Name 					     int mac_for_pdev);
707*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc,
708*5113495bSYour Name 					    int mac_id);
709*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_rings_alloc_2_0(struct dp_pdev *pdev, uint32_t lmac_id);
710*5113495bSYour Name void dp_tx_mon_pdev_rings_free_2_0(struct dp_pdev *pdev, uint32_t lmac_id);
711*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_rings_init_2_0(struct dp_pdev *pdev, uint32_t lmac_id);
712*5113495bSYour Name void dp_tx_mon_pdev_rings_deinit_2_0(struct dp_pdev *pdev, uint32_t lmac_id);
713*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_init_2_0(struct dp_soc *soc);
714*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_attach_2_0(struct dp_soc *soc, uint32_t lmac_id);
715*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_detach_2_0(struct dp_soc *soc, uint32_t lmac_id);
716*5113495bSYour Name void dp_tx_mon_soc_deinit_2_0(struct dp_soc *soc, uint32_t lmac_id);
717*5113495bSYour Name void dp_print_pdev_tx_monitor_stats_2_0(struct dp_pdev *pdev);
718*5113495bSYour Name QDF_STATUS
719*5113495bSYour Name dp_tx_mon_buffers_alloc(struct dp_soc *soc, uint32_t size);
720*5113495bSYour Name void
721*5113495bSYour Name dp_tx_mon_buffers_free(struct dp_soc *soc);
722*5113495bSYour Name QDF_STATUS
723*5113495bSYour Name dp_tx_mon_buf_desc_pool_alloc(struct dp_soc *soc);
724*5113495bSYour Name void dp_tx_ppdu_stats_attach_2_0(struct dp_pdev *pdev);
725*5113495bSYour Name QDF_STATUS dp_config_enh_tx_monitor_2_0(struct dp_pdev *pdev, uint8_t val);
726*5113495bSYour Name QDF_STATUS dp_peer_set_tx_capture_enabled_2_0(struct dp_pdev *pdev_handle,
727*5113495bSYour Name 					      struct dp_peer *peer_handle,
728*5113495bSYour Name 					      uint8_t is_tx_pkt_cap_enable,
729*5113495bSYour Name 					      uint8_t *peer_mac);
730*5113495bSYour Name void dp_tx_ppdu_stats_detach_2_0(struct dp_pdev *pdev);
731*5113495bSYour Name #else
732*5113495bSYour Name static inline
dp_tx_mon_pdev_htt_srng_setup_2_0(struct dp_soc * soc,struct dp_pdev * pdev,int mac_id,int mac_for_pdev)733*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
734*5113495bSYour Name 					     struct dp_pdev *pdev,
735*5113495bSYour Name 					     int mac_id,
736*5113495bSYour Name 					     int mac_for_pdev)
737*5113495bSYour Name {
738*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
739*5113495bSYour Name }
740*5113495bSYour Name 
741*5113495bSYour Name static inline
dp_tx_mon_soc_htt_srng_setup_2_0(struct dp_soc * soc,int mac_id)742*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc,
743*5113495bSYour Name 					    int mac_id)
744*5113495bSYour Name {
745*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
746*5113495bSYour Name }
747*5113495bSYour Name 
748*5113495bSYour Name static inline
dp_tx_mon_pdev_rings_alloc_2_0(struct dp_pdev * pdev,uint32_t lmac_id)749*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_rings_alloc_2_0(struct dp_pdev *pdev, uint32_t lmac_id)
750*5113495bSYour Name {
751*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
752*5113495bSYour Name }
753*5113495bSYour Name 
754*5113495bSYour Name static inline
dp_tx_mon_pdev_rings_free_2_0(struct dp_pdev * pdev,uint32_t lmac_id)755*5113495bSYour Name void dp_tx_mon_pdev_rings_free_2_0(struct dp_pdev *pdev, uint32_t lmac_id)
756*5113495bSYour Name {
757*5113495bSYour Name }
758*5113495bSYour Name 
759*5113495bSYour Name static inline
dp_tx_mon_pdev_rings_init_2_0(struct dp_pdev * pdev,uint32_t lmac_id)760*5113495bSYour Name QDF_STATUS dp_tx_mon_pdev_rings_init_2_0(struct dp_pdev *pdev, uint32_t lmac_id)
761*5113495bSYour Name {
762*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
763*5113495bSYour Name }
764*5113495bSYour Name 
765*5113495bSYour Name static inline
dp_tx_mon_pdev_rings_deinit_2_0(struct dp_pdev * pdev,uint32_t lmac_id)766*5113495bSYour Name void dp_tx_mon_pdev_rings_deinit_2_0(struct dp_pdev *pdev, uint32_t lmac_id)
767*5113495bSYour Name {
768*5113495bSYour Name }
769*5113495bSYour Name 
770*5113495bSYour Name static inline
dp_tx_mon_soc_init_2_0(struct dp_soc * soc)771*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_init_2_0(struct dp_soc *soc)
772*5113495bSYour Name {
773*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
774*5113495bSYour Name }
775*5113495bSYour Name 
776*5113495bSYour Name static inline
dp_tx_mon_soc_attach_2_0(struct dp_soc * soc,uint32_t lmac_id)777*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_attach_2_0(struct dp_soc *soc, uint32_t lmac_id)
778*5113495bSYour Name {
779*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
780*5113495bSYour Name }
781*5113495bSYour Name 
782*5113495bSYour Name static inline
dp_tx_mon_soc_detach_2_0(struct dp_soc * soc,uint32_t lmac_id)783*5113495bSYour Name QDF_STATUS dp_tx_mon_soc_detach_2_0(struct dp_soc *soc, uint32_t lmac_id)
784*5113495bSYour Name {
785*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
786*5113495bSYour Name }
787*5113495bSYour Name 
788*5113495bSYour Name static inline
dp_tx_mon_soc_deinit_2_0(struct dp_soc * soc,uint32_t lmac_id)789*5113495bSYour Name void dp_tx_mon_soc_deinit_2_0(struct dp_soc *soc, uint32_t lmac_id)
790*5113495bSYour Name {
791*5113495bSYour Name }
792*5113495bSYour Name 
793*5113495bSYour Name static inline void
dp_print_pdev_tx_monitor_stats_2_0(struct dp_pdev * pdev)794*5113495bSYour Name dp_print_pdev_tx_monitor_stats_2_0(struct dp_pdev *pdev)
795*5113495bSYour Name {
796*5113495bSYour Name }
797*5113495bSYour Name 
798*5113495bSYour Name static inline QDF_STATUS
dp_tx_mon_buffers_alloc(struct dp_soc * soc,uint32_t size)799*5113495bSYour Name dp_tx_mon_buffers_alloc(struct dp_soc *soc, uint32_t size)
800*5113495bSYour Name {
801*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
802*5113495bSYour Name }
803*5113495bSYour Name 
804*5113495bSYour Name static inline void
dp_tx_mon_buffers_free(struct dp_soc * soc)805*5113495bSYour Name dp_tx_mon_buffers_free(struct dp_soc *soc)
806*5113495bSYour Name {
807*5113495bSYour Name }
808*5113495bSYour Name 
809*5113495bSYour Name static inline QDF_STATUS
dp_tx_mon_buf_desc_pool_alloc(struct dp_soc * soc)810*5113495bSYour Name dp_tx_mon_buf_desc_pool_alloc(struct dp_soc *soc)
811*5113495bSYour Name {
812*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
813*5113495bSYour Name }
814*5113495bSYour Name 
815*5113495bSYour Name static inline void
dp_tx_ppdu_stats_attach_2_0(struct dp_pdev * pdev)816*5113495bSYour Name dp_tx_ppdu_stats_attach_2_0(struct dp_pdev *pdev)
817*5113495bSYour Name {
818*5113495bSYour Name }
819*5113495bSYour Name 
820*5113495bSYour Name static inline QDF_STATUS
dp_config_enh_tx_monitor_2_0(struct dp_pdev * pdev,uint8_t val)821*5113495bSYour Name dp_config_enh_tx_monitor_2_0(struct dp_pdev *pdev, uint8_t val)
822*5113495bSYour Name {
823*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
824*5113495bSYour Name }
825*5113495bSYour Name 
826*5113495bSYour Name static inline QDF_STATUS
dp_peer_set_tx_capture_enabled_2_0(struct dp_pdev * pdev_handle,struct dp_peer * peer_handle,uint8_t is_tx_pkt_cap_enable,uint8_t * peer_mac)827*5113495bSYour Name dp_peer_set_tx_capture_enabled_2_0(struct dp_pdev *pdev_handle,
828*5113495bSYour Name 				   struct dp_peer *peer_handle,
829*5113495bSYour Name 				   uint8_t is_tx_pkt_cap_enable,
830*5113495bSYour Name 				   uint8_t *peer_mac)
831*5113495bSYour Name {
832*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
833*5113495bSYour Name }
834*5113495bSYour Name 
835*5113495bSYour Name static inline void
dp_tx_ppdu_stats_detach_2_0(struct dp_pdev * pdev)836*5113495bSYour Name dp_tx_ppdu_stats_detach_2_0(struct dp_pdev *pdev)
837*5113495bSYour Name {
838*5113495bSYour Name }
839*5113495bSYour Name #endif
840*5113495bSYour Name 
841*5113495bSYour Name #endif /* _DP_TX_MON_2_0_H_ */
842