* [PATCH] ath10k: Add debugfs support to configure beacon tx mode
@ 2015-05-14 9:14 Rajkumar Manoharan
2015-05-29 16:48 ` Kalle Valo
0 siblings, 1 reply; 2+ messages in thread
From: Rajkumar Manoharan @ 2015-05-14 9:14 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless, Rajkumar Manoharan
Introduce debugfs entry to select beacon tx mode to
staggered or bursted mode. In staggered mode, software beacon
alert will be evenly distributed for each beaconing interfaces
by (beacon intval / number of vif). In bursted mode, batch of
beacons will be sent out as batch at beacon interval.
By default, staggered mode is selected.
To select bursted mode
echo 1 > /sys/kernel/debug/ieee80211/phyX/ath10k/beacon_tx_mode
For staggered mode,
echo 0 > /sys/kernel/debug/ieee80211/phyX/ath10k/beacon_tx_mode
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/core.h | 1 +
drivers/net/wireless/ath/ath10k/debug.c | 60 +++++++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath10k/mac.c | 9 ++---
drivers/net/wireless/ath/ath10k/mac.h | 1 +
4 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 827b3d7..be85b1f 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -394,6 +394,7 @@ struct ath10k_debug {
u8 htt_max_ampdu;
struct ath10k_fw_crash_data *fw_crash_data;
+ enum wmi_beacon_gen_mode beacon_tx_mode;
};
enum ath10k_state {
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index 8fa606a..de63465 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -24,6 +24,7 @@
#include "debug.h"
#include "hif.h"
#include "wmi-ops.h"
+#include "mac.h"
/* ms */
#define ATH10K_DEBUG_HTT_STATS_INTERVAL 1000
@@ -1885,6 +1886,7 @@ int ath10k_debug_start(struct ath10k *ar)
ath10k_warn(ar, "cal period cfg failed from debug start: %d\n",
ret);
}
+ ar->debug.beacon_tx_mode = WMI_BEACON_STAGGERED_MODE;
return ret;
}
@@ -2092,6 +2094,61 @@ static const struct file_operations fops_quiet_period = {
.open = simple_open
};
+static ssize_t ath10k_write_beacon_tx_mode(struct file *file,
+ const char __user *ubuf,
+ size_t count, loff_t *ppos)
+{
+ struct ath10k *ar = file->private_data;
+ u32 beacon_tx_mode;
+ int ret;
+
+ if (kstrtouint_from_user(ubuf, count, 0, &beacon_tx_mode))
+ return -EINVAL;
+
+ if (beacon_tx_mode > WMI_BEACON_BURST_MODE) {
+ ath10k_warn(ar, "Invalid beaconing mode configured: %d\n",
+ beacon_tx_mode);
+ return -EINVAL;
+ }
+ mutex_lock(&ar->conf_mutex);
+ ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->beacon_tx_mode,
+ beacon_tx_mode);
+ if (ret) {
+ ath10k_warn(ar, "failed to set beacon tx mode: %d\n", ret);
+ mutex_unlock(&ar->conf_mutex);
+ return ret;
+ }
+
+ ath10k_mac_chan_reconfigure(ar);
+ ar->debug.beacon_tx_mode = beacon_tx_mode;
+ mutex_unlock(&ar->conf_mutex);
+
+ return count;
+}
+
+static ssize_t ath10k_read_beacon_tx_mode(struct file *file, char __user *ubuf,
+ size_t count, loff_t *ppos)
+{
+ char buf[100];
+ struct ath10k *ar = file->private_data;
+ int len = 0;
+
+ mutex_lock(&ar->conf_mutex);
+ len = scnprintf(buf + len, sizeof(buf) - len,
+ "available beaconing modes: 0 - staggered 1 - bursted\n");
+ len += scnprintf(buf + len, sizeof(buf) - len, "current mode: %s\n",
+ (ar->debug.beacon_tx_mode) ? "bursted" : "staggered");
+ mutex_unlock(&ar->conf_mutex);
+
+ return simple_read_from_buffer(ubuf, count, ppos, buf, len);
+}
+
+static const struct file_operations fops_beacon_tx_mode = {
+ .read = ath10k_read_beacon_tx_mode,
+ .write = ath10k_write_beacon_tx_mode,
+ .open = simple_open
+};
+
int ath10k_debug_create(struct ath10k *ar)
{
ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data));
@@ -2195,6 +2252,9 @@ int ath10k_debug_register(struct ath10k *ar)
debugfs_create_file("quiet_period", S_IRUGO | S_IWUSR,
ar->debug.debugfs_phy, ar, &fops_quiet_period);
+ debugfs_create_file("beacon_tx_mode", S_IRUGO | S_IWUSR,
+ ar->debug.debugfs_phy, ar, &fops_beacon_tx_mode);
+
return 0;
}
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 425dbe2..898b821 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -3969,7 +3969,7 @@ static int ath10k_config_ps(struct ath10k *ar)
return ret;
}
-static void ath10k_mac_chan_reconfigure(struct ath10k *ar)
+void ath10k_mac_chan_reconfigure(struct ath10k *ar)
{
struct ath10k_vif *arvif;
struct cfg80211_chan_def def;
@@ -4556,12 +4556,13 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
if (changed & BSS_CHANGED_BEACON) {
ath10k_dbg(ar, ATH10K_DBG_MAC,
- "vdev %d set beacon tx mode to staggered\n",
- arvif->vdev_id);
+ "vdev %d set beacon tx mode to %s\n",
+ arvif->vdev_id,
+ ar->debug.beacon_tx_mode ? "bursted" : "staggered");
pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
- WMI_BEACON_STAGGERED_MODE);
+ ar->debug.beacon_tx_mode);
if (ret)
ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
arvif->vdev_id, ret);
diff --git a/drivers/net/wireless/ath/ath10k/mac.h b/drivers/net/wireless/ath/ath10k/mac.h
index b291f06..a765ae8 100644
--- a/drivers/net/wireless/ath/ath10k/mac.h
+++ b/drivers/net/wireless/ath/ath10k/mac.h
@@ -74,6 +74,7 @@ void ath10k_mac_tx_lock(struct ath10k *ar, int reason);
void ath10k_mac_tx_unlock(struct ath10k *ar, int reason);
void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason);
void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason);
+void ath10k_mac_chan_reconfigure(struct ath10k *ar);
static inline struct ath10k_vif *ath10k_vif_to_arvif(struct ieee80211_vif *vif)
{
--
2.4.0
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] ath10k: Add debugfs support to configure beacon tx mode
2015-05-14 9:14 [PATCH] ath10k: Add debugfs support to configure beacon tx mode Rajkumar Manoharan
@ 2015-05-29 16:48 ` Kalle Valo
0 siblings, 0 replies; 2+ messages in thread
From: Kalle Valo @ 2015-05-29 16:48 UTC (permalink / raw)
To: Rajkumar Manoharan; +Cc: linux-wireless, ath10k
Rajkumar Manoharan <rmanohar@qti.qualcomm.com> writes:
> Introduce debugfs entry to select beacon tx mode to
> staggered or bursted mode. In staggered mode, software beacon
> alert will be evenly distributed for each beaconing interfaces
> by (beacon intval / number of vif). In bursted mode, batch of
> beacons will be sent out as batch at beacon interval.
>
> By default, staggered mode is selected.
>
> To select bursted mode
>
> echo 1 > /sys/kernel/debug/ieee80211/phyX/ath10k/beacon_tx_mode
>
> For staggered mode,
>
> echo 0 > /sys/kernel/debug/ieee80211/phyX/ath10k/beacon_tx_mode
>
> Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
In my opinion this should be configured via nl80211, not from debugfs.
--
Kalle Valo
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-05-29 16:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-14 9:14 [PATCH] ath10k: Add debugfs support to configure beacon tx mode Rajkumar Manoharan
2015-05-29 16:48 ` Kalle Valo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox