root/drivers/net/wireless/ath/ath12k/debug.c
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
 *
 */

#include <linux/vmalloc.h>
#include "core.h"
#include "debug.h"

void ath12k_info(struct ath12k_base *ab, const char *fmt, ...)
{
        struct va_format vaf = {
                .fmt = fmt,
        };
        va_list args;

        va_start(args, fmt);
        vaf.va = &args;
        dev_info(ab->dev, "%pV", &vaf);
        /* TODO: Trace the log */
        va_end(args);
}
EXPORT_SYMBOL(ath12k_info);

void ath12k_err(struct ath12k_base *ab, const char *fmt, ...)
{
        struct va_format vaf = {
                .fmt = fmt,
        };
        va_list args;

        va_start(args, fmt);
        vaf.va = &args;
        dev_err(ab->dev, "%pV", &vaf);
        /* TODO: Trace the log */
        va_end(args);
}
EXPORT_SYMBOL(ath12k_err);

void __ath12k_warn(struct device *dev, const char *fmt, ...)
{
        struct va_format vaf = {
                .fmt = fmt,
        };
        va_list args;

        va_start(args, fmt);
        vaf.va = &args;
        dev_warn_ratelimited(dev, "%pV", &vaf);
        /* TODO: Trace the log */
        va_end(args);
}
EXPORT_SYMBOL(__ath12k_warn);

#ifdef CONFIG_ATH12K_DEBUG

void __ath12k_dbg(struct ath12k_base *ab, enum ath12k_debug_mask mask,
                  const char *fmt, ...)
{
        struct va_format vaf;
        va_list args;

        va_start(args, fmt);

        vaf.fmt = fmt;
        vaf.va = &args;

        if (likely(ab))
                dev_printk(KERN_DEBUG, ab->dev, "%pV", &vaf);
        else
                printk(KERN_DEBUG "ath12k: %pV", &vaf);

        /* TODO: trace log */

        va_end(args);
}
EXPORT_SYMBOL(__ath12k_dbg);

void ath12k_dbg_dump(struct ath12k_base *ab,
                     enum ath12k_debug_mask mask,
                     const char *msg, const char *prefix,
                     const void *buf, size_t len)
{
        char linebuf[256];
        size_t linebuflen;
        const void *ptr;

        if (ath12k_debug_mask & mask) {
                if (msg)
                        __ath12k_dbg(ab, mask, "%s\n", msg);

                for (ptr = buf; (ptr - buf) < len; ptr += 16) {
                        linebuflen = 0;
                        linebuflen += scnprintf(linebuf + linebuflen,
                                                sizeof(linebuf) - linebuflen,
                                                "%s%08x: ",
                                                (prefix ? prefix : ""),
                                                (unsigned int)(ptr - buf));
                        hex_dump_to_buffer(ptr, len - (ptr - buf), 16, 1,
                                           linebuf + linebuflen,
                                           sizeof(linebuf) - linebuflen, true);
                        dev_dbg(ab->dev, "%s\n", linebuf);
                }
        }
}
EXPORT_SYMBOL(ath12k_dbg_dump);

#endif /* CONFIG_ATH12K_DEBUG */