/* 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);
void rtw89_debugfs_deinit(struct rtw89_dev *rtwdev);
#else
static inline void rtw89_debugfs_init(struct rtw89_dev *rtwdev) {}
static inline void rtw89_debugfs_deinit(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
