aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/iwlwifi/iwl-debug.h
blob: 43288a5a8d747e85ae6808f1cc056cdbef95baf6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/*-
 * Copyright (c) 2020-2021 The FreeBSD Foundation
 *
 * This software was developed by Björn Zeeb under sponsorship from
 * the FreeBSD Foundation.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _IWL_DEBUG_H
#define	_IWL_DEBUG_H

#if defined(__FreeBSD__)
#ifdef CONFIG_IWLWIFI_DEBUG
#include <sys/types.h>
#endif
#endif

#include <linux/device.h>

enum iwl_dl {
	IWL_DL_ASSOC		= 0x00000001,
	IWL_DL_CALIB		= 0x00000002,
	IWL_DL_COEX		= 0x00000004,
	IWL_DL_WOWLAN		= 0x00000008,
	IWL_DL_DROP		= 0x00000010,
	IWL_DL_EEPROM		= 0x00000020,
	IWL_DL_FW		= 0x00000040,
	/*			= 0x00000080, */
	IWL_DL_HC		= 0x00000100,
	IWL_DL_HT		= 0x00000200,
	IWL_DL_INFO		= 0x00000400,
	IWL_DL_ISR		= 0x00000800,
	IWL_DL_LAR		= 0x00001000,
	IWL_DL_MAC80211		= 0x00002000,
	IWL_DL_POWER		= 0x00004000,
	IWL_DL_QUOTA		= 0x00008000,
	IWL_DL_RADIO		= 0x00010000,
	IWL_DL_RATE		= 0x00020000,
	IWL_DL_RF_KILL		= 0x00040000,
	IWL_DL_RX		= 0x00080000,
	IWL_DL_SCAN		= 0x00100000,
	IWL_DL_STATS		= 0x00200000,
	/*			= 0x00400000, */
	IWL_DL_TDLS		= 0x00800000,
	IWL_DL_TE		= 0x01000000,
	IWL_DL_TEMP		= 0x02000000,
	IWL_DL_TPT		= 0x04000000,
	IWL_DL_TX		= 0x08000000,
	IWL_DL_TX_QUEUES	= 0x10000000,
	IWL_DL_TX_REPLY		= 0x20000000,
	IWL_DL_WEP		= 0x40000000,

	IWL_DL_PCI_RW		= 0x80000000,

	IWL_DL_ANY		= 0x7fffffff,
};

enum iwl_err_mode {
	IWL_ERR_MODE_RATELIMIT,
	IWL_ERR_MODE_REGULAR,
	IWL_ERR_MODE_RFKILL,	/* XXX we do not pass that from anywhere? */
};

void __iwl_crit(struct device *, const char *, ...);
void __iwl_info(struct device *, const char *, ...);
void __iwl_warn(struct device *, const char *, ...);
void __iwl_err(struct device *, enum iwl_err_mode, const char *, ...);

#define	IWL_CRIT(_subsys, _fmt, ...)					\
	__iwl_crit((_subsys)->dev, _fmt, ##__VA_ARGS__)
#define	IWL_INFO(_subsys, _fmt, ...)					\
	__iwl_info((_subsys)->dev, _fmt, ##__VA_ARGS__)
#define	IWL_WARN(_subsys, _fmt, ...)					\
	__iwl_warn((_subsys)->dev, _fmt, ##__VA_ARGS__)
/* XXX Not sure what the two bools are good for if never passed. */
#define	__IWL_ERR_DEV(_dev, _mode, _fmt, ...)				\
	__iwl_err((_dev), IWL_ERR_MODE_REGULAR, _fmt, ##__VA_ARGS__)
#define	IWL_ERR_DEV(_dev, _fmt, ...)					\
	__IWL_ERR_DEV(_dev, IWL_ERR_MODE_REGULAR, _fmt, ##__VA_ARGS__)
#define	IWL_ERR(_subsys, _fmt, ...)					\
	IWL_ERR_DEV((_subsys)->dev, _fmt, ##__VA_ARGS__)
#define	IWL_ERR_LIMIT(_subsys, _fmt, ...)				\
	__IWL_ERR_DEV((_subsys)->dev, IWL_ERR_MODE_RATELIMIT,		\
	    _fmt, ##__VA_ARGS__)

#define	iwl_print_hex_error(_subsys, _pkt, _n)		/* XXX-BZ TODO */

#ifdef CONFIG_IWLWIFI_DEBUG
bool iwl_have_debug_level(enum iwl_dl);
#if defined(__linux__)
void iwl_print_hex_dump(void *, enum iwl_dl, const char *, uint8_t *, size_t);
#elif defined(__FreeBSD__)
void iwl_print_hex_dump(void *, enum iwl_dl, const char *, const uint8_t *, size_t);
#endif
void __iwl_dbg(struct device *, u32, bool, const char *, const char *fmt, ...);

#define	IWL_DPRINTF_DEV_PREFIX(_dev, _e, _prefix, _fmt, ...)		\
	__iwl_dbg(_dev, _e, false, __func__, #_prefix " " _fmt, ##__VA_ARGS__)
#define	IWL_DPRINTF_DEV(_dev, _e, _fmt, ...)				\
	IWL_DPRINTF_DEV_PREFIX(_dev, _e, _e, _fmt, ##__VA_ARGS__)
#define	IWL_DPRINTF(_subsys, _e, _fmt, ...)				\
	IWL_DPRINTF_DEV((_subsys)->dev, _e, _fmt, ##__VA_ARGS__)
#define	IWL_DPRINTF_PREFIX(_subsys, _e, _prefix, _fmt, ...)		\
	IWL_DPRINTF_DEV_PREFIX((_subsys)->dev, _e, _prefix, _fmt, ##__VA_ARGS__)

#else /* !CONFIG_IWLWIFI_DEBUG */
#define	IWL_DPRINTF_DEV(_dev, _e, _fmt, ...)
#define	IWL_DPRINTF(_subsys, _e, _fmt, ...)
#define	IWL_DPRINTF_PREFIX(_subsys, _e, _prefix, _fmt, ...)
#endif /* CONFIG_IWLWIFI_DEBUG */

#define	IWL_DEBUG_ASSOC(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_ASSOC, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_CALIB(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_CALIB, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_COEX(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_COEX, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_DEV(_dev, _level, _fmt, ...)				\
	IWL_DPRINTF_DEV((_dev), (_level), _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_DROP(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_DROP, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_EEPROM(_dev, _fmt, ...)				\
	IWL_DPRINTF_DEV((_dev), IWL_DL_EEPROM, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_FW(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_FW, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_FW_INFO(_subsys, _fmt, ...)				\
	IWL_DPRINTF_PREFIX(_subsys, IWL_DL_FW | IWL_DL_INFO, IWL_DL_FW_INFO, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_HC(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_HC, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_HT(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_HT, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_INFO(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_INFO, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_ISR(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_ISR, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_LAR(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_LAR, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_MAC80211(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_MAC80211, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_POWER(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_POWER, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_QUOTA(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_QUOTA, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_RADIO(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_RADIO, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_RATE(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_RATE, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_RF_KILL(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_RF_KILL, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_RX(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_RX, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_SCAN(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_SCAN, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_STATS(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_STATS, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_STATS_LIMIT(_subsys, _fmt, ...)			\
	IWL_DPRINTF(_subsys, IWL_DL_STATS, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TDLS(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TDLS, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TE(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TE, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TEMP(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TEMP, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TPT(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TPT, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TX(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TX, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TX_QUEUES(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TX_QUEUES, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_TX_REPLY(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_TX_REPLY, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_WEP(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_WEP, _fmt, ##__VA_ARGS__)
#define	IWL_DEBUG_WOWLAN(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_WOWLAN, _fmt, ##__VA_ARGS__)

#define	IWL_DEBUG_PCI_RW(_subsys, _fmt, ...)				\
	IWL_DPRINTF(_subsys, IWL_DL_PCI_RW, _fmt, ##__VA_ARGS__)

#endif /* _IWL_DEBUG_H */