1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2019 - 2021 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef _PHL_DEBUG_H_ 16*4882a593Smuzhiyun #define _PHL_DEBUG_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* phl log level */ 19*4882a593Smuzhiyun enum { 20*4882a593Smuzhiyun _PHL_NONE_ = 0, 21*4882a593Smuzhiyun _PHL_ALWAYS_ = 1, 22*4882a593Smuzhiyun _PHL_ERR_ = 2, 23*4882a593Smuzhiyun _PHL_WARNING_ = 3, 24*4882a593Smuzhiyun _PHL_INFO_ = 4, 25*4882a593Smuzhiyun _PHL_DEBUG_ = 5, 26*4882a593Smuzhiyun _PHL_MAX_ = 6 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define PHL_PREFIX "PHL: " 30*4882a593Smuzhiyun #define HALPS_PREFIX "HALPS:" 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define PHL_DBG_OUTBUF(max_buff_len, used_len, buff_addr, remain_len, fmt, ...)\ 33*4882a593Smuzhiyun do { \ 34*4882a593Smuzhiyun u32 *used_len_tmp = &(used_len); \ 35*4882a593Smuzhiyun if (*used_len_tmp < max_buff_len) \ 36*4882a593Smuzhiyun *used_len_tmp += _os_snprintf(buff_addr, remain_len, fmt, ##__VA_ARGS__);\ 37*4882a593Smuzhiyun } while (0) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #ifdef CONFIG_RTW_DEBUG 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /*Define the tracing components*/ 42*4882a593Smuzhiyun #define COMP_PHL_DBG BIT0 /* For function call tracing. */ 43*4882a593Smuzhiyun #define COMP_PHL_RECV BIT1 44*4882a593Smuzhiyun #define COMP_PHL_XMIT BIT2 45*4882a593Smuzhiyun #define COMP_PHL_MAC BIT3 46*4882a593Smuzhiyun #define COMP_PHL_SOUND BIT4 47*4882a593Smuzhiyun #define COMP_PHL_WOW BIT5 48*4882a593Smuzhiyun #define COMP_PHL_TRIG BIT6 49*4882a593Smuzhiyun #define COMP_PHL_PKTOFLD BIT7 50*4882a593Smuzhiyun #define COMP_PHL_FSM BIT8 51*4882a593Smuzhiyun #define COMP_PHL_PS BIT9 52*4882a593Smuzhiyun #define COMP_PHL_PSTS BIT10 53*4882a593Smuzhiyun #define COMP_PHL_BB BIT11 54*4882a593Smuzhiyun #define COMP_PHL_RF BIT12 55*4882a593Smuzhiyun #define COMP_PHL_LED BIT13 56*4882a593Smuzhiyun #define COMP_PHL_MCC BIT14 57*4882a593Smuzhiyun #define COMP_PHL_P2PPS BIT15 58*4882a593Smuzhiyun #define COMP_PHL_ECSA BIT16 59*4882a593Smuzhiyun #define COMP_PHL_CMDDISP BIT17 60*4882a593Smuzhiyun #define COMP_PHL_BTC BIT18 61*4882a593Smuzhiyun #define COMP_PHL_TWT BIT19 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun extern u32 phl_log_components; 64*4882a593Smuzhiyun extern u8 phl_log_level; 65*4882a593Smuzhiyun #define DEBUG_MAX_NAME_LEN 50 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun struct dbg_alloc_buf { 68*4882a593Smuzhiyun _os_list list; 69*4882a593Smuzhiyun u8 file_name[DEBUG_MAX_NAME_LEN]; 70*4882a593Smuzhiyun u8 func_name[DEBUG_MAX_NAME_LEN]; 71*4882a593Smuzhiyun u32 line_num; 72*4882a593Smuzhiyun u32 buf_size; 73*4882a593Smuzhiyun u8 *buf_ptr; 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun struct dbg_mem_ctx { 77*4882a593Smuzhiyun _os_list alloc_buf_list; 78*4882a593Smuzhiyun _os_lock alloc_buf_list_lock; 79*4882a593Smuzhiyun u32 alloc_buf_cnt; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #undef PHL_TRACE 84*4882a593Smuzhiyun #define PHL_TRACE(comp, level, fmt, ...) \ 85*4882a593Smuzhiyun do {\ 86*4882a593Smuzhiyun if(((comp) & phl_log_components) && (level <= phl_log_level)) {\ 87*4882a593Smuzhiyun _os_dbgdump(PHL_PREFIX fmt, ##__VA_ARGS__);\ 88*4882a593Smuzhiyun } \ 89*4882a593Smuzhiyun } while (0) 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #undef PHL_DATA 92*4882a593Smuzhiyun #define PHL_DATA(comp, level, fmt, ...) \ 93*4882a593Smuzhiyun do {\ 94*4882a593Smuzhiyun if(((comp) & phl_log_components) && (level <= phl_log_level)) {\ 95*4882a593Smuzhiyun _os_dbgdump_c(fmt, ##__VA_ARGS__);\ 96*4882a593Smuzhiyun } \ 97*4882a593Smuzhiyun } while (0) 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #undef PHL_ASSERT 100*4882a593Smuzhiyun #define PHL_ASSERT(fmt, ...) \ 101*4882a593Smuzhiyun do {\ 102*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_ERR_, "ERROR " fmt, ##__VA_ARGS__);\ 103*4882a593Smuzhiyun _os_assert(true); \ 104*4882a593Smuzhiyun } while (0) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun #undef PHL_PRINT 108*4882a593Smuzhiyun #define PHL_PRINT(fmt, ...) \ 109*4882a593Smuzhiyun do {\ 110*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_ALWAYS_, fmt, ##__VA_ARGS__);\ 111*4882a593Smuzhiyun } while (0) 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #undef PHL_ERR 114*4882a593Smuzhiyun #define PHL_ERR(fmt, ...) \ 115*4882a593Smuzhiyun do {\ 116*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_ERR_, "ERROR " fmt, ##__VA_ARGS__);\ 117*4882a593Smuzhiyun } while (0) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun #undef PHL_WARN 120*4882a593Smuzhiyun #define PHL_WARN(fmt, ...) \ 121*4882a593Smuzhiyun do {\ 122*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_WARNING_, "WARN " fmt, ##__VA_ARGS__);\ 123*4882a593Smuzhiyun } while (0) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun #undef PHL_INFO 126*4882a593Smuzhiyun #define PHL_INFO(fmt, ...) \ 127*4882a593Smuzhiyun do {\ 128*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_INFO_, fmt, ##__VA_ARGS__);\ 129*4882a593Smuzhiyun } while (0) 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #undef PHL_DBG 132*4882a593Smuzhiyun #define PHL_DBG(fmt, ...) \ 133*4882a593Smuzhiyun do {\ 134*4882a593Smuzhiyun PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, fmt, ##__VA_ARGS__);\ 135*4882a593Smuzhiyun } while (0) 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun #define FUNCIN() PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Enter %s\n", __FUNCTION__) 138*4882a593Smuzhiyun #define FUNCOUT() PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Leave %s\n", __FUNCTION__) 139*4882a593Smuzhiyun #define FUNCIN_WSTS(_sts) PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Enter with 0x%08X %s\n", _sts, __FUNCTION__) 140*4882a593Smuzhiyun #define FUNCOUT_WSTS(_sts) PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Leave with 0x%08X %s\n", _sts, __FUNCTION__) 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun void debug_dump_data(u8 *buf, u32 buf_len, const char *prefix); 143*4882a593Smuzhiyun void rt_alloc_dbg_buf(void *phl, u8 *buf_ptr, u32 buf_size, 144*4882a593Smuzhiyun const u8 *file_name, u32 line_num, const u8 *func_name); 145*4882a593Smuzhiyun void rt_free_dbg_buf(void *phl, u8 *buf_ptr, u32 buf_size, 146*4882a593Smuzhiyun const u8 *file_name, u32 line_num, const u8 *func_name); 147*4882a593Smuzhiyun void rt_mem_dbg_init(void *phl); 148*4882a593Smuzhiyun void rt_mem_dbg_deinit(void *phl); 149*4882a593Smuzhiyun u32 rtw_phl_dbg_ctrl_comp(u8 ctrl, u32 comp_bit); 150*4882a593Smuzhiyun void debug_dump_mac_address(u8 *mac_addr); 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #define phl_ops_error_msg(ops_fun) \ 153*4882a593Smuzhiyun PHL_ERR("### %s - Please hook phl_hci_ops.%s ###\n", __func__, ops_fun) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #define hal_error_msg(ops_fun) \ 156*4882a593Smuzhiyun PHL_PRINT("### %s - Error : Please hook hal_ops.%s ###\n", __FUNCTION__, ops_fun) 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #else /* CONFIG_RTW_DEBUG */ 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define PHL_TRACE(comp, level, fmt, ...) 161*4882a593Smuzhiyun #define PHL_PRINT(fmt, ...) 162*4882a593Smuzhiyun #define PHL_ERR(fmt, ...) 163*4882a593Smuzhiyun #define PHL_WARN(fmt, ...) 164*4882a593Smuzhiyun #define PHL_INFO(fmt, ...) 165*4882a593Smuzhiyun #define PHL_DBG(fmt, ...) 166*4882a593Smuzhiyun #define PHL_DATA(fmt, ...) 167*4882a593Smuzhiyun #define PHL_ASSERT(fmt, ...) 168*4882a593Smuzhiyun #define FUNCIN() 169*4882a593Smuzhiyun #define FUNCOUT() 170*4882a593Smuzhiyun #define FUNCIN_WSTS(_sts) 171*4882a593Smuzhiyun #define FUNCOUT_WSTS(_sts) 172*4882a593Smuzhiyun #define debug_dump_data(_buf, _buf_len, _prefix) 173*4882a593Smuzhiyun #define debug_dump_mac_address(_mac_addr) 174*4882a593Smuzhiyun #define rt_alloc_dbg_buf(_phl, _buf, _buf_size, _file_name, _line_num, \ 175*4882a593Smuzhiyun _func_name) 176*4882a593Smuzhiyun #define rt_free_dbg_buf(_phl, _buf, _buf_size, _file_name, _line_num, \ 177*4882a593Smuzhiyun _func_name) 178*4882a593Smuzhiyun #define rt_mem_dbg_init(_phl) 179*4882a593Smuzhiyun #define rt_mem_dbg_deinit(_phl) 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define rtw_phl_dbg_ctrl_comp(_ctrl, _comp_bit) 0 182*4882a593Smuzhiyun #define phl_ops_error_msg(ops_fun) do {} while (0) 183*4882a593Smuzhiyun #define hal_error_msg(ops_fun) do {} while (0) 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun #endif /* CONFIG_RTW_DEBUG */ 186*4882a593Smuzhiyun #endif /* _PHL_DEBUG_H_ */ 187