#include <linux/vmalloc.h>
#include "coex.h"
#include "debug.h"
#include "fw.h"
#include "mac.h"
#include "pci.h"
#include "ps.h"
#include "reg.h"
#include "sar.h"
#ifdef CONFIG_RTW89_DEBUGMSG
unsigned int rtw89_debug_mask;
EXPORT_SYMBOL(…);
module_param_named(debug_mask, rtw89_debug_mask, uint, 0644);
MODULE_PARM_DESC(…) …;
#endif
#ifdef CONFIG_RTW89_DEBUGFS
struct rtw89_debugfs_priv { … };
struct rtw89_debugfs { … };
static const u16 rtw89_rate_info_bw_to_mhz_map[] = …;
static u16 rtw89_rate_info_bw_to_mhz(enum rate_info_bw bw)
{ … }
static int rtw89_debugfs_single_show(struct seq_file *m, void *v)
{ … }
static ssize_t rtw89_debugfs_single_write(struct file *filp,
const char __user *buffer,
size_t count, loff_t *loff)
{ … }
static ssize_t rtw89_debugfs_seq_file_write(struct file *filp,
const char __user *buffer,
size_t count, loff_t *loff)
{ … }
static int rtw89_debugfs_single_open(struct inode *inode, struct file *filp)
{ … }
static int rtw89_debugfs_close(struct inode *inode, struct file *filp)
{ … }
static const struct file_operations file_ops_single_r = …;
static const struct file_operations file_ops_common_rw = …;
static const struct file_operations file_ops_single_w = …;
static ssize_t
rtw89_debug_priv_read_reg_select(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_debug_priv_read_reg_get(struct seq_file *m, void *v)
{ … }
static ssize_t rtw89_debug_priv_write_reg_set(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static ssize_t
rtw89_debug_priv_read_rf_select(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_debug_priv_read_rf_get(struct seq_file *m, void *v)
{ … }
static ssize_t rtw89_debug_priv_write_rf_set(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_debug_priv_rf_reg_dump_get(struct seq_file *m, void *v)
{ … }
struct txpwr_ent { … };
struct txpwr_map { … };
#define __GEN_TXPWR_ENT_NESTED(_e) …
#define __GEN_TXPWR_ENT0(_t) …
#define __GEN_TXPWR_ENT2(_t, _e0, _e1) …
#define __GEN_TXPWR_ENT4(_t, _e0, _e1, _e2, _e3) …
#define __GEN_TXPWR_ENT8(_t, _e0, _e1, _e2, _e3, _e4, _e5, _e6, _e7) …
static const struct txpwr_ent __txpwr_ent_byr_ax[] = …;
static_assert(…);
static const struct txpwr_map __txpwr_map_byr_ax = …;
static const struct txpwr_ent __txpwr_ent_lmt_ax[] = …;
static_assert(…);
static const struct txpwr_map __txpwr_map_lmt_ax = …;
static const struct txpwr_ent __txpwr_ent_lmt_ru_ax[] = …;
static_assert(…);
static const struct txpwr_map __txpwr_map_lmt_ru_ax = …;
static const struct txpwr_ent __txpwr_ent_byr_mcs_be[] = …;
static const struct txpwr_ent __txpwr_ent_byr_be[] = …;
static const struct txpwr_map __txpwr_map_byr_be = …;
static const struct txpwr_ent __txpwr_ent_lmt_mcs_be[] = …;
static const struct txpwr_ent __txpwr_ent_lmt_be[] = …;
static const struct txpwr_map __txpwr_map_lmt_be = …;
static const struct txpwr_ent __txpwr_ent_lmt_ru_indexes_be[] = …;
static const struct txpwr_ent __txpwr_ent_lmt_ru_be[] = …;
static const struct txpwr_map __txpwr_map_lmt_ru_be = …;
static unsigned int
__print_txpwr_ent(struct seq_file *m, const struct txpwr_ent *ent,
const s8 *buf, const unsigned int cur)
{ … }
static int __print_txpwr_map(struct seq_file *m, struct rtw89_dev *rtwdev,
const struct txpwr_map *map)
{ … }
#define case_REGD …
static void __print_regd(struct seq_file *m, struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan)
{ … }
#undef case_REGD
struct dbgfs_txpwr_table { … };
static const struct dbgfs_txpwr_table dbgfs_txpwr_table_ax = …;
static const struct dbgfs_txpwr_table dbgfs_txpwr_table_be = …;
static const struct dbgfs_txpwr_table *dbgfs_txpwr_tables[RTW89_CHIP_GEN_NUM] = …;
static
void rtw89_debug_priv_txpwr_table_get_regd(struct seq_file *m,
struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan)
{ … }
static int rtw89_debug_priv_txpwr_table_get(struct seq_file *m, void *v)
{ … }
static ssize_t
rtw89_debug_priv_mac_reg_dump_select(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
#define RTW89_MAC_PAGE_SIZE …
static int rtw89_debug_priv_mac_reg_dump_get(struct seq_file *m, void *v)
{ … }
static ssize_t
rtw89_debug_priv_mac_mem_dump_select(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static void rtw89_debug_dump_mac_mem(struct seq_file *m,
struct rtw89_dev *rtwdev,
u8 sel, u32 start_addr, u32 len)
{ … }
static int
rtw89_debug_priv_mac_mem_dump_get(struct seq_file *m, void *v)
{ … }
static ssize_t
rtw89_debug_priv_mac_dbg_port_dump_select(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_debug_mac_dump_ss_dbg(struct rtw89_dev *rtwdev,
struct seq_file *m)
{ … }
static int rtw89_debug_mac_dump_dle_dbg(struct rtw89_dev *rtwdev,
struct seq_file *m)
{ … }
static int rtw89_debug_mac_dump_dmac_dbg(struct rtw89_dev *rtwdev,
struct seq_file *m)
{ … }
static int rtw89_debug_mac_dump_cmac_err(struct rtw89_dev *rtwdev,
struct seq_file *m,
enum rtw89_mac_idx band)
{ … }
static int rtw89_debug_mac_dump_cmac_dbg(struct rtw89_dev *rtwdev,
struct seq_file *m)
{ … }
static const struct rtw89_mac_dbg_port_info dbg_port_ptcl_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ptcl_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_tx0_5 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_tx6 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_tx7 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_tx8 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_tx9_C = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_txD = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx3 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx4 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx5_8 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_tx9 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_txA_C = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_rx0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_rx1_2 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_rx3 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_rx4 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_hdt_rx5 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_rx_p0_0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_rx_p0_1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_rx_p0_2 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_cdt_rx_p1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_stf_ctrl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_addr_ctrl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_wde_intf = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_ple_intf = …;
static const struct rtw89_mac_dbg_port_info dbg_port_dspt_flow_ctrl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_sch_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_sch_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tmac_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tmac_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmac_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmac_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmacst_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmacst_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmac_plcp_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_rmac_plcp_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_trxptcl_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_trxptcl_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tx_infol_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tx_infoh_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tx_infol_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_tx_infoh_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_txtf_infol_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_txtf_infoh_c0 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_txtf_infol_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_txtf_infoh_c1 = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_bufmgn_freepg = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_bufmgn_quota = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_bufmgn_pagellt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_bufmgn_pktinfo = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_quemgn_prepkt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_quemgn_nxtpkt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_quemgn_qlnktbl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_wde_quemgn_qempty = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_bufmgn_freepg = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_bufmgn_quota = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_bufmgn_pagellt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_bufmgn_pktinfo = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_quemgn_prepkt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_quemgn_nxtpkt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_quemgn_qlnktbl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_ple_quemgn_qempty = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pktinfo = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_txdma = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_rxdma = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_cvt = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_cxpl = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_io = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_misc = …;
static const struct rtw89_mac_dbg_port_info dbg_port_pcie_misc2 = …;
static const struct rtw89_mac_dbg_port_info *
rtw89_debug_mac_dbg_port_sel(struct seq_file *m,
struct rtw89_dev *rtwdev, u32 sel)
{ … }
static bool is_dbg_port_valid(struct rtw89_dev *rtwdev, u32 sel)
{ … }
static int rtw89_debug_mac_dbg_port_dump(struct rtw89_dev *rtwdev,
struct seq_file *m, u32 sel)
{ … }
static int rtw89_debug_mac_dump_dbg_port(struct rtw89_dev *rtwdev,
struct seq_file *m)
{ … }
static int
rtw89_debug_priv_mac_dbg_port_dump_get(struct seq_file *m, void *v)
{
struct rtw89_debugfs_priv *debugfs_priv = m->private;
struct rtw89_dev *rtwdev = debugfs_priv->rtwdev;
if (debugfs_priv->dbgpkg_en.ss_dbg)
rtw89_debug_mac_dump_ss_dbg(rtwdev, m);
if (debugfs_priv->dbgpkg_en.dle_dbg)
rtw89_debug_mac_dump_dle_dbg(rtwdev, m);
if (debugfs_priv->dbgpkg_en.dmac_dbg)
rtw89_debug_mac_dump_dmac_dbg(rtwdev, m);
if (debugfs_priv->dbgpkg_en.cmac_dbg)
rtw89_debug_mac_dump_cmac_dbg(rtwdev, m);
if (debugfs_priv->dbgpkg_en.dbg_port)
rtw89_debug_mac_dump_dbg_port(rtwdev, m);
return 0;
};
static u8 *rtw89_hex2bin_user(struct rtw89_dev *rtwdev,
const char __user *user_buf, size_t count)
{ … }
static ssize_t rtw89_debug_priv_send_h2c_set(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int
rtw89_debug_priv_early_h2c_get(struct seq_file *m, void *v)
{ … }
static ssize_t
rtw89_debug_priv_early_h2c_set(struct file *filp, const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_dbg_trigger_ctrl_error(struct rtw89_dev *rtwdev)
{ … }
static int
rtw89_debug_priv_fw_crash_get(struct seq_file *m, void *v)
{ … }
enum rtw89_dbg_crash_simulation_type { … };
static ssize_t
rtw89_debug_priv_fw_crash_set(struct file *filp, const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static int rtw89_debug_priv_btc_info_get(struct seq_file *m, void *v)
{ … }
static ssize_t rtw89_debug_priv_btc_manual_set(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static ssize_t rtw89_debug_priv_fw_log_manual_set(struct file *filp,
const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
static void rtw89_sta_info_get_iter(void *data, struct ieee80211_sta *sta)
{ … }
static void
rtw89_debug_append_rx_rate(struct seq_file *m, struct rtw89_pkt_stat *pkt_stat,
enum rtw89_hw_rate first_rate, int len)
{ … }
#define FIRST_RATE_SAME(rate) …
#define FIRST_RATE_ENUM(rate) …
#define FIRST_RATE_GEV1(rate) …
static const struct rtw89_rx_rate_cnt_info { … } rtw89_rx_rate_cnt_infos[] = …;
static int rtw89_debug_priv_phy_info_get(struct seq_file *m, void *v)
{ … }
static void rtw89_dump_addr_cam(struct seq_file *m,
struct rtw89_dev *rtwdev,
struct rtw89_addr_cam_entry *addr_cam)
{ … }
__printf(3, 4)
static void rtw89_dump_pkt_offload(struct seq_file *m, struct list_head *pkt_list,
const char *fmt, ...)
{ … }
static
void rtw89_vif_ids_get_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
{ … }
static void rtw89_dump_ba_cam(struct seq_file *m, struct rtw89_sta *rtwsta)
{ … }
static void rtw89_sta_ids_get_iter(void *data, struct ieee80211_sta *sta)
{ … }
static int rtw89_debug_priv_stations_get(struct seq_file *m, void *v)
{ … }
#define DM_INFO(type) …
static const struct rtw89_disabled_dm_info { … } rtw89_disabled_dm_infos[] = …;
static int
rtw89_debug_priv_disable_dm_get(struct seq_file *m, void *v)
{ … }
static ssize_t
rtw89_debug_priv_disable_dm_set(struct file *filp, const char __user *user_buf,
size_t count, loff_t *loff)
{ … }
#define rtw89_debug_priv_get(name) …
#define rtw89_debug_priv_set(name) …
#define rtw89_debug_priv_select_and_get(name) …
#define rtw89_debug_priv_set_and_get(name) …
static const struct rtw89_debugfs rtw89_debugfs_templ = …;
#define rtw89_debugfs_add(name, mode, fopname, parent) …
#define rtw89_debugfs_add_w(name) …
#define rtw89_debugfs_add_rw(name) …
#define rtw89_debugfs_add_r(name) …
static
void rtw89_debugfs_add_sec0(struct rtw89_dev *rtwdev, struct dentry *debugfs_topdir)
{ … }
static
void rtw89_debugfs_add_sec1(struct rtw89_dev *rtwdev, struct dentry *debugfs_topdir)
{ … }
void rtw89_debugfs_init(struct rtw89_dev *rtwdev)
{ … }
void rtw89_debugfs_deinit(struct rtw89_dev *rtwdev)
{ … }
#endif
#ifdef CONFIG_RTW89_DEBUGMSG
void rtw89_debug(struct rtw89_dev *rtwdev, enum rtw89_debug_mask mask,
const char *fmt, ...)
{ … }
EXPORT_SYMBOL(…);
#endif