xref: /openbmc/linux/drivers/net/wireless/ath/ath12k/debug.c (revision 5ee9cd065836e5934710ca35653bce7905add20b)
1d8899132SKalle Valo // SPDX-License-Identifier: BSD-3-Clause-Clear
2d8899132SKalle Valo /*
3d8899132SKalle Valo  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4*bc3bfb63SJeff Johnson  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
5d8899132SKalle Valo  */
6d8899132SKalle Valo 
7d8899132SKalle Valo #include <linux/vmalloc.h>
8d8899132SKalle Valo #include "core.h"
9d8899132SKalle Valo #include "debug.h"
10d8899132SKalle Valo 
ath12k_info(struct ath12k_base * ab,const char * fmt,...)11d8899132SKalle Valo void ath12k_info(struct ath12k_base *ab, const char *fmt, ...)
12d8899132SKalle Valo {
13d8899132SKalle Valo 	struct va_format vaf = {
14d8899132SKalle Valo 		.fmt = fmt,
15d8899132SKalle Valo 	};
16d8899132SKalle Valo 	va_list args;
17d8899132SKalle Valo 
18d8899132SKalle Valo 	va_start(args, fmt);
19d8899132SKalle Valo 	vaf.va = &args;
20d8899132SKalle Valo 	dev_info(ab->dev, "%pV", &vaf);
21d8899132SKalle Valo 	/* TODO: Trace the log */
22d8899132SKalle Valo 	va_end(args);
23d8899132SKalle Valo }
24d8899132SKalle Valo 
ath12k_err(struct ath12k_base * ab,const char * fmt,...)25d8899132SKalle Valo void ath12k_err(struct ath12k_base *ab, const char *fmt, ...)
26d8899132SKalle Valo {
27d8899132SKalle Valo 	struct va_format vaf = {
28d8899132SKalle Valo 		.fmt = fmt,
29d8899132SKalle Valo 	};
30d8899132SKalle Valo 	va_list args;
31d8899132SKalle Valo 
32d8899132SKalle Valo 	va_start(args, fmt);
33d8899132SKalle Valo 	vaf.va = &args;
34d8899132SKalle Valo 	dev_err(ab->dev, "%pV", &vaf);
35d8899132SKalle Valo 	/* TODO: Trace the log */
36d8899132SKalle Valo 	va_end(args);
37d8899132SKalle Valo }
38d8899132SKalle Valo 
ath12k_warn(struct ath12k_base * ab,const char * fmt,...)39d8899132SKalle Valo void ath12k_warn(struct ath12k_base *ab, const char *fmt, ...)
40d8899132SKalle Valo {
41d8899132SKalle Valo 	struct va_format vaf = {
42d8899132SKalle Valo 		.fmt = fmt,
43d8899132SKalle Valo 	};
44d8899132SKalle Valo 	va_list args;
45d8899132SKalle Valo 
46d8899132SKalle Valo 	va_start(args, fmt);
47d8899132SKalle Valo 	vaf.va = &args;
48d8899132SKalle Valo 	dev_warn_ratelimited(ab->dev, "%pV", &vaf);
49d8899132SKalle Valo 	/* TODO: Trace the log */
50d8899132SKalle Valo 	va_end(args);
51d8899132SKalle Valo }
52d8899132SKalle Valo 
53d8899132SKalle Valo #ifdef CONFIG_ATH12K_DEBUG
54d8899132SKalle Valo 
__ath12k_dbg(struct ath12k_base * ab,enum ath12k_debug_mask mask,const char * fmt,...)55d8899132SKalle Valo void __ath12k_dbg(struct ath12k_base *ab, enum ath12k_debug_mask mask,
56d8899132SKalle Valo 		  const char *fmt, ...)
57d8899132SKalle Valo {
58d8899132SKalle Valo 	struct va_format vaf;
59d8899132SKalle Valo 	va_list args;
60d8899132SKalle Valo 
61d8899132SKalle Valo 	va_start(args, fmt);
62d8899132SKalle Valo 
63d8899132SKalle Valo 	vaf.fmt = fmt;
64d8899132SKalle Valo 	vaf.va = &args;
65d8899132SKalle Valo 
66d8899132SKalle Valo 	if (ath12k_debug_mask & mask)
67d8899132SKalle Valo 		dev_dbg(ab->dev, "%pV", &vaf);
68d8899132SKalle Valo 
69d8899132SKalle Valo 	/* TODO: trace log */
70d8899132SKalle Valo 
71d8899132SKalle Valo 	va_end(args);
72d8899132SKalle Valo }
73d8899132SKalle Valo 
ath12k_dbg_dump(struct ath12k_base * ab,enum ath12k_debug_mask mask,const char * msg,const char * prefix,const void * buf,size_t len)74d8899132SKalle Valo void ath12k_dbg_dump(struct ath12k_base *ab,
75d8899132SKalle Valo 		     enum ath12k_debug_mask mask,
76d8899132SKalle Valo 		     const char *msg, const char *prefix,
77d8899132SKalle Valo 		     const void *buf, size_t len)
78d8899132SKalle Valo {
79d8899132SKalle Valo 	char linebuf[256];
80d8899132SKalle Valo 	size_t linebuflen;
81d8899132SKalle Valo 	const void *ptr;
82d8899132SKalle Valo 
83d8899132SKalle Valo 	if (ath12k_debug_mask & mask) {
84d8899132SKalle Valo 		if (msg)
85d8899132SKalle Valo 			__ath12k_dbg(ab, mask, "%s\n", msg);
86d8899132SKalle Valo 
87d8899132SKalle Valo 		for (ptr = buf; (ptr - buf) < len; ptr += 16) {
88d8899132SKalle Valo 			linebuflen = 0;
89d8899132SKalle Valo 			linebuflen += scnprintf(linebuf + linebuflen,
90d8899132SKalle Valo 						sizeof(linebuf) - linebuflen,
91d8899132SKalle Valo 						"%s%08x: ",
92d8899132SKalle Valo 						(prefix ? prefix : ""),
93d8899132SKalle Valo 						(unsigned int)(ptr - buf));
94d8899132SKalle Valo 			hex_dump_to_buffer(ptr, len - (ptr - buf), 16, 1,
95d8899132SKalle Valo 					   linebuf + linebuflen,
96d8899132SKalle Valo 					   sizeof(linebuf) - linebuflen, true);
97d8899132SKalle Valo 			dev_dbg(ab->dev, "%s\n", linebuf);
98d8899132SKalle Valo 		}
99d8899132SKalle Valo 	}
100d8899132SKalle Valo }
101d8899132SKalle Valo 
102d8899132SKalle Valo #endif /* CONFIG_ATH12K_DEBUG */
103