xref: /linux/drivers/net/wireless/ath/ath11k/debugfs.h (revision 4f6b838c378a52ea3ae0b15f12ca8a20849072fa)
1da3a9d3cSKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2da3a9d3cSKalle Valo /*
3da3a9d3cSKalle Valo  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4da3a9d3cSKalle Valo  */
5da3a9d3cSKalle Valo 
6da3a9d3cSKalle Valo #ifndef _ATH11K_DEBUGFS_H_
7da3a9d3cSKalle Valo #define _ATH11K_DEBUGFS_H_
8da3a9d3cSKalle Valo 
9da3a9d3cSKalle Valo #include "hal_tx.h"
10da3a9d3cSKalle Valo 
11da3a9d3cSKalle Valo #define ATH11K_TX_POWER_MAX_VAL	70
12da3a9d3cSKalle Valo #define ATH11K_TX_POWER_MIN_VAL	0
13da3a9d3cSKalle Valo 
14da3a9d3cSKalle Valo /* htt_dbg_ext_stats_type */
15da3a9d3cSKalle Valo enum ath11k_dbg_htt_ext_stats_type {
16da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_RESET                      =  0,
17da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TX                    =  1,
18da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_RX                    =  2,
19da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_HWQ                =  3,
20da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_SCHED              =  4,
21da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_ERROR                 =  5,
22da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TQM                   =  6,
23da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TQM_CMDQ                   =  7,
24da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TX_DE_INFO                 =  8,
25da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE               =  9,
26da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_RX_RATE               =  10,
27da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PEER_INFO                  =  11,
28da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TX_SELFGEN_INFO            =  12,
29da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TX_MU_HWQ                  =  13,
30da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_RING_IF_INFO               =  14,
31da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_SRNG_INFO                  =  15,
32da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_SFM_INFO                   =  16,
33da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_MU                 =  17,
34da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_ACTIVE_PEERS_LIST          =  18,
35da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS             =  19,
36da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TWT_SESSIONS               =  20,
37da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_REO_RESOURCE_STATS         =  21,
38da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO           =  22,
39da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS	    =  23,
40da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_EXT_STATS_RING_BACKPRESSURE_STATS    =  24,
41da3a9d3cSKalle Valo 
42da3a9d3cSKalle Valo 	/* keep this last */
43da3a9d3cSKalle Valo 	ATH11K_DBG_HTT_NUM_EXT_STATS,
44da3a9d3cSKalle Valo };
45da3a9d3cSKalle Valo 
46da3a9d3cSKalle Valo struct debug_htt_stats_req {
47da3a9d3cSKalle Valo 	bool done;
48da3a9d3cSKalle Valo 	u8 pdev_id;
49da3a9d3cSKalle Valo 	u8 type;
50da3a9d3cSKalle Valo 	u8 peer_addr[ETH_ALEN];
51da3a9d3cSKalle Valo 	struct completion cmpln;
52da3a9d3cSKalle Valo 	u32 buf_len;
53da3a9d3cSKalle Valo 	u8 buf[];
54da3a9d3cSKalle Valo };
55da3a9d3cSKalle Valo 
56da3a9d3cSKalle Valo struct ath_pktlog_hdr {
57da3a9d3cSKalle Valo 	u16 flags;
58da3a9d3cSKalle Valo 	u16 missed_cnt;
59da3a9d3cSKalle Valo 	u16 log_type;
60da3a9d3cSKalle Valo 	u16 size;
61da3a9d3cSKalle Valo 	u32 timestamp;
62da3a9d3cSKalle Valo 	u32 type_specific_data;
63da3a9d3cSKalle Valo 	u8 payload[];
64da3a9d3cSKalle Valo };
65da3a9d3cSKalle Valo 
66da3a9d3cSKalle Valo #define ATH11K_HTT_PEER_STATS_RESET BIT(16)
67da3a9d3cSKalle Valo 
68da3a9d3cSKalle Valo #define ATH11K_HTT_STATS_BUF_SIZE (1024 * 512)
69da3a9d3cSKalle Valo #define ATH11K_FW_STATS_BUF_SIZE (1024 * 1024)
70da3a9d3cSKalle Valo 
71da3a9d3cSKalle Valo enum ath11k_pktlog_filter {
72da3a9d3cSKalle Valo 	ATH11K_PKTLOG_RX		= 0x000000001,
73da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TX		= 0x000000002,
74da3a9d3cSKalle Valo 	ATH11K_PKTLOG_RCFIND		= 0x000000004,
75da3a9d3cSKalle Valo 	ATH11K_PKTLOG_RCUPDATE		= 0x000000008,
76da3a9d3cSKalle Valo 	ATH11K_PKTLOG_EVENT_SMART_ANT	= 0x000000020,
77da3a9d3cSKalle Valo 	ATH11K_PKTLOG_EVENT_SW		= 0x000000040,
78da3a9d3cSKalle Valo 	ATH11K_PKTLOG_ANY		= 0x00000006f,
79da3a9d3cSKalle Valo };
80da3a9d3cSKalle Valo 
81da3a9d3cSKalle Valo enum ath11k_pktlog_mode {
82da3a9d3cSKalle Valo 	ATH11K_PKTLOG_MODE_LITE = 1,
83da3a9d3cSKalle Valo 	ATH11K_PKTLOG_MODE_FULL = 2,
84da3a9d3cSKalle Valo };
85da3a9d3cSKalle Valo 
86da3a9d3cSKalle Valo enum ath11k_pktlog_enum {
87da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_TX_CTRL      = 1,
88da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_TX_STAT      = 2,
89da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_TX_MSDU_ID   = 3,
90da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_RX_STAT      = 5,
91da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_RC_FIND      = 6,
92da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_RC_UPDATE    = 7,
93da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_TX_VIRT_ADDR = 8,
94da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_RX_CBF       = 10,
95da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_RX_STATBUF   = 22,
96da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_PPDU_STATS   = 23,
97da3a9d3cSKalle Valo 	ATH11K_PKTLOG_TYPE_LITE_RX      = 24,
98da3a9d3cSKalle Valo };
99da3a9d3cSKalle Valo 
100da3a9d3cSKalle Valo enum ath11k_dbg_aggr_mode {
101da3a9d3cSKalle Valo 	ATH11K_DBG_AGGR_MODE_AUTO,
102da3a9d3cSKalle Valo 	ATH11K_DBG_AGGR_MODE_MANUAL,
103da3a9d3cSKalle Valo 	ATH11K_DBG_AGGR_MODE_MAX,
104da3a9d3cSKalle Valo };
105da3a9d3cSKalle Valo 
106da3a9d3cSKalle Valo #ifdef CONFIG_ATH11K_DEBUGFS
107*cb4e57dbSKalle Valo int ath11k_debugfs_soc_create(struct ath11k_base *ab);
108*cb4e57dbSKalle Valo void ath11k_debugfs_soc_destroy(struct ath11k_base *ab);
109*cb4e57dbSKalle Valo int ath11k_debugfs_pdev_create(struct ath11k_base *ab);
110*cb4e57dbSKalle Valo void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab);
111*cb4e57dbSKalle Valo int ath11k_debugfs_register(struct ath11k *ar);
112*cb4e57dbSKalle Valo void ath11k_debugfs_unregister(struct ath11k *ar);
113*cb4e57dbSKalle Valo void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab, struct sk_buff *skb);
114da3a9d3cSKalle Valo 
115*cb4e57dbSKalle Valo void ath11k_debugfs_fw_stats_init(struct ath11k *ar);
116da3a9d3cSKalle Valo 
117*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar)
118da3a9d3cSKalle Valo {
119da3a9d3cSKalle Valo 	return (ar->debug.pktlog_mode == ATH11K_PKTLOG_MODE_LITE);
120da3a9d3cSKalle Valo }
121da3a9d3cSKalle Valo 
122*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar)
123da3a9d3cSKalle Valo {
124da3a9d3cSKalle Valo 	return (!ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode);
125da3a9d3cSKalle Valo }
126da3a9d3cSKalle Valo 
127*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr)
128da3a9d3cSKalle Valo {
129da3a9d3cSKalle Valo 	return (ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode &&
130da3a9d3cSKalle Valo 		ether_addr_equal(addr, ar->debug.pktlog_peer_addr));
131da3a9d3cSKalle Valo }
132da3a9d3cSKalle Valo 
133*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar)
134da3a9d3cSKalle Valo {
135da3a9d3cSKalle Valo 	return ar->debug.extd_tx_stats;
136da3a9d3cSKalle Valo }
137da3a9d3cSKalle Valo 
138*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar)
139da3a9d3cSKalle Valo {
140da3a9d3cSKalle Valo 	return ar->debug.extd_rx_stats;
141da3a9d3cSKalle Valo }
142da3a9d3cSKalle Valo 
143*cb4e57dbSKalle Valo static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)
144da3a9d3cSKalle Valo {
145da3a9d3cSKalle Valo 	return ar->debug.rx_filter;
146da3a9d3cSKalle Valo }
147da3a9d3cSKalle Valo 
148da3a9d3cSKalle Valo #else
149*cb4e57dbSKalle Valo static inline int ath11k_debugfs_soc_create(struct ath11k_base *ab)
150da3a9d3cSKalle Valo {
151da3a9d3cSKalle Valo 	return 0;
152da3a9d3cSKalle Valo }
153da3a9d3cSKalle Valo 
154*cb4e57dbSKalle Valo static inline void ath11k_debugfs_soc_destroy(struct ath11k_base *ab)
155da3a9d3cSKalle Valo {
156da3a9d3cSKalle Valo }
157da3a9d3cSKalle Valo 
158*cb4e57dbSKalle Valo static inline int ath11k_debugfs_pdev_create(struct ath11k_base *ab)
159da3a9d3cSKalle Valo {
160da3a9d3cSKalle Valo 	return 0;
161da3a9d3cSKalle Valo }
162da3a9d3cSKalle Valo 
163*cb4e57dbSKalle Valo static inline void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab)
164da3a9d3cSKalle Valo {
165da3a9d3cSKalle Valo }
166da3a9d3cSKalle Valo 
167*cb4e57dbSKalle Valo static inline int ath11k_debugfs_register(struct ath11k *ar)
168da3a9d3cSKalle Valo {
169da3a9d3cSKalle Valo 	return 0;
170da3a9d3cSKalle Valo }
171da3a9d3cSKalle Valo 
172*cb4e57dbSKalle Valo static inline void ath11k_debugfs_unregister(struct ath11k *ar)
173da3a9d3cSKalle Valo {
174da3a9d3cSKalle Valo }
175da3a9d3cSKalle Valo 
176*cb4e57dbSKalle Valo static inline void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab,
177da3a9d3cSKalle Valo 						   struct sk_buff *skb)
178da3a9d3cSKalle Valo {
179da3a9d3cSKalle Valo }
180da3a9d3cSKalle Valo 
181*cb4e57dbSKalle Valo static inline void ath11k_debugfs_fw_stats_init(struct ath11k *ar)
182da3a9d3cSKalle Valo {
183da3a9d3cSKalle Valo }
184da3a9d3cSKalle Valo 
185*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar)
186da3a9d3cSKalle Valo {
187da3a9d3cSKalle Valo 	return 0;
188da3a9d3cSKalle Valo }
189da3a9d3cSKalle Valo 
190*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar)
191da3a9d3cSKalle Valo {
192da3a9d3cSKalle Valo 	return 0;
193da3a9d3cSKalle Valo }
194da3a9d3cSKalle Valo 
195*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar)
196da3a9d3cSKalle Valo {
197da3a9d3cSKalle Valo 	return false;
198da3a9d3cSKalle Valo }
199da3a9d3cSKalle Valo 
200*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar)
201da3a9d3cSKalle Valo {
202da3a9d3cSKalle Valo 	return false;
203da3a9d3cSKalle Valo }
204da3a9d3cSKalle Valo 
205*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr)
206da3a9d3cSKalle Valo {
207da3a9d3cSKalle Valo 	return false;
208da3a9d3cSKalle Valo }
209da3a9d3cSKalle Valo 
210*cb4e57dbSKalle Valo static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)
211da3a9d3cSKalle Valo {
212da3a9d3cSKalle Valo 	return 0;
213da3a9d3cSKalle Valo }
214da3a9d3cSKalle Valo 
215da3a9d3cSKalle Valo #endif /* CONFIG_MAC80211_DEBUGFS*/
216da3a9d3cSKalle Valo 
217da3a9d3cSKalle Valo #endif /* _ATH11K_DEBUGFS_H_ */
218