mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

There might be instances where ath12k_dbg() is needed, but access to struct ath12k_base (ab) is not readily available. To address this, add support to print the debug message using printk() when ab is not present. To avoid the need to explicitly pass NULL each time, introduce a new macro ath12k_generic_dbg() which resolves to ath12k_dbg() with ab set to NULL. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00130-QCAHKSWPL_SILICONZ-1.97421.5 # Nicolas Escande Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Signed-off-by: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com> Tested-by: Nicolas Escande <nico.escande@gmail.com> Link: https://patch.msgid.link/20250204-unlink_link_arvif_from_chanctx-v2-2-764fb5973c1a@oss.qualcomm.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
104 lines
2.1 KiB
C
104 lines
2.1 KiB
C
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
/*
|
|
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
#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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif /* CONFIG_ATH12K_DEBUG */
|