Commit d0555093 authored by Yan-Hsuan Chuang's avatar Yan-Hsuan Chuang Committed by Kalle Valo
Browse files

rtw88: add a debugfs entry to enable/disable coex mechanism



Sometimes we need to stop the coex mechanism to debug, so that we
can manually control the device through various outer commands.
Hence, add a new debugfs coex_enable to allow us to enable/disable
the coex mechanism when driver is running.

To disable coex
echo 0 > /sys/kernel/debug/ieee80211/phyX/rtw88/coex_enable

To enable coex
echo 1 > /sys/kernel/debug/ieee80211/phyX/rtw88/coex_enable

To check coex dm is enabled or not
cat /sys/kernel/debug/ieee80211/phyX/rtw88/coex_enable

Signed-off-by: default avatarYan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200313033008.20070-3-yhchuang@realtek.com
parent 1fe188da
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -706,6 +706,45 @@ static int rtw_debugfs_get_coex_info(struct seq_file *m, void *v)
	return 0;
}

static ssize_t rtw_debugfs_set_coex_enable(struct file *filp,
					   const char __user *buffer,
					   size_t count, loff_t *loff)
{
	struct seq_file *seqpriv = (struct seq_file *)filp->private_data;
	struct rtw_debugfs_priv *debugfs_priv = seqpriv->private;
	struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
	struct rtw_coex *coex = &rtwdev->coex;
	char tmp[32 + 1];
	bool enable;
	int ret;

	rtw_debugfs_copy_from_user(tmp, sizeof(tmp), buffer, count, 1);

	ret = kstrtobool(tmp, &enable);
	if (ret) {
		rtw_warn(rtwdev, "invalid arguments\n");
		return ret;
	}

	mutex_lock(&rtwdev->mutex);
	coex->stop_dm = enable == 0;
	mutex_unlock(&rtwdev->mutex);

	return count;
}

static int rtw_debugfs_get_coex_enable(struct seq_file *m, void *v)
{
	struct rtw_debugfs_priv *debugfs_priv = m->private;
	struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
	struct rtw_coex *coex = &rtwdev->coex;

	seq_printf(m, "coex mechanism %s\n",
		   coex->stop_dm ? "disabled" : "enabled");

	return 0;
}

#define rtw_debug_impl_mac(page, addr)				\
static struct rtw_debugfs_priv rtw_debug_priv_mac_ ##page = {	\
	.cb_read = rtw_debug_get_mac_page,			\
@@ -796,6 +835,11 @@ static struct rtw_debugfs_priv rtw_debug_priv_phy_info = {
	.cb_read = rtw_debugfs_get_phy_info,
};

static struct rtw_debugfs_priv rtw_debug_priv_coex_enable = {
	.cb_write = rtw_debugfs_set_coex_enable,
	.cb_read = rtw_debugfs_get_coex_enable,
};

static struct rtw_debugfs_priv rtw_debug_priv_coex_info = {
	.cb_read = rtw_debugfs_get_coex_info,
};
@@ -831,6 +875,7 @@ void rtw_debugfs_init(struct rtw_dev *rtwdev)
	rtw_debugfs_add_rw(rsvd_page);
	rtw_debugfs_add_r(phy_info);
	rtw_debugfs_add_r(coex_info);
	rtw_debugfs_add_rw(coex_enable);
	rtw_debugfs_add_r(mac_0);
	rtw_debugfs_add_r(mac_1);
	rtw_debugfs_add_r(mac_2);