1dd4f32aeSBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2dd4f32aeSBjoern A. Zeeb /*
3dd4f32aeSBjoern A. Zeeb * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4*28348caeSBjoern A. Zeeb * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
5dd4f32aeSBjoern A. Zeeb */
6dd4f32aeSBjoern A. Zeeb
7dd4f32aeSBjoern A. Zeeb #ifndef _ATH11K_DEBUG_H_
8dd4f32aeSBjoern A. Zeeb #define _ATH11K_DEBUG_H_
9dd4f32aeSBjoern A. Zeeb
10dd4f32aeSBjoern A. Zeeb #include "trace.h"
11dd4f32aeSBjoern A. Zeeb #include "debugfs.h"
12dd4f32aeSBjoern A. Zeeb
13dd4f32aeSBjoern A. Zeeb enum ath11k_debug_mask {
14dd4f32aeSBjoern A. Zeeb ATH11K_DBG_AHB = 0x00000001,
15dd4f32aeSBjoern A. Zeeb ATH11K_DBG_WMI = 0x00000002,
16dd4f32aeSBjoern A. Zeeb ATH11K_DBG_HTC = 0x00000004,
17dd4f32aeSBjoern A. Zeeb ATH11K_DBG_DP_HTT = 0x00000008,
18dd4f32aeSBjoern A. Zeeb ATH11K_DBG_MAC = 0x00000010,
19dd4f32aeSBjoern A. Zeeb ATH11K_DBG_BOOT = 0x00000020,
20dd4f32aeSBjoern A. Zeeb ATH11K_DBG_QMI = 0x00000040,
21dd4f32aeSBjoern A. Zeeb ATH11K_DBG_DATA = 0x00000080,
22dd4f32aeSBjoern A. Zeeb ATH11K_DBG_MGMT = 0x00000100,
23dd4f32aeSBjoern A. Zeeb ATH11K_DBG_REG = 0x00000200,
24dd4f32aeSBjoern A. Zeeb ATH11K_DBG_TESTMODE = 0x00000400,
25*28348caeSBjoern A. Zeeb ATH11K_DBG_HAL = 0x00000800,
26dd4f32aeSBjoern A. Zeeb ATH11K_DBG_PCI = 0x00001000,
27*28348caeSBjoern A. Zeeb ATH11K_DBG_DP_TX = 0x00002000,
28*28348caeSBjoern A. Zeeb ATH11K_DBG_DP_RX = 0x00004000,
29*28348caeSBjoern A. Zeeb ATH11K_DBG_CE = 0x00008000,
30dd4f32aeSBjoern A. Zeeb };
31dd4f32aeSBjoern A. Zeeb
ath11k_dbg_str(enum ath11k_debug_mask mask)32*28348caeSBjoern A. Zeeb static inline const char *ath11k_dbg_str(enum ath11k_debug_mask mask)
33*28348caeSBjoern A. Zeeb {
34*28348caeSBjoern A. Zeeb switch (mask) {
35*28348caeSBjoern A. Zeeb case ATH11K_DBG_AHB:
36*28348caeSBjoern A. Zeeb return "ahb";
37*28348caeSBjoern A. Zeeb case ATH11K_DBG_WMI:
38*28348caeSBjoern A. Zeeb return "wmi";
39*28348caeSBjoern A. Zeeb case ATH11K_DBG_HTC:
40*28348caeSBjoern A. Zeeb return "htc";
41*28348caeSBjoern A. Zeeb case ATH11K_DBG_DP_HTT:
42*28348caeSBjoern A. Zeeb return "dp_htt";
43*28348caeSBjoern A. Zeeb case ATH11K_DBG_MAC:
44*28348caeSBjoern A. Zeeb return "mac";
45*28348caeSBjoern A. Zeeb case ATH11K_DBG_BOOT:
46*28348caeSBjoern A. Zeeb return "boot";
47*28348caeSBjoern A. Zeeb case ATH11K_DBG_QMI:
48*28348caeSBjoern A. Zeeb return "qmi";
49*28348caeSBjoern A. Zeeb case ATH11K_DBG_DATA:
50*28348caeSBjoern A. Zeeb return "data";
51*28348caeSBjoern A. Zeeb case ATH11K_DBG_MGMT:
52*28348caeSBjoern A. Zeeb return "mgmt";
53*28348caeSBjoern A. Zeeb case ATH11K_DBG_REG:
54*28348caeSBjoern A. Zeeb return "reg";
55*28348caeSBjoern A. Zeeb case ATH11K_DBG_TESTMODE:
56*28348caeSBjoern A. Zeeb return "testmode";
57*28348caeSBjoern A. Zeeb case ATH11K_DBG_HAL:
58*28348caeSBjoern A. Zeeb return "hal";
59*28348caeSBjoern A. Zeeb case ATH11K_DBG_PCI:
60*28348caeSBjoern A. Zeeb return "pci";
61*28348caeSBjoern A. Zeeb case ATH11K_DBG_DP_TX:
62*28348caeSBjoern A. Zeeb return "dp_tx";
63*28348caeSBjoern A. Zeeb case ATH11K_DBG_DP_RX:
64*28348caeSBjoern A. Zeeb return "dp_rx";
65*28348caeSBjoern A. Zeeb case ATH11K_DBG_CE:
66*28348caeSBjoern A. Zeeb return "ce";
67*28348caeSBjoern A. Zeeb
68*28348caeSBjoern A. Zeeb /* no default handler to allow compiler to check that the
69*28348caeSBjoern A. Zeeb * enum is fully handled
70*28348caeSBjoern A. Zeeb */
71*28348caeSBjoern A. Zeeb }
72*28348caeSBjoern A. Zeeb
73*28348caeSBjoern A. Zeeb return "<?>";
74*28348caeSBjoern A. Zeeb }
75*28348caeSBjoern A. Zeeb
76dd4f32aeSBjoern A. Zeeb __printf(2, 3) void ath11k_info(struct ath11k_base *ab, const char *fmt, ...);
77dd4f32aeSBjoern A. Zeeb __printf(2, 3) void ath11k_err(struct ath11k_base *ab, const char *fmt, ...);
78dd4f32aeSBjoern A. Zeeb __printf(2, 3) void ath11k_warn(struct ath11k_base *ab, const char *fmt, ...);
79dd4f32aeSBjoern A. Zeeb
80dd4f32aeSBjoern A. Zeeb extern unsigned int ath11k_debug_mask;
81dd4f32aeSBjoern A. Zeeb
82dd4f32aeSBjoern A. Zeeb #ifdef CONFIG_ATH11K_DEBUG
83dd4f32aeSBjoern A. Zeeb __printf(3, 4) void __ath11k_dbg(struct ath11k_base *ab,
84dd4f32aeSBjoern A. Zeeb enum ath11k_debug_mask mask,
85dd4f32aeSBjoern A. Zeeb const char *fmt, ...);
86dd4f32aeSBjoern A. Zeeb void ath11k_dbg_dump(struct ath11k_base *ab,
87dd4f32aeSBjoern A. Zeeb enum ath11k_debug_mask mask,
88dd4f32aeSBjoern A. Zeeb const char *msg, const char *prefix,
89dd4f32aeSBjoern A. Zeeb const void *buf, size_t len);
90dd4f32aeSBjoern A. Zeeb #else /* CONFIG_ATH11K_DEBUG */
__ath11k_dbg(struct ath11k_base * ab,enum ath11k_debug_mask dbg_mask,const char * fmt,...)91dd4f32aeSBjoern A. Zeeb static inline int __ath11k_dbg(struct ath11k_base *ab,
92dd4f32aeSBjoern A. Zeeb enum ath11k_debug_mask dbg_mask,
93dd4f32aeSBjoern A. Zeeb const char *fmt, ...)
94dd4f32aeSBjoern A. Zeeb {
95dd4f32aeSBjoern A. Zeeb return 0;
96dd4f32aeSBjoern A. Zeeb }
97dd4f32aeSBjoern A. Zeeb
ath11k_dbg_dump(struct ath11k_base * ab,enum ath11k_debug_mask mask,const char * msg,const char * prefix,const void * buf,size_t len)98dd4f32aeSBjoern A. Zeeb static inline void ath11k_dbg_dump(struct ath11k_base *ab,
99dd4f32aeSBjoern A. Zeeb enum ath11k_debug_mask mask,
100dd4f32aeSBjoern A. Zeeb const char *msg, const char *prefix,
101dd4f32aeSBjoern A. Zeeb const void *buf, size_t len)
102dd4f32aeSBjoern A. Zeeb {
103dd4f32aeSBjoern A. Zeeb }
104dd4f32aeSBjoern A. Zeeb #endif /* CONFIG_ATH11K_DEBUG */
105dd4f32aeSBjoern A. Zeeb
106dd4f32aeSBjoern A. Zeeb #define ath11k_dbg(ar, dbg_mask, fmt, ...) \
107dd4f32aeSBjoern A. Zeeb do { \
108dd4f32aeSBjoern A. Zeeb if ((ath11k_debug_mask & dbg_mask) || \
109dd4f32aeSBjoern A. Zeeb trace_ath11k_log_dbg_enabled()) \
110dd4f32aeSBjoern A. Zeeb __ath11k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \
111dd4f32aeSBjoern A. Zeeb } while (0)
112dd4f32aeSBjoern A. Zeeb
113dd4f32aeSBjoern A. Zeeb #endif /* _ATH11K_DEBUG_H_ */
114