|
|
|
@@ -52,6 +52,27 @@ struct rtw89_debugfs_priv {
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct rtw89_debugfs {
|
|
|
|
|
struct rtw89_debugfs_priv read_reg;
|
|
|
|
|
struct rtw89_debugfs_priv write_reg;
|
|
|
|
|
struct rtw89_debugfs_priv read_rf;
|
|
|
|
|
struct rtw89_debugfs_priv write_rf;
|
|
|
|
|
struct rtw89_debugfs_priv rf_reg_dump;
|
|
|
|
|
struct rtw89_debugfs_priv txpwr_table;
|
|
|
|
|
struct rtw89_debugfs_priv mac_reg_dump;
|
|
|
|
|
struct rtw89_debugfs_priv mac_mem_dump;
|
|
|
|
|
struct rtw89_debugfs_priv mac_dbg_port_dump;
|
|
|
|
|
struct rtw89_debugfs_priv send_h2c;
|
|
|
|
|
struct rtw89_debugfs_priv early_h2c;
|
|
|
|
|
struct rtw89_debugfs_priv fw_crash;
|
|
|
|
|
struct rtw89_debugfs_priv btc_info;
|
|
|
|
|
struct rtw89_debugfs_priv btc_manual;
|
|
|
|
|
struct rtw89_debugfs_priv fw_log_manual;
|
|
|
|
|
struct rtw89_debugfs_priv phy_info;
|
|
|
|
|
struct rtw89_debugfs_priv stations;
|
|
|
|
|
struct rtw89_debugfs_priv disable_dm;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static const u16 rtw89_rate_info_bw_to_mhz_map[] = {
|
|
|
|
|
[RATE_INFO_BW_20] = 20,
|
|
|
|
|
[RATE_INFO_BW_40] = 40,
|
|
|
|
@@ -3463,9 +3484,9 @@ static ssize_t rtw89_debug_priv_btc_manual_set(struct file *filp,
|
|
|
|
|
return count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static ssize_t rtw89_debug_fw_log_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)
|
|
|
|
|
{
|
|
|
|
|
struct rtw89_debugfs_priv *debugfs_priv = filp->private_data;
|
|
|
|
|
struct rtw89_dev *rtwdev = debugfs_priv->rtwdev;
|
|
|
|
@@ -3854,92 +3875,55 @@ rtw89_debug_priv_disable_dm_set(struct file *filp, const char __user *user_buf,
|
|
|
|
|
return count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_read_reg = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_read_reg_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_read_reg_select,
|
|
|
|
|
};
|
|
|
|
|
#define rtw89_debug_priv_get(name) \
|
|
|
|
|
{ \
|
|
|
|
|
.cb_read = rtw89_debug_priv_ ##name## _get, \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_write_reg = {
|
|
|
|
|
.cb_write = rtw89_debug_priv_write_reg_set,
|
|
|
|
|
};
|
|
|
|
|
#define rtw89_debug_priv_set(name) \
|
|
|
|
|
{ \
|
|
|
|
|
.cb_write = rtw89_debug_priv_ ##name## _set, \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_read_rf = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_read_rf_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_read_rf_select,
|
|
|
|
|
};
|
|
|
|
|
#define rtw89_debug_priv_select_and_get(name) \
|
|
|
|
|
{ \
|
|
|
|
|
.cb_write = rtw89_debug_priv_ ##name## _select, \
|
|
|
|
|
.cb_read = rtw89_debug_priv_ ##name## _get, \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_write_rf = {
|
|
|
|
|
.cb_write = rtw89_debug_priv_write_rf_set,
|
|
|
|
|
};
|
|
|
|
|
#define rtw89_debug_priv_set_and_get(name) \
|
|
|
|
|
{ \
|
|
|
|
|
.cb_write = rtw89_debug_priv_ ##name## _set, \
|
|
|
|
|
.cb_read = rtw89_debug_priv_ ##name## _get, \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_rf_reg_dump = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_rf_reg_dump_get,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_txpwr_table = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_txpwr_table_get,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_mac_reg_dump = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_mac_reg_dump_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_mac_reg_dump_select,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_mac_mem_dump = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_mac_mem_dump_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_mac_mem_dump_select,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_mac_dbg_port_dump = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_mac_dbg_port_dump_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_mac_dbg_port_dump_select,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_send_h2c = {
|
|
|
|
|
.cb_write = rtw89_debug_priv_send_h2c_set,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_early_h2c = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_early_h2c_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_early_h2c_set,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_fw_crash = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_fw_crash_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_fw_crash_set,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_btc_info = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_btc_info_get,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_btc_manual = {
|
|
|
|
|
.cb_write = rtw89_debug_priv_btc_manual_set,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_fw_log_manual = {
|
|
|
|
|
.cb_write = rtw89_debug_fw_log_manual_set,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_phy_info = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_phy_info_get,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_stations = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_stations_get,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct rtw89_debugfs_priv rtw89_debug_priv_disable_dm = {
|
|
|
|
|
.cb_read = rtw89_debug_priv_disable_dm_get,
|
|
|
|
|
.cb_write = rtw89_debug_priv_disable_dm_set,
|
|
|
|
|
static const struct rtw89_debugfs rtw89_debugfs_templ = {
|
|
|
|
|
.read_reg = rtw89_debug_priv_select_and_get(read_reg),
|
|
|
|
|
.write_reg = rtw89_debug_priv_set(write_reg),
|
|
|
|
|
.read_rf = rtw89_debug_priv_select_and_get(read_rf),
|
|
|
|
|
.write_rf = rtw89_debug_priv_set(write_rf),
|
|
|
|
|
.rf_reg_dump = rtw89_debug_priv_get(rf_reg_dump),
|
|
|
|
|
.txpwr_table = rtw89_debug_priv_get(txpwr_table),
|
|
|
|
|
.mac_reg_dump = rtw89_debug_priv_select_and_get(mac_reg_dump),
|
|
|
|
|
.mac_mem_dump = rtw89_debug_priv_select_and_get(mac_mem_dump),
|
|
|
|
|
.mac_dbg_port_dump = rtw89_debug_priv_select_and_get(mac_dbg_port_dump),
|
|
|
|
|
.send_h2c = rtw89_debug_priv_set(send_h2c),
|
|
|
|
|
.early_h2c = rtw89_debug_priv_set_and_get(early_h2c),
|
|
|
|
|
.fw_crash = rtw89_debug_priv_set_and_get(fw_crash),
|
|
|
|
|
.btc_info = rtw89_debug_priv_get(btc_info),
|
|
|
|
|
.btc_manual = rtw89_debug_priv_set(btc_manual),
|
|
|
|
|
.fw_log_manual = rtw89_debug_priv_set(fw_log_manual),
|
|
|
|
|
.phy_info = rtw89_debug_priv_get(phy_info),
|
|
|
|
|
.stations = rtw89_debug_priv_get(stations),
|
|
|
|
|
.disable_dm = rtw89_debug_priv_set_and_get(disable_dm),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define rtw89_debugfs_add(name, mode, fopname, parent) \
|
|
|
|
|
do { \
|
|
|
|
|
rtw89_debug_priv_ ##name.rtwdev = rtwdev; \
|
|
|
|
|
if (!debugfs_create_file(#name, mode, \
|
|
|
|
|
parent, &rtw89_debug_priv_ ##name, \
|
|
|
|
|
&file_ops_ ##fopname)) \
|
|
|
|
|
struct rtw89_debugfs_priv *priv = &rtwdev->debugfs->name; \
|
|
|
|
|
priv->rtwdev = rtwdev; \
|
|
|
|
|
if (IS_ERR(debugfs_create_file(#name, mode, parent, priv, \
|
|
|
|
|
&file_ops_ ##fopname))) \
|
|
|
|
|
pr_debug("Unable to initialize debugfs:%s\n", #name); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
@@ -3950,13 +3934,9 @@ static struct rtw89_debugfs_priv rtw89_debug_priv_disable_dm = {
|
|
|
|
|
#define rtw89_debugfs_add_r(name) \
|
|
|
|
|
rtw89_debugfs_add(name, S_IFREG | 0444, single_r, debugfs_topdir)
|
|
|
|
|
|
|
|
|
|
void rtw89_debugfs_init(struct rtw89_dev *rtwdev)
|
|
|
|
|
static
|
|
|
|
|
void rtw89_debugfs_add_sec0(struct rtw89_dev *rtwdev, struct dentry *debugfs_topdir)
|
|
|
|
|
{
|
|
|
|
|
struct dentry *debugfs_topdir;
|
|
|
|
|
|
|
|
|
|
debugfs_topdir = debugfs_create_dir("rtw89",
|
|
|
|
|
rtwdev->hw->wiphy->debugfsdir);
|
|
|
|
|
|
|
|
|
|
rtw89_debugfs_add_rw(read_reg);
|
|
|
|
|
rtw89_debugfs_add_w(write_reg);
|
|
|
|
|
rtw89_debugfs_add_rw(read_rf);
|
|
|
|
@@ -3966,6 +3946,11 @@ void rtw89_debugfs_init(struct rtw89_dev *rtwdev)
|
|
|
|
|
rtw89_debugfs_add_rw(mac_reg_dump);
|
|
|
|
|
rtw89_debugfs_add_rw(mac_mem_dump);
|
|
|
|
|
rtw89_debugfs_add_rw(mac_dbg_port_dump);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static
|
|
|
|
|
void rtw89_debugfs_add_sec1(struct rtw89_dev *rtwdev, struct dentry *debugfs_topdir)
|
|
|
|
|
{
|
|
|
|
|
rtw89_debugfs_add_w(send_h2c);
|
|
|
|
|
rtw89_debugfs_add_rw(early_h2c);
|
|
|
|
|
rtw89_debugfs_add_rw(fw_crash);
|
|
|
|
@@ -3976,6 +3961,27 @@ void rtw89_debugfs_init(struct rtw89_dev *rtwdev)
|
|
|
|
|
rtw89_debugfs_add_r(stations);
|
|
|
|
|
rtw89_debugfs_add_rw(disable_dm);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void rtw89_debugfs_init(struct rtw89_dev *rtwdev)
|
|
|
|
|
{
|
|
|
|
|
struct dentry *debugfs_topdir;
|
|
|
|
|
|
|
|
|
|
rtwdev->debugfs = kmemdup(&rtw89_debugfs_templ,
|
|
|
|
|
sizeof(rtw89_debugfs_templ), GFP_KERNEL);
|
|
|
|
|
if (!rtwdev->debugfs)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
debugfs_topdir = debugfs_create_dir("rtw89",
|
|
|
|
|
rtwdev->hw->wiphy->debugfsdir);
|
|
|
|
|
|
|
|
|
|
rtw89_debugfs_add_sec0(rtwdev, debugfs_topdir);
|
|
|
|
|
rtw89_debugfs_add_sec1(rtwdev, debugfs_topdir);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void rtw89_debugfs_deinit(struct rtw89_dev *rtwdev)
|
|
|
|
|
{
|
|
|
|
|
kfree(rtwdev->debugfs);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_RTW89_DEBUGMSG
|
|
|
|
|