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