18e93258fSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 28e93258fSBjoern A. Zeeb /* Copyright(c) 2019-2020 Realtek Corporation 38e93258fSBjoern A. Zeeb */ 48e93258fSBjoern A. Zeeb 58e93258fSBjoern A. Zeeb #ifndef __RTW89_DEBUG_H__ 68e93258fSBjoern A. Zeeb #define __RTW89_DEBUG_H__ 78e93258fSBjoern A. Zeeb 88e93258fSBjoern A. Zeeb #include "core.h" 98e93258fSBjoern A. Zeeb 108e93258fSBjoern A. Zeeb #if defined(__FreeBSD__) 118e93258fSBjoern A. Zeeb #include <linux/printk.h> 128e93258fSBjoern A. Zeeb #ifndef DUMP_PREFIX_OFFSET 138e93258fSBjoern A. Zeeb #define DUMP_PREFIX_OFFSET 0 148e93258fSBjoern A. Zeeb #endif 158e93258fSBjoern A. Zeeb #endif 168e93258fSBjoern A. Zeeb 178e93258fSBjoern A. Zeeb enum rtw89_debug_mask { 188e93258fSBjoern A. Zeeb RTW89_DBG_TXRX = BIT(0), 198e93258fSBjoern A. Zeeb RTW89_DBG_RFK = BIT(1), 208e93258fSBjoern A. Zeeb RTW89_DBG_RFK_TRACK = BIT(2), 218e93258fSBjoern A. Zeeb RTW89_DBG_CFO = BIT(3), 228e93258fSBjoern A. Zeeb RTW89_DBG_TSSI = BIT(4), 238e93258fSBjoern A. Zeeb RTW89_DBG_TXPWR = BIT(5), 248e93258fSBjoern A. Zeeb RTW89_DBG_HCI = BIT(6), 258e93258fSBjoern A. Zeeb RTW89_DBG_RA = BIT(7), 268e93258fSBjoern A. Zeeb RTW89_DBG_REGD = BIT(8), 278e93258fSBjoern A. Zeeb RTW89_DBG_PHY_TRACK = BIT(9), 288e93258fSBjoern A. Zeeb RTW89_DBG_DIG = BIT(10), 298e93258fSBjoern A. Zeeb RTW89_DBG_SER = BIT(11), 308e93258fSBjoern A. Zeeb RTW89_DBG_FW = BIT(12), 318e93258fSBjoern A. Zeeb RTW89_DBG_BTC = BIT(13), 328e93258fSBjoern A. Zeeb RTW89_DBG_BF = BIT(14), 338e93258fSBjoern A. Zeeb RTW89_DBG_HW_SCAN = BIT(15), 348e93258fSBjoern A. Zeeb RTW89_DBG_SAR = BIT(16), 35e2340276SBjoern A. Zeeb RTW89_DBG_STATE = BIT(17), 36e2340276SBjoern A. Zeeb RTW89_DBG_WOW = BIT(18), 37e2340276SBjoern A. Zeeb RTW89_DBG_UL_TB = BIT(19), 38e2340276SBjoern A. Zeeb RTW89_DBG_CHAN = BIT(20), 39*6d67aabdSBjoern A. Zeeb RTW89_DBG_ACPI = BIT(21), 40*6d67aabdSBjoern A. Zeeb RTW89_DBG_EDCCA = BIT(22), 418e93258fSBjoern A. Zeeb 428e93258fSBjoern A. Zeeb #if defined(__FreeBSD__) 438e93258fSBjoern A. Zeeb RTW89_DBG_IO_RW = BIT(30), 448e93258fSBjoern A. Zeeb #endif 458e93258fSBjoern A. Zeeb RTW89_DBG_UNEXP = BIT(31), 468e93258fSBjoern A. Zeeb }; 478e93258fSBjoern A. Zeeb 488e93258fSBjoern A. Zeeb enum rtw89_debug_mac_reg_sel { 498e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_00, 508e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_30, 518e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_40, 528e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_80, 538e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_C0, 548e93258fSBjoern A. Zeeb RTW89_DBG_SEL_MAC_E0, 558e93258fSBjoern A. Zeeb RTW89_DBG_SEL_BB, 568e93258fSBjoern A. Zeeb RTW89_DBG_SEL_IQK, 578e93258fSBjoern A. Zeeb RTW89_DBG_SEL_RFC, 588e93258fSBjoern A. Zeeb }; 598e93258fSBjoern A. Zeeb 608e93258fSBjoern A. Zeeb #ifdef CONFIG_RTW89_DEBUGFS 618e93258fSBjoern A. Zeeb void rtw89_debugfs_init(struct rtw89_dev *rtwdev); 628e93258fSBjoern A. Zeeb #else 638e93258fSBjoern A. Zeeb static inline void rtw89_debugfs_init(struct rtw89_dev *rtwdev) {} 648e93258fSBjoern A. Zeeb #endif 658e93258fSBjoern A. Zeeb 668e93258fSBjoern A. Zeeb #define rtw89_info(rtwdev, a...) dev_info((rtwdev)->dev, ##a) 678e93258fSBjoern A. Zeeb #define rtw89_warn(rtwdev, a...) dev_warn((rtwdev)->dev, ##a) 688e93258fSBjoern A. Zeeb #define rtw89_err(rtwdev, a...) dev_err((rtwdev)->dev, ##a) 698e93258fSBjoern A. Zeeb 708e93258fSBjoern A. Zeeb #ifdef CONFIG_RTW89_DEBUGMSG 718e93258fSBjoern A. Zeeb extern unsigned int rtw89_debug_mask; 728e93258fSBjoern A. Zeeb 738e93258fSBjoern A. Zeeb __printf(3, 4) 74*6d67aabdSBjoern A. Zeeb void rtw89_debug(struct rtw89_dev *rtwdev, enum rtw89_debug_mask mask, 758e93258fSBjoern A. Zeeb const char *fmt, ...); 768e93258fSBjoern A. Zeeb static inline void rtw89_hex_dump(struct rtw89_dev *rtwdev, 778e93258fSBjoern A. Zeeb enum rtw89_debug_mask mask, 788e93258fSBjoern A. Zeeb const char *prefix_str, 798e93258fSBjoern A. Zeeb const void *buf, size_t len) 808e93258fSBjoern A. Zeeb { 818e93258fSBjoern A. Zeeb if (!(rtw89_debug_mask & mask)) 828e93258fSBjoern A. Zeeb return; 838e93258fSBjoern A. Zeeb 848e93258fSBjoern A. Zeeb print_hex_dump_bytes(prefix_str, DUMP_PREFIX_OFFSET, buf, len); 858e93258fSBjoern A. Zeeb } 86*6d67aabdSBjoern A. Zeeb 87*6d67aabdSBjoern A. Zeeb static inline bool rtw89_debug_is_enabled(struct rtw89_dev *rtwdev, 88*6d67aabdSBjoern A. Zeeb enum rtw89_debug_mask mask) 89*6d67aabdSBjoern A. Zeeb { 90*6d67aabdSBjoern A. Zeeb return !!(rtw89_debug_mask & mask); 91*6d67aabdSBjoern A. Zeeb } 928e93258fSBjoern A. Zeeb #else 938e93258fSBjoern A. Zeeb static inline void rtw89_debug(struct rtw89_dev *rtwdev, 948e93258fSBjoern A. Zeeb enum rtw89_debug_mask mask, 958e93258fSBjoern A. Zeeb const char *fmt, ...) {} 968e93258fSBjoern A. Zeeb static inline void rtw89_hex_dump(struct rtw89_dev *rtwdev, 978e93258fSBjoern A. Zeeb enum rtw89_debug_mask mask, 988e93258fSBjoern A. Zeeb const char *prefix_str, 998e93258fSBjoern A. Zeeb const void *buf, size_t len) {} 100*6d67aabdSBjoern A. Zeeb static inline bool rtw89_debug_is_enabled(struct rtw89_dev *rtwdev, 101*6d67aabdSBjoern A. Zeeb enum rtw89_debug_mask mask) 102*6d67aabdSBjoern A. Zeeb { 103*6d67aabdSBjoern A. Zeeb return false; 104*6d67aabdSBjoern A. Zeeb } 1058e93258fSBjoern A. Zeeb #endif 1068e93258fSBjoern A. Zeeb 1078e93258fSBjoern A. Zeeb #endif 108