1 | // SPDX-License-Identifier: BSD-3-Clause-Clear |
2 | /* |
3 | * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. |
4 | * Copyright (c) 2021-2023 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_printk(KERN_DEBUG, 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, fmt: "%s\n" , msg); |
86 | |
87 | for (ptr = buf; (ptr - buf) < len; ptr += 16) { |
88 | linebuflen = 0; |
89 | linebuflen += scnprintf(buf: linebuf + linebuflen, |
90 | size: sizeof(linebuf) - linebuflen, |
91 | fmt: "%s%08x: " , |
92 | (prefix ? prefix : "" ), |
93 | (unsigned int)(ptr - buf)); |
94 | hex_dump_to_buffer(buf: ptr, len: len - (ptr - buf), rowsize: 16, groupsize: 1, |
95 | linebuf: linebuf + linebuflen, |
96 | linebuflen: sizeof(linebuf) - linebuflen, ascii: true); |
97 | dev_dbg(ab->dev, "%s\n" , linebuf); |
98 | } |
99 | } |
100 | } |
101 | |
102 | #endif /* CONFIG_ATH12K_DEBUG */ |
103 | |