cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

debug.c (2351B)


      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
     10void 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}
     23EXPORT_SYMBOL(ath11k_info);
     24
     25void 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}
     38EXPORT_SYMBOL(ath11k_err);
     39
     40void 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}
     53EXPORT_SYMBOL(ath11k_warn);
     54
     55#ifdef CONFIG_ATH11K_DEBUG
     56
     57void __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, "%pV", &vaf);
     70
     71	trace_ath11k_log_dbg(ab, mask, &vaf);
     72
     73	va_end(args);
     74}
     75EXPORT_SYMBOL(__ath11k_dbg);
     76
     77void 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}
    108EXPORT_SYMBOL(ath11k_dbg_dump);
    109
    110#endif /* CONFIG_ATH11K_DEBUG */