1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
3 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
6 #ifndef _ATH11K_DEBUG_H_
7 #define _ATH11K_DEBUG_H_
12 #define ATH11K_TX_POWER_MAX_VAL 70
13 #define ATH11K_TX_POWER_MIN_VAL 0
15 enum ath11k_debug_mask
{
16 ATH11K_DBG_AHB
= 0x00000001,
17 ATH11K_DBG_WMI
= 0x00000002,
18 ATH11K_DBG_HTC
= 0x00000004,
19 ATH11K_DBG_DP_HTT
= 0x00000008,
20 ATH11K_DBG_MAC
= 0x00000010,
21 ATH11K_DBG_BOOT
= 0x00000020,
22 ATH11K_DBG_QMI
= 0x00000040,
23 ATH11K_DBG_DATA
= 0x00000080,
24 ATH11K_DBG_MGMT
= 0x00000100,
25 ATH11K_DBG_REG
= 0x00000200,
26 ATH11K_DBG_TESTMODE
= 0x00000400,
27 ATH11k_DBG_HAL
= 0x00000800,
28 ATH11K_DBG_ANY
= 0xffffffff,
31 /* htt_dbg_ext_stats_type */
32 enum ath11k_dbg_htt_ext_stats_type
{
33 ATH11K_DBG_HTT_EXT_STATS_RESET
= 0,
34 ATH11K_DBG_HTT_EXT_STATS_PDEV_TX
= 1,
35 ATH11K_DBG_HTT_EXT_STATS_PDEV_RX
= 2,
36 ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_HWQ
= 3,
37 ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_SCHED
= 4,
38 ATH11K_DBG_HTT_EXT_STATS_PDEV_ERROR
= 5,
39 ATH11K_DBG_HTT_EXT_STATS_PDEV_TQM
= 6,
40 ATH11K_DBG_HTT_EXT_STATS_TQM_CMDQ
= 7,
41 ATH11K_DBG_HTT_EXT_STATS_TX_DE_INFO
= 8,
42 ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE
= 9,
43 ATH11K_DBG_HTT_EXT_STATS_PDEV_RX_RATE
= 10,
44 ATH11K_DBG_HTT_EXT_STATS_PEER_INFO
= 11,
45 ATH11K_DBG_HTT_EXT_STATS_TX_SELFGEN_INFO
= 12,
46 ATH11K_DBG_HTT_EXT_STATS_TX_MU_HWQ
= 13,
47 ATH11K_DBG_HTT_EXT_STATS_RING_IF_INFO
= 14,
48 ATH11K_DBG_HTT_EXT_STATS_SRNG_INFO
= 15,
49 ATH11K_DBG_HTT_EXT_STATS_SFM_INFO
= 16,
50 ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_MU
= 17,
51 ATH11K_DBG_HTT_EXT_STATS_ACTIVE_PEERS_LIST
= 18,
52 ATH11K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS
= 19,
53 ATH11K_DBG_HTT_EXT_STATS_TWT_SESSIONS
= 20,
54 ATH11K_DBG_HTT_EXT_STATS_REO_RESOURCE_STATS
= 21,
55 ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO
= 22,
58 ATH11K_DBG_HTT_NUM_EXT_STATS
,
61 struct debug_htt_stats_req
{
65 u8 peer_addr
[ETH_ALEN
];
66 struct completion cmpln
;
71 #define ATH11K_HTT_STATS_BUF_SIZE (1024 * 512)
73 #define ATH11K_FW_STATS_BUF_SIZE (1024 * 1024)
75 #define ATH11K_HTT_PKTLOG_MAX_SIZE 2048
77 enum ath11k_pktlog_filter
{
78 ATH11K_PKTLOG_RX
= 0x000000001,
79 ATH11K_PKTLOG_TX
= 0x000000002,
80 ATH11K_PKTLOG_RCFIND
= 0x000000004,
81 ATH11K_PKTLOG_RCUPDATE
= 0x000000008,
82 ATH11K_PKTLOG_EVENT_SMART_ANT
= 0x000000020,
83 ATH11K_PKTLOG_EVENT_SW
= 0x000000040,
84 ATH11K_PKTLOG_ANY
= 0x00000006f,
87 enum ath11k_pktlog_mode
{
88 ATH11K_PKTLOG_MODE_LITE
= 1,
89 ATH11K_PKTLOG_MODE_FULL
= 2,
92 enum ath11k_pktlog_enum
{
93 ATH11K_PKTLOG_TYPE_TX_CTRL
= 1,
94 ATH11K_PKTLOG_TYPE_TX_STAT
= 2,
95 ATH11K_PKTLOG_TYPE_TX_MSDU_ID
= 3,
96 ATH11K_PKTLOG_TYPE_RX_STAT
= 5,
97 ATH11K_PKTLOG_TYPE_RC_FIND
= 6,
98 ATH11K_PKTLOG_TYPE_RC_UPDATE
= 7,
99 ATH11K_PKTLOG_TYPE_TX_VIRT_ADDR
= 8,
100 ATH11K_PKTLOG_TYPE_RX_CBF
= 10,
101 ATH11K_PKTLOG_TYPE_RX_STATBUF
= 22,
102 ATH11K_PKTLOG_TYPE_PPDU_STATS
= 23,
103 ATH11K_PKTLOG_TYPE_LITE_RX
= 24,
106 __printf(2, 3) void ath11k_info(struct ath11k_base
*ab
, const char *fmt
, ...);
107 __printf(2, 3) void ath11k_err(struct ath11k_base
*ab
, const char *fmt
, ...);
108 __printf(2, 3) void ath11k_warn(struct ath11k_base
*ab
, const char *fmt
, ...);
110 extern unsigned int ath11k_debug_mask
;
112 #ifdef CONFIG_ATH11K_DEBUG
113 __printf(3, 4) void __ath11k_dbg(struct ath11k_base
*ab
,
114 enum ath11k_debug_mask mask
,
115 const char *fmt
, ...);
116 void ath11k_dbg_dump(struct ath11k_base
*ab
,
117 enum ath11k_debug_mask mask
,
118 const char *msg
, const char *prefix
,
119 const void *buf
, size_t len
);
120 #else /* CONFIG_ATH11K_DEBUG */
121 static inline int __ath11k_dbg(struct ath11k_base
*ab
,
122 enum ath11k_debug_mask dbg_mask
,
123 const char *fmt
, ...)
128 static inline void ath11k_dbg_dump(struct ath11k_base
*ab
,
129 enum ath11k_debug_mask mask
,
130 const char *msg
, const char *prefix
,
131 const void *buf
, size_t len
)
134 #endif /* CONFIG_ATH11K_DEBUG */
136 #ifdef CONFIG_ATH11K_DEBUGFS
137 int ath11k_debug_soc_create(struct ath11k_base
*ab
);
138 void ath11k_debug_soc_destroy(struct ath11k_base
*ab
);
139 int ath11k_debug_pdev_create(struct ath11k_base
*ab
);
140 void ath11k_debug_pdev_destroy(struct ath11k_base
*ab
);
141 int ath11k_debug_register(struct ath11k
*ar
);
142 void ath11k_debug_unregister(struct ath11k
*ar
);
143 void ath11k_dbg_htt_ext_stats_handler(struct ath11k_base
*ab
,
144 struct sk_buff
*skb
);
145 void ath11k_debug_fw_stats_process(struct ath11k_base
*ab
, struct sk_buff
*skb
);
147 void ath11k_debug_fw_stats_init(struct ath11k
*ar
);
148 int ath11k_dbg_htt_stats_req(struct ath11k
*ar
);
150 static inline bool ath11k_debug_is_pktlog_lite_mode_enabled(struct ath11k
*ar
)
152 return (ar
->debug
.pktlog_mode
== ATH11K_PKTLOG_MODE_LITE
);
155 static inline bool ath11k_debug_is_pktlog_rx_stats_enabled(struct ath11k
*ar
)
157 return (!ar
->debug
.pktlog_peer_valid
&& ar
->debug
.pktlog_mode
);
160 static inline bool ath11k_debug_is_pktlog_peer_valid(struct ath11k
*ar
, u8
*addr
)
162 return (ar
->debug
.pktlog_peer_valid
&& ar
->debug
.pktlog_mode
&&
163 ether_addr_equal(addr
, ar
->debug
.pktlog_peer_addr
));
166 static inline int ath11k_debug_is_extd_tx_stats_enabled(struct ath11k
*ar
)
168 return ar
->debug
.extd_tx_stats
;
171 static inline int ath11k_debug_is_extd_rx_stats_enabled(struct ath11k
*ar
)
173 return ar
->debug
.extd_rx_stats
;
176 void ath11k_sta_add_debugfs(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
177 struct ieee80211_sta
*sta
, struct dentry
*dir
);
179 ath11k_accumulate_per_peer_tx_stats(struct ath11k_sta
*arsta
,
180 struct ath11k_per_peer_tx_stats
*peer_stats
,
182 void ath11k_update_per_peer_stats_from_txcompl(struct ath11k
*ar
,
183 struct sk_buff
*msdu
,
184 struct hal_tx_status
*ts
);
186 static inline int ath11k_debug_soc_create(struct ath11k_base
*ab
)
191 static inline void ath11k_debug_soc_destroy(struct ath11k_base
*ab
)
195 static inline int ath11k_debug_pdev_create(struct ath11k_base
*ab
)
200 static inline void ath11k_debug_pdev_destroy(struct ath11k_base
*ab
)
204 static inline int ath11k_debug_register(struct ath11k
*ar
)
209 static inline void ath11k_debug_unregister(struct ath11k
*ar
)
213 static inline void ath11k_dbg_htt_ext_stats_handler(struct ath11k_base
*ab
,
218 static inline void ath11k_debug_fw_stats_process(struct ath11k_base
*ab
,
223 static inline void ath11k_debug_fw_stats_init(struct ath11k
*ar
)
227 static inline int ath11k_debug_is_extd_tx_stats_enabled(struct ath11k
*ar
)
232 static inline int ath11k_debug_is_extd_rx_stats_enabled(struct ath11k
*ar
)
237 static inline int ath11k_dbg_htt_stats_req(struct ath11k
*ar
)
242 static inline bool ath11k_debug_is_pktlog_lite_mode_enabled(struct ath11k
*ar
)
247 static inline bool ath11k_debug_is_pktlog_rx_stats_enabled(struct ath11k
*ar
)
252 static inline bool ath11k_debug_is_pktlog_peer_valid(struct ath11k
*ar
, u8
*addr
)
258 ath11k_accumulate_per_peer_tx_stats(struct ath11k_sta
*arsta
,
259 struct ath11k_per_peer_tx_stats
*peer_stats
,
265 ath11k_update_per_peer_stats_from_txcompl(struct ath11k
*ar
,
266 struct sk_buff
*msdu
,
267 struct hal_tx_status
*ts
)
271 #endif /* CONFIG_MAC80211_DEBUGFS*/
273 #define ath11k_dbg(ar, dbg_mask, fmt, ...) \
275 if (ath11k_debug_mask & dbg_mask) \
276 __ath11k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \
279 #endif /* _ATH11K_DEBUG_H_ */