/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* Copyright(c) 2019-2020  Realtek Corporation
 */

#ifndef __RTW89_DEBUG_H__
#define __RTW89_DEBUG_H__

#include "core.h"

enum rtw89_debug_mask {
	RTW89_DBG_TXRX = BIT(0),
	RTW89_DBG_RFK = BIT(1),
	RTW89_DBG_RFK_TRACK = BIT(2),
	RTW89_DBG_CFO = BIT(3),
	RTW89_DBG_TSSI = BIT(4),
	RTW89_DBG_TXPWR = BIT(5),
	RTW89_DBG_HCI = BIT(6),
	RTW89_DBG_RA = BIT(7),
	RTW89_DBG_REGD = BIT(8),
	RTW89_DBG_PHY_TRACK = BIT(9),
	RTW89_DBG_DIG = BIT(10),
	RTW89_DBG_SER = BIT(11),
	RTW89_DBG_FW = BIT(12),
	RTW89_DBG_BTC = BIT(13),
	RTW89_DBG_BF = BIT(14),
	RTW89_DBG_HW_SCAN = BIT(15),
	RTW89_DBG_SAR = BIT(16),
	RTW89_DBG_STATE = BIT(17),
	RTW89_DBG_WOW = BIT(18),
	RTW89_DBG_UL_TB = BIT(19),
	RTW89_DBG_CHAN = BIT(20),
	RTW89_DBG_ACPI = BIT(21),
	RTW89_DBG_EDCCA = BIT(22),

	RTW89_DBG_UNEXP = BIT(31),
};

enum rtw89_debug_mac_reg_sel {
	RTW89_DBG_SEL_MAC_00,
	RTW89_DBG_SEL_MAC_30,
	RTW89_DBG_SEL_MAC_40,
	RTW89_DBG_SEL_MAC_80,
	RTW89_DBG_SEL_MAC_C0,
	RTW89_DBG_SEL_MAC_E0,
	RTW89_DBG_SEL_BB,
	RTW89_DBG_SEL_IQK,
	RTW89_DBG_SEL_RFC,
};

#ifdef CONFIG_RTW89_DEBUGFS
void rtw89_debugfs_init(struct rtw89_dev *rtwdev);
#else
static inline void rtw89_debugfs_init(struct rtw89_dev *rtwdev) {}
#endif

#define rtw89_info(rtwdev, a...) dev_info((rtwdev)->dev, ##a)
#define rtw89_warn(rtwdev, a...) dev_warn((rtwdev)->dev, ##a)
#define rtw89_err(rtwdev, a...) dev_err((rtwdev)->dev, ##a)

#ifdef CONFIG_RTW89_DEBUGMSG
extern unsigned int rtw89_debug_mask;

__printf(3, 4)
void rtw89_debug(struct rtw89_dev *rtwdev, enum rtw89_debug_mask mask,
		 const char *fmt, ...);
static inline void rtw89_hex_dump(struct rtw89_dev *rtwdev,
				  enum rtw89_debug_mask mask,
				  const char *prefix_str,
				  const void *buf, size_t len)
{
	if (!(rtw89_debug_mask & mask))
		return;

	print_hex_dump_bytes(prefix_str, DUMP_PREFIX_OFFSET, buf, len);
}

static inline bool rtw89_debug_is_enabled(struct rtw89_dev *rtwdev,
					  enum rtw89_debug_mask mask)
{
	return !!(rtw89_debug_mask & mask);
}
#else
static inline void rtw89_debug(struct rtw89_dev *rtwdev,
			       enum rtw89_debug_mask mask,
			       const char *fmt, ...) {}
static inline void rtw89_hex_dump(struct rtw89_dev *rtwdev,
				  enum rtw89_debug_mask mask,
				  const char *prefix_str,
				  const void *buf, size_t len) {}
static inline bool rtw89_debug_is_enabled(struct rtw89_dev *rtwdev,
					  enum rtw89_debug_mask mask)
{
	return false;
}
#endif

#endif
