Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/athk/ath11k/debug.c
103756 views
1
// SPDX-License-Identifier: BSD-3-Clause-Clear
2
/*
3
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
5
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
6
*/
7
8
#include <linux/export.h>
9
#include <linux/vmalloc.h>
10
#include "core.h"
11
#include "debug.h"
12
13
void ath11k_info(struct ath11k_base *ab, const char *fmt, ...)
14
{
15
struct va_format vaf = {
16
.fmt = fmt,
17
};
18
va_list args;
19
20
va_start(args, fmt);
21
vaf.va = &args;
22
#if defined(__linux__)
23
dev_info(ab->dev, "%pV", &vaf);
24
#elif defined(__FreeBSD__)
25
{
26
char *str;
27
vasprintf(&str, M_KMALLOC, fmt, args);
28
dev_printk(KERN_INFO, ab->dev, "%s", str);
29
free(str, M_KMALLOC);
30
}
31
#endif
32
trace_ath11k_log_info(ab, &vaf);
33
va_end(args);
34
}
35
EXPORT_SYMBOL(ath11k_info);
36
37
void ath11k_err(struct ath11k_base *ab, const char *fmt, ...)
38
{
39
struct va_format vaf = {
40
.fmt = fmt,
41
};
42
va_list args;
43
44
va_start(args, fmt);
45
vaf.va = &args;
46
#if defined(__linux__)
47
dev_err(ab->dev, "%pV", &vaf);
48
#elif defined(__FreeBSD__)
49
{
50
char *str;
51
vasprintf(&str, M_KMALLOC, fmt, args);
52
dev_printk(KERN_ERR, ab->dev, "%s", str);
53
free(str, M_KMALLOC);
54
}
55
#endif
56
trace_ath11k_log_err(ab, &vaf);
57
va_end(args);
58
}
59
EXPORT_SYMBOL(ath11k_err);
60
61
void ath11k_warn(struct ath11k_base *ab, const char *fmt, ...)
62
{
63
struct va_format vaf = {
64
.fmt = fmt,
65
};
66
va_list args;
67
68
va_start(args, fmt);
69
vaf.va = &args;
70
#if defined(__linux__)
71
dev_warn_ratelimited(ab->dev, "%pV", &vaf);
72
#elif defined(__FreeBSD__)
73
{
74
static linux_ratelimit_t __ratelimited;
75
76
if (linux_ratelimited(&__ratelimited)) {
77
char *str;
78
vasprintf(&str, M_KMALLOC, fmt, args);
79
dev_printk(KERN_WARN, ab->dev, "%s", str);
80
free(str, M_KMALLOC);
81
}
82
}
83
#endif
84
trace_ath11k_log_warn(ab, &vaf);
85
va_end(args);
86
}
87
EXPORT_SYMBOL(ath11k_warn);
88
89
#ifdef CONFIG_ATH11K_DEBUG
90
91
void __ath11k_dbg(struct ath11k_base *ab, enum ath11k_debug_mask mask,
92
const char *fmt, ...)
93
{
94
struct va_format vaf;
95
va_list args;
96
97
va_start(args, fmt);
98
99
vaf.fmt = fmt;
100
vaf.va = &args;
101
102
if (ath11k_debug_mask & mask)
103
#if defined(__linux__)
104
dev_printk(KERN_DEBUG, ab->dev, "%s %pV", ath11k_dbg_str(mask), &vaf);
105
#elif defined(__FreeBSD__)
106
{
107
char *str;
108
vasprintf(&str, M_KMALLOC, fmt, args);
109
dev_printk(KERN_DEBUG, ab->dev, "%s %s", ath11k_dbg_str(mask), str);
110
free(str, M_KMALLOC);
111
}
112
#endif
113
114
trace_ath11k_log_dbg(ab, mask, &vaf);
115
116
va_end(args);
117
}
118
EXPORT_SYMBOL(__ath11k_dbg);
119
120
void ath11k_dbg_dump(struct ath11k_base *ab,
121
enum ath11k_debug_mask mask,
122
const char *msg, const char *prefix,
123
const void *buf, size_t len)
124
{
125
#if defined(__linux__)
126
char linebuf[256];
127
size_t linebuflen;
128
const void *ptr;
129
#elif defined(__FreeBSD__)
130
struct sbuf *sb;
131
int rc;
132
#endif
133
134
if (ath11k_debug_mask & mask) {
135
if (msg)
136
__ath11k_dbg(ab, mask, "%s\n", msg);
137
138
#if defined(__linux__)
139
for (ptr = buf; (ptr - buf) < len; ptr += 16) {
140
linebuflen = 0;
141
linebuflen += scnprintf(linebuf + linebuflen,
142
sizeof(linebuf) - linebuflen,
143
"%s%08x: ",
144
(prefix ? prefix : ""),
145
(unsigned int)(ptr - buf));
146
hex_dump_to_buffer(ptr, len - (ptr - buf), 16, 1,
147
linebuf + linebuflen,
148
sizeof(linebuf) - linebuflen, true);
149
dev_printk(KERN_DEBUG, ab->dev, "%s\n", linebuf);
150
}
151
#elif defined(__FreeBSD__)
152
sb = sbuf_new_auto();
153
if (sb == NULL)
154
goto trace;
155
156
sbuf_hexdump(sb, buf, len, prefix, 0);
157
sbuf_trim(sb);
158
rc = sbuf_finish(sb);
159
if (rc == 0)
160
dev_printk(KERN_DEBUG, ab->dev, "%s\n", sbuf_data(sb));
161
sbuf_delete(sb);
162
trace: ;
163
#endif
164
}
165
166
/* tracing code doesn't like null strings */
167
trace_ath11k_log_dbg_dump(ab, msg ? msg : "", prefix ? prefix : "",
168
buf, len);
169
}
170
EXPORT_SYMBOL(ath11k_dbg_dump);
171
172
#endif /* CONFIG_ATH11K_DEBUG */
173
174