mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
- support Android-14 - support Linux kernel 6.9 - support 6G regulation - support Thermal protection - support TX shortcut to reduce CPU loading - fix some coverity issues - Use RTW regulatory version rtk_8852CE_M.2_2230-67-52 - default enable con-current and MCC Bug 4667769 Bug 4667981 Change-Id: Iee069ecdd1f00a0b78285d0a4ef5778ed9ace478 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3195601 Tested-by: Shobek Attupurath <sattupurath@nvidia.com> Reviewed-by: Revanth Kumar Uppala <ruppala@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Ashutosh Jha <ajha@nvidia.com>
346 lines
9.6 KiB
C
346 lines
9.6 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright(c) 2019 - 2024 Realtek Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
*****************************************************************************/
|
|
#ifndef _PHL_DEBUG_H_
|
|
#define _PHL_DEBUG_H_
|
|
|
|
/* phl log level */
|
|
#define _PHL_NONE_ 0
|
|
#define _PHL_ALWAYS_ 1
|
|
#define _PHL_ERR_ 2
|
|
#define _PHL_WARNING_ 3
|
|
#define _PHL_INFO_ 4
|
|
#define _PHL_DEBUG_ 5
|
|
#define _PHL_MAX_ 6
|
|
|
|
#ifndef PHL_LOG_LEVEL
|
|
#define PHL_LOG_LEVEL _PHL_DEBUG_
|
|
#endif
|
|
|
|
#define PHL_PREFIX "PHL: "
|
|
#define HALPS_PREFIX "HALPS:"
|
|
|
|
#define PHL_DBG_OUTBUF(max_buff_len, used_len, buff_addr, remain_len, fmt, ...)\
|
|
do { \
|
|
u32 *used_len_tmp = &(used_len); \
|
|
if (*used_len_tmp < max_buff_len) \
|
|
*used_len_tmp += _os_snprintf(buff_addr, remain_len, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#ifdef CONFIG_RTW_DEBUG
|
|
|
|
/*Define the tracing components*/
|
|
#define COMP_PHL_DBG BIT0 /* For function call tracing. */
|
|
#define COMP_PHL_RECV BIT1
|
|
#define COMP_PHL_XMIT BIT2
|
|
#define COMP_PHL_MAC BIT3
|
|
#define COMP_PHL_SOUND BIT4
|
|
#define COMP_PHL_WOW BIT5
|
|
#define COMP_PHL_TRIG BIT6
|
|
#define COMP_PHL_PKTOFLD BIT7
|
|
#define COMP_PHL_FSM BIT8
|
|
#define COMP_PHL_PS BIT9
|
|
#define COMP_PHL_PSTS BIT10
|
|
#define COMP_PHL_BB BIT11
|
|
#define COMP_PHL_RF BIT12
|
|
#define COMP_PHL_LED BIT13
|
|
#define COMP_PHL_MCC BIT14
|
|
#define COMP_PHL_P2PPS BIT15
|
|
#define COMP_PHL_ECSA BIT16
|
|
#define COMP_PHL_CMDDISP BIT17
|
|
#define COMP_PHL_BTC BIT18
|
|
#define COMP_PHL_TWT BIT19
|
|
#define COMP_PHL_OFDMA BIT20
|
|
#define COMP_PHL_GROUP BIT21
|
|
#define COMP_PHL_MR_COEX BIT22
|
|
#define COMP_PHL_CHINFO BIT23
|
|
#define COMP_PHL_SNIFF BIT24
|
|
|
|
|
|
enum PHL_DBG_LEVEL {
|
|
_PHL_DBG = 0,
|
|
_PHL_RECV,
|
|
_PHL_XMIT,
|
|
_PHL_MAC,
|
|
_PHL_SOUND,
|
|
_PHL_WOW,
|
|
_PHL_TRIG,
|
|
_PHL_PKTOFLD,
|
|
_PHL_FSM,
|
|
_PHL_PS,
|
|
_PHL_PSTS,
|
|
_PHL_TWT,
|
|
_PHL_OFDMA,
|
|
_PHL_GROUP,
|
|
};
|
|
|
|
struct phl_dbg_comp_list {
|
|
char *name;
|
|
enum PHL_DBG_LEVEL level;
|
|
u32 level_comp;
|
|
};
|
|
|
|
extern u32 phl_log_components;
|
|
extern u8 phl_log_level;
|
|
#define DEBUG_PHL_MAX_NAME_LEN 50
|
|
|
|
struct dbg_alloc_buf {
|
|
_os_list list;
|
|
u8 file_name[DEBUG_PHL_MAX_NAME_LEN];
|
|
u8 func_name[DEBUG_PHL_MAX_NAME_LEN];
|
|
u32 line_num;
|
|
u32 buf_size;
|
|
u8 *buf_ptr;
|
|
};
|
|
|
|
struct dbg_mem_ctx {
|
|
_os_list alloc_buf_list;
|
|
_os_lock alloc_buf_list_lock;
|
|
u32 alloc_buf_cnt;
|
|
};
|
|
|
|
#if PHL_LOG_LEVEL > _PHL_NONE_
|
|
#undef PHL_TRACE
|
|
#define PHL_TRACE(comp, level, fmt, ...) \
|
|
do {\
|
|
if(((comp) & phl_log_components) && ((level) <= phl_log_level)) {\
|
|
_os_dbgdump(PHL_PREFIX fmt, ##__VA_ARGS__);\
|
|
} \
|
|
} while (0)
|
|
|
|
#undef PHL_TRACE_LMT
|
|
#define PHL_TRACE_LMT(comp, level, fmt, ...) \
|
|
do {\
|
|
if(((comp) & phl_log_components) && (level <= phl_log_level)) {\
|
|
_os_dbgdump_lmt(PHL_PREFIX fmt, ##__VA_ARGS__);\
|
|
} \
|
|
} while (0)
|
|
|
|
#undef PHL_DATA
|
|
#define PHL_DATA(comp, level, fmt, ...) \
|
|
do {\
|
|
if(((comp) & phl_log_components) && (level <= phl_log_level)) {\
|
|
_os_dbgdump_c(fmt, ##__VA_ARGS__);\
|
|
} \
|
|
} while (0)
|
|
|
|
#undef PHL_DATA_LMT
|
|
#define PHL_DATA_LMT(comp, level, fmt, ...) \
|
|
do {\
|
|
if(((comp) & phl_log_components) && (level <= phl_log_level)) {\
|
|
_os_dbgdump_c_lmt(fmt, ##__VA_ARGS__);\
|
|
} \
|
|
} while (0)
|
|
|
|
#undef PHL_ASSERT
|
|
#define PHL_ASSERT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_ERR_, "ERROR " fmt, ##__VA_ARGS__);\
|
|
_os_assert(true); \
|
|
} while (0)
|
|
#else /* PHL_LOG_LEVEL <= _PHL_NONE_ */
|
|
#define PHL_TRACE(comp, level, fmt, ...)
|
|
#define PHL_TRACE_LMT(comp, level, fmt, ...)
|
|
#define PHL_DATA(comp, level, fmt, ...)
|
|
#define PHL_DATA_LMT(comp, level, fmt, ...)
|
|
#define PHL_ASSERT(fmt, ...)
|
|
#endif /* PHL_LOG_LEVEL <= _PHL_NONE_ */
|
|
|
|
#if PHL_LOG_LEVEL >= _PHL_ALWAYS_
|
|
#undef PHL_PRINT
|
|
#define PHL_PRINT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_ALWAYS_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#undef PHL_PRINT_LMT
|
|
#define PHL_PRINT_LMT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE_LMT(COMP_PHL_DBG, _PHL_ALWAYS_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
#else /* PHL_LOG_LEVEL < _PHL_ALWAYS_ */
|
|
#define PHL_PRINT(fmt, ...)
|
|
#define PHL_PRINT_LMT(fmt, ...)
|
|
#endif /* PHL_LOG_LEVEL < _PHL_ALWAYS_ */
|
|
|
|
#if PHL_LOG_LEVEL >= _PHL_ERR_
|
|
#undef PHL_ERR
|
|
#define PHL_ERR(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_ERR_, "ERROR " fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#undef PHL_ERR_LMT
|
|
#define PHL_ERR_LMT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE_LMT(COMP_PHL_DBG, _PHL_ERR_, "ERROR " fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
#else /* PHL_LOG_LEVEL < _PHL_ERR_ */
|
|
#define PHL_ERR(fmt, ...)
|
|
#define PHL_ERR_LMT(fmt, ...)
|
|
#endif /* PHL_LOG_LEVEL < _PHL_ERR_ */
|
|
|
|
#if PHL_LOG_LEVEL >= _PHL_WARNING_
|
|
#undef PHL_WARN
|
|
#define PHL_WARN(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_WARNING_, "WARN " fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#undef PHL_WARN_LMT
|
|
#define PHL_WARN_LMT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE_LMT(COMP_PHL_DBG, _PHL_WARNING_, "WARN " fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
#else /* PHL_LOG_LEVEL < _PHL_WARNING_ */
|
|
#define PHL_WARN(fmt, ...)
|
|
#define PHL_WARN_LMT(fmt, ...)
|
|
#endif /* PHL_LOG_LEVEL < _PHL_WARNING_ */
|
|
|
|
#if PHL_LOG_LEVEL >= _PHL_INFO_
|
|
#undef PHL_INFO
|
|
#define PHL_INFO(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_INFO_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#undef PHL_INFO_LMT
|
|
#define PHL_INFO_LMT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE_LMT(COMP_PHL_DBG, _PHL_INFO_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
#else /* PHL_LOG_LEVEL < _PHL_INFO_ */
|
|
#define PHL_INFO(fmt, ...)
|
|
#define PHL_INFO_LMT(fmt, ...)
|
|
#endif /* PHL_LOG_LEVEL < _PHL_INFO_ */
|
|
|
|
#if PHL_LOG_LEVEL >= _PHL_DEBUG_
|
|
#undef PHL_DBG
|
|
#define PHL_DBG(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#undef PHL_DBG_LMT
|
|
#define PHL_DBG_LMT(fmt, ...) \
|
|
do {\
|
|
PHL_TRACE_LMT(COMP_PHL_DBG, _PHL_DEBUG_, fmt, ##__VA_ARGS__);\
|
|
} while (0)
|
|
|
|
#define FUNCIN() PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Enter %s\n", __FUNCTION__)
|
|
#define FUNCOUT() PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Leave %s\n", __FUNCTION__)
|
|
#define FUNCIN_WSTS(_sts) PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Enter with 0x%08X %s\n", _sts, __FUNCTION__)
|
|
#define FUNCOUT_WSTS(_sts) PHL_TRACE(COMP_PHL_DBG, _PHL_DEBUG_, "Leave with 0x%08X %s\n", _sts, __FUNCTION__)
|
|
#else /* PHL_LOG_LEVEL < _PHL_DEBUG_ */
|
|
#define PHL_DBG(fmt, ...)
|
|
#define PHL_DBG_LMT(fmt, ...)
|
|
#define FUNCIN()
|
|
#define FUNCOUT()
|
|
#define FUNCIN_WSTS(_sts)
|
|
#define FUNCOUT_WSTS(_sts)
|
|
#endif /* PHL_LOG_LEVEL < _PHL_DEBUG_ */
|
|
|
|
void debug_dump_buf(u8 *buf, u16 buf_len, const char *prefix);
|
|
void debug_dump_data(u8 *buf, u32 buf_len, const char *prefix);
|
|
void rt_alloc_dbg_buf(void *phl, u8 *buf_ptr, u32 buf_size,
|
|
const u8 *file_name, u32 line_num, const u8 *func_name);
|
|
void rt_free_dbg_buf(void *phl, u8 *buf_ptr, u32 buf_size,
|
|
const u8 *file_name, u32 line_num, const u8 *func_name);
|
|
void rt_mem_dbg_init(void *phl);
|
|
void rt_mem_dbg_deinit(void *phl);
|
|
u32 rtw_phl_dbg_ctrl_comp(u8 ctrl, u32 para_dbg);
|
|
void debug_dump_mac_address(u8 *mac_addr);
|
|
|
|
#define phl_ops_error_msg(ops_fun) \
|
|
PHL_ERR("### %s - Please hook phl_hci_ops.%s ###\n", __func__, ops_fun)
|
|
|
|
#define hal_error_msg(ops_fun) \
|
|
PHL_PRINT("### %s - Error : Please hook hal_ops.%s ###\n", __FUNCTION__, ops_fun)
|
|
|
|
#else /* CONFIG_RTW_DEBUG */
|
|
|
|
#define PHL_TRACE(comp, level, fmt, ...)
|
|
#define PHL_TRACE_LMT(comp, level, fmt, ...)
|
|
#define PHL_PRINT(fmt, ...)
|
|
#define PHL_PRINT_LMT(fmt, ...)
|
|
#define PHL_ERR(fmt, ...)
|
|
#define PHL_ERR_LMT(fmt, ...)
|
|
#define PHL_WARN(fmt, ...)
|
|
#define PHL_WARN_LMT(fmt, ...)
|
|
#define PHL_INFO(fmt, ...)
|
|
#define PHL_INFO_LMT(fmt, ...)
|
|
#define PHL_DBG(fmt, ...)
|
|
#define PHL_DBG_LMT(fmt, ...)
|
|
#define PHL_DATA(fmt, ...)
|
|
#define PHL_ASSERT(fmt, ...)
|
|
#define FUNCIN()
|
|
#define FUNCOUT()
|
|
#define FUNCIN_WSTS(_sts)
|
|
#define FUNCOUT_WSTS(_sts)
|
|
#define debug_dump_buf(_buf, _buf_len, _prefix)
|
|
#define debug_dump_data(_buf, _buf_len, _prefix)
|
|
#define debug_dump_mac_address(_mac_addr)
|
|
#define rt_alloc_dbg_buf(_phl, _buf, _buf_size, _file_name, _line_num, \
|
|
_func_name)
|
|
#define rt_free_dbg_buf(_phl, _buf, _buf_size, _file_name, _line_num, \
|
|
_func_name)
|
|
#define rt_mem_dbg_init(_phl)
|
|
#define rt_mem_dbg_deinit(_phl)
|
|
|
|
#define rtw_phl_dbg_ctrl_comp(_ctrl, _comp_bit) 0
|
|
#define phl_ops_error_msg(ops_fun) do {} while (0)
|
|
#define hal_error_msg(ops_fun) do {} while (0)
|
|
|
|
#endif /* CONFIG_RTW_DEBUG */
|
|
|
|
#ifdef CONFIG_RTW_MIRROR_DUMP
|
|
enum {
|
|
_PHL_MIR_CAT_H2C = 0,
|
|
_PHL_MIR_CAT_C2H,
|
|
_PHL_MIR_CAT_PKT,
|
|
_PHL_MIR_CAT_TXD,
|
|
_PHL_MIR_CAT_RXD,
|
|
_PHL_MIR_CAT_MAX
|
|
};
|
|
|
|
enum {
|
|
PHL_MIR_CFG_H2C = 0,
|
|
PHL_MIR_CFG_C2H,
|
|
PHL_MIR_CFG_TXD,
|
|
PHL_MIR_CFG_RXD,
|
|
PHL_MIR_CFG_TX,
|
|
PHL_MIR_CFG_RX
|
|
};
|
|
|
|
void phl_mirror_dump_h2c(void *phl, struct rtw_h2c_pkt *pkt);
|
|
void phl_mirror_dump_c2h(void *phl, struct rtw_pkt_buf_list *pkt);
|
|
void phl_mirror_dump_wd(void *phl, u8 txch, u8 *wd, u32 wd_len);
|
|
void phl_mirror_dump_rxd(void *phl, u8 *rxd, u32 rxd_len);
|
|
#endif
|
|
|
|
void rtw_phl_update_io_dump_allow(void *phl, bool io_dump_allow);
|
|
void rtw_phl_update_fw_log_dump_allow(void *phl, bool fw_log_dump_allow);
|
|
|
|
#ifdef DBG_MONITOR_TIME
|
|
void phl_fun_monitor_start(u32 *start_t, bool show_caller, const char *caller);
|
|
void phl_fun_monitor_end(struct rtw_phl_com_t *phl_com, u32 *start_t, enum phl_time_flags flag, const char *caller);
|
|
|
|
#define PHL_FUN_MON_START(start_t) phl_fun_monitor_start(start_t, false, __FUNCTION__)
|
|
#define PHL_FUNC_MON_END(phl_com, start_t, flag) phl_fun_monitor_end(phl_com, start_t, flag, __FUNCTION__)
|
|
|
|
void phl_dump_func_latency(struct rtw_phl_com_t *phl_com);
|
|
#endif /* DBG_MONITOR_TIME */
|
|
|
|
#endif /* _PHL_DEBUG_H_ */
|