1 // SPDX-License-Identifier: BSD-3-Clause-Clear 2 /* 3 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/vmalloc.h> 7 #include "core.h" 8 #include "debug.h" 9 10 void ath11k_info(struct ath11k_base *ab, const char *fmt, ...) 11 { 12 struct va_format vaf = { 13 .fmt = fmt, 14 }; 15 va_list args; 16 17 va_start(args, fmt); 18 vaf.va = &args; 19 dev_info(ab->dev, "%pV", &vaf); 20 trace_ath11k_log_info(ab, &vaf); 21 va_end(args); 22 } 23 EXPORT_SYMBOL(ath11k_info); 24 25 void ath11k_err(struct ath11k_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 trace_ath11k_log_err(ab, &vaf); 36 va_end(args); 37 } 38 EXPORT_SYMBOL(ath11k_err); 39 40 void ath11k_warn(struct ath11k_base *ab, const char *fmt, ...) 41 { 42 struct va_format vaf = { 43 .fmt = fmt, 44 }; 45 va_list args; 46 47 va_start(args, fmt); 48 vaf.va = &args; 49 dev_warn_ratelimited(ab->dev, "%pV", &vaf); 50 trace_ath11k_log_warn(ab, &vaf); 51 va_end(args); 52 } 53 EXPORT_SYMBOL(ath11k_warn); 54 55 #ifdef CONFIG_ATH11K_DEBUG 56 57 void __ath11k_dbg(struct ath11k_base *ab, enum ath11k_debug_mask mask, 58 const char *fmt, ...) 59 { 60 struct va_format vaf; 61 va_list args; 62 63 va_start(args, fmt); 64 65 vaf.fmt = fmt; 66 vaf.va = &args; 67 68 if (ath11k_debug_mask & mask) 69 dev_printk(KERN_DEBUG, ab->dev, "%s %pV", ath11k_dbg_str(mask), &vaf); 70 71 trace_ath11k_log_dbg(ab, mask, &vaf); 72 73 va_end(args); 74 } 75 EXPORT_SYMBOL(__ath11k_dbg); 76 77 void ath11k_dbg_dump(struct ath11k_base *ab, 78 enum ath11k_debug_mask mask, 79 const char *msg, const char *prefix, 80 const void *buf, size_t len) 81 { 82 char linebuf[256]; 83 size_t linebuflen; 84 const void *ptr; 85 86 if (ath11k_debug_mask & mask) { 87 if (msg) 88 __ath11k_dbg(ab, mask, "%s\n", msg); 89 90 for (ptr = buf; (ptr - buf) < len; ptr += 16) { 91 linebuflen = 0; 92 linebuflen += scnprintf(linebuf + linebuflen, 93 sizeof(linebuf) - linebuflen, 94 "%s%08x: ", 95 (prefix ? prefix : ""), 96 (unsigned int)(ptr - buf)); 97 hex_dump_to_buffer(ptr, len - (ptr - buf), 16, 1, 98 linebuf + linebuflen, 99 sizeof(linebuf) - linebuflen, true); 100 dev_printk(KERN_DEBUG, ab->dev, "%s\n", linebuf); 101 } 102 } 103 104 /* tracing code doesn't like null strings */ 105 trace_ath11k_log_dbg_dump(ab, msg ? msg : "", prefix ? prefix : "", 106 buf, len); 107 } 108 EXPORT_SYMBOL(ath11k_dbg_dump); 109 110 #endif /* CONFIG_ATH11K_DEBUG */ 111