mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
ath10k: add support to configure pktlog filter
Add support to configure packet log filters (tx, rx, rate control) via debugfs. To disable htt pktlog events set the filters to 0. ex: To enable pktlog for all filters echo 0x1f > /sys/kernel/debug/ieee80211/phy*/ath10k/pktlog_filter To disable pktlog echo 0 > /sys/kernel/debug/ieee80211/phy*/ath10k/pktlog_filter Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
16c1117675
commit
90174455ae
@ -302,7 +302,9 @@ struct ath10k_debug {
|
|||||||
struct ath10k_dfs_stats dfs_stats;
|
struct ath10k_dfs_stats dfs_stats;
|
||||||
struct ath_dfs_pool_stats dfs_pool_stats;
|
struct ath_dfs_pool_stats dfs_pool_stats;
|
||||||
|
|
||||||
|
/* protected by conf_mutex */
|
||||||
u32 fw_dbglog_mask;
|
u32 fw_dbglog_mask;
|
||||||
|
u32 pktlog_filter;
|
||||||
|
|
||||||
u8 htt_max_amsdu;
|
u8 htt_max_amsdu;
|
||||||
u8 htt_max_ampdu;
|
u8 htt_max_ampdu;
|
||||||
|
@ -1396,7 +1396,22 @@ int ath10k_debug_start(struct ath10k *ar)
|
|||||||
ret);
|
ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
if (ar->debug.pktlog_filter) {
|
||||||
|
ret = ath10k_wmi_pdev_pktlog_enable(ar,
|
||||||
|
ar->debug.pktlog_filter);
|
||||||
|
if (ret)
|
||||||
|
/* not serious */
|
||||||
|
ath10k_warn(ar,
|
||||||
|
"failed to enable pktlog filter %x: %d\n",
|
||||||
|
ar->debug.pktlog_filter, ret);
|
||||||
|
} else {
|
||||||
|
ret = ath10k_wmi_pdev_pktlog_disable(ar);
|
||||||
|
if (ret)
|
||||||
|
/* not serious */
|
||||||
|
ath10k_warn(ar, "failed to disable pktlog: %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ath10k_debug_stop(struct ath10k *ar)
|
void ath10k_debug_stop(struct ath10k *ar)
|
||||||
@ -1411,6 +1426,8 @@ void ath10k_debug_stop(struct ath10k *ar)
|
|||||||
|
|
||||||
ar->debug.htt_max_amsdu = 0;
|
ar->debug.htt_max_amsdu = 0;
|
||||||
ar->debug.htt_max_ampdu = 0;
|
ar->debug.htt_max_ampdu = 0;
|
||||||
|
|
||||||
|
ath10k_wmi_pdev_pktlog_disable(ar);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t ath10k_write_simulate_radar(struct file *file,
|
static ssize_t ath10k_write_simulate_radar(struct file *file,
|
||||||
@ -1493,6 +1510,69 @@ static const struct file_operations fops_dfs_stats = {
|
|||||||
.llseek = default_llseek,
|
.llseek = default_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static ssize_t ath10k_write_pktlog_filter(struct file *file,
|
||||||
|
const char __user *ubuf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct ath10k *ar = file->private_data;
|
||||||
|
u32 filter;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (kstrtouint_from_user(ubuf, count, 0, &filter))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&ar->conf_mutex);
|
||||||
|
|
||||||
|
if (ar->state != ATH10K_STATE_ON) {
|
||||||
|
ar->debug.pktlog_filter = filter;
|
||||||
|
ret = count;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter && (filter != ar->debug.pktlog_filter)) {
|
||||||
|
ret = ath10k_wmi_pdev_pktlog_enable(ar, filter);
|
||||||
|
if (ret) {
|
||||||
|
ath10k_warn(ar, "failed to enable pktlog filter %x: %d\n",
|
||||||
|
ar->debug.pktlog_filter, ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = ath10k_wmi_pdev_pktlog_disable(ar);
|
||||||
|
if (ret) {
|
||||||
|
ath10k_warn(ar, "failed to disable pktlog: %d\n", ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ar->debug.pktlog_filter = filter;
|
||||||
|
ret = count;
|
||||||
|
|
||||||
|
out:
|
||||||
|
mutex_unlock(&ar->conf_mutex);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t ath10k_read_pktlog_filter(struct file *file, char __user *ubuf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
struct ath10k *ar = file->private_data;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
mutex_lock(&ar->conf_mutex);
|
||||||
|
len = scnprintf(buf, sizeof(buf) - len, "%08x\n",
|
||||||
|
ar->debug.pktlog_filter);
|
||||||
|
mutex_unlock(&ar->conf_mutex);
|
||||||
|
|
||||||
|
return simple_read_from_buffer(ubuf, count, ppos, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations fops_pktlog_filter = {
|
||||||
|
.read = ath10k_read_pktlog_filter,
|
||||||
|
.write = ath10k_write_pktlog_filter,
|
||||||
|
.open = simple_open
|
||||||
|
};
|
||||||
|
|
||||||
int ath10k_debug_create(struct ath10k *ar)
|
int ath10k_debug_create(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data));
|
ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data));
|
||||||
@ -1574,6 +1654,9 @@ int ath10k_debug_register(struct ath10k *ar)
|
|||||||
&fops_dfs_stats);
|
&fops_dfs_stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debugfs_create_file("pktlog_filter", S_IRUGO | S_IWUSR,
|
||||||
|
ar->debug.debugfs_phy, ar, &fops_pktlog_filter);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,15 @@ enum ath10k_debug_mask {
|
|||||||
ATH10K_DBG_ANY = 0xffffffff,
|
ATH10K_DBG_ANY = 0xffffffff,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ath10k_pktlog_filter {
|
||||||
|
ATH10K_PKTLOG_RX = 0x000000001,
|
||||||
|
ATH10K_PKTLOG_TX = 0x000000002,
|
||||||
|
ATH10K_PKTLOG_RCFIND = 0x000000004,
|
||||||
|
ATH10K_PKTLOG_RCUPDATE = 0x000000008,
|
||||||
|
ATH10K_PKTLOG_DBG_PRINT = 0x000000010,
|
||||||
|
ATH10K_PKTLOG_ANY = 0x00000001f,
|
||||||
|
};
|
||||||
|
|
||||||
extern unsigned int ath10k_debug_mask;
|
extern unsigned int ath10k_debug_mask;
|
||||||
|
|
||||||
__printf(2, 3) void ath10k_info(struct ath10k *ar, const char *fmt, ...);
|
__printf(2, 3) void ath10k_info(struct ath10k *ar, const char *fmt, ...);
|
||||||
|
@ -4345,6 +4345,39 @@ int ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable)
|
|||||||
return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid);
|
return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 ev_bitmap)
|
||||||
|
{
|
||||||
|
struct wmi_pdev_pktlog_enable_cmd *cmd;
|
||||||
|
struct sk_buff *skb;
|
||||||
|
|
||||||
|
skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd));
|
||||||
|
if (!skb)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
ev_bitmap &= ATH10K_PKTLOG_ANY;
|
||||||
|
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||||
|
"wmi enable pktlog filter:%x\n", ev_bitmap);
|
||||||
|
|
||||||
|
cmd = (struct wmi_pdev_pktlog_enable_cmd *)skb->data;
|
||||||
|
cmd->ev_bitmap = __cpu_to_le32(ev_bitmap);
|
||||||
|
return ath10k_wmi_cmd_send(ar, skb,
|
||||||
|
ar->wmi.cmd->pdev_pktlog_enable_cmdid);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar)
|
||||||
|
{
|
||||||
|
struct sk_buff *skb;
|
||||||
|
|
||||||
|
skb = ath10k_wmi_alloc_skb(ar, 0);
|
||||||
|
if (!skb)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi disable pktlog\n");
|
||||||
|
|
||||||
|
return ath10k_wmi_cmd_send(ar, skb,
|
||||||
|
ar->wmi.cmd->pdev_pktlog_disable_cmdid);
|
||||||
|
}
|
||||||
|
|
||||||
int ath10k_wmi_attach(struct ath10k *ar)
|
int ath10k_wmi_attach(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
|
if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
|
||||||
|
@ -2787,6 +2787,10 @@ struct wmi_pdev_set_channel_cmd {
|
|||||||
struct wmi_channel chan;
|
struct wmi_channel chan;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
struct wmi_pdev_pktlog_enable_cmd {
|
||||||
|
__le32 ev_bitmap;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
/* Customize the DSCP (bit) to TID (0-7) mapping for QOS */
|
/* Customize the DSCP (bit) to TID (0-7) mapping for QOS */
|
||||||
#define WMI_DSCP_MAP_MAX (64)
|
#define WMI_DSCP_MAP_MAX (64)
|
||||||
struct wmi_pdev_set_dscp_tid_map_cmd {
|
struct wmi_pdev_set_dscp_tid_map_cmd {
|
||||||
@ -4647,5 +4651,7 @@ int ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *skb);
|
|||||||
int ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable);
|
int ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable);
|
||||||
int ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb,
|
int ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb,
|
||||||
struct ath10k_fw_stats *stats);
|
struct ath10k_fw_stats *stats);
|
||||||
|
int ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 ev_list);
|
||||||
|
int ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar);
|
||||||
|
|
||||||
#endif /* _WMI_H_ */
|
#endif /* _WMI_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user