diff mbox series

[RFC,v2,6/6] mac80211: minstrel_ht - add debugfs entry per sta for fixed tx-power

Message ID 20220920104032.496697-7-jelonek.jonas@gmail.com (mailing list archive)
State RFC
Delegated to: Johannes Berg
Headers show
Series mac80211: add TPC support in control path | expand

Commit Message

Jonas Jelonek Sept. 20, 2022, 10:40 a.m. UTC
Create a new debugfs entry called 'rc_fixed_txpower_idx' in debugfs dir
for each station. By writing a positive static tx-power idx into this
file, minstrel_ht applies this tx-power idx to each packet or each mrr
stage, depending on what the hardware supports. By writing (u32)-1 to
the file, minstrel will return to automatic mode which currently just
passes -1 as tx-power idx, indicating that the driver should use a
default.
The debugfs entry will only be created if either tpc per packet or per
mrr is supported.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
---
 net/mac80211/rc80211_minstrel_ht.c         | 14 ++++++++++++++
 net/mac80211/rc80211_minstrel_ht.h         | 11 +++++++++++
 net/mac80211/rc80211_minstrel_ht_debugfs.c | 11 +++++++++++
 3 files changed, 36 insertions(+)

Comments

Johannes Berg Jan. 12, 2023, 10:32 a.m. UTC | #1
On Tue, 2022-09-20 at 12:40 +0200, Jonas Jelonek wrote:
> Create a new debugfs entry called 'rc_fixed_txpower_idx' in debugfs dir
> for each station. By writing a positive static tx-power idx into this
> file, minstrel_ht applies this tx-power idx to each packet or each mrr
> stage, depending on what the hardware supports. By writing (u32)-1 to
> the file, minstrel will return to automatic mode which currently just
> passes -1 as tx-power idx, indicating that the driver should use a
> default.
> The debugfs entry will only be created if either tpc per packet or per
> mrr is supported.
> 
> Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
> ---
>  net/mac80211/rc80211_minstrel_ht.c         | 14 ++++++++++++++
>  net/mac80211/rc80211_minstrel_ht.h         | 11 +++++++++++
>  net/mac80211/rc80211_minstrel_ht_debugfs.c | 11 +++++++++++
>  3 files changed, 36 insertions(+)
> 
> diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
> index 24c3c055db6d..222b51e7d9ee 100644
> --- a/net/mac80211/rc80211_minstrel_ht.c
> +++ b/net/mac80211/rc80211_minstrel_ht.c
> @@ -1486,6 +1486,14 @@ minstrel_ht_set_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
>  
>  	ratetbl->rate[offset].idx = idx;
>  	ratetbl->rate[offset].flags = flags;
> +
> +#ifdef CONFIG_MAC80211_DEBUGFS
> +	if (mi->fixed_txpower_idx != -1) {
> +		ratetbl->rate[offset].txpower_idx = mi->fixed_txpower_idx;
> +		return;
> +	}
> +#endif
> +	ratetbl->rate[offset].txpower_idx = -1;
>  }
>  
>  static inline int
> @@ -1603,8 +1611,14 @@ minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
>  	info->flags |= mi->tx_flags;
>  
>  #ifdef CONFIG_MAC80211_DEBUGFS
> +	if (mi->fixed_txpower_idx != -1)
> +		info->control.txpower_idx = mi->fixed_txpower_idx;
> +
>  	if (mp->fixed_rate_idx != -1)
>  		return;
> +#else
> +	/* Pass -1 to indicate 'ignore txpower' or 'use default' */
> +	info->control.txpower_idx = -1;
>  #endif
>  
>  	/* Don't use EAPOL frames for sampling on non-mrr hw */
> diff --git a/net/mac80211/rc80211_minstrel_ht.h b/net/mac80211/rc80211_minstrel_ht.h
> index 1766ff0c78d3..15222d66c4b8 100644
> --- a/net/mac80211/rc80211_minstrel_ht.h
> +++ b/net/mac80211/rc80211_minstrel_ht.h
> @@ -194,6 +194,17 @@ struct minstrel_ht_sta {
>  
>  	/* MCS rate group info and statistics */
>  	struct minstrel_mcs_group_data groups[MINSTREL_GROUPS_NB];
> +
> +#ifdef CONFIG_MAC80211_DEBUGFS
> +	/*
> +	 * enable fixed tx-power processing per STA
> +	 *   - write static index to debugfs:ieee80211/phyX/netdev:wlanY
> +	 *   		/stations/<MAC>/rc_fixed_txpower_idx
> +	 *   - write -1 to enable automatic processing again
> +	 *   - setting will be applied on next update
> +	 */
> +	u32 fixed_txpower_idx;

Use s32? You don't need that large range anyway.

> +
> +	if (ieee80211_hw_check(mp->hw, SUPPORTS_TPC_PER_PACKET) ||
> +	    ieee80211_hw_check(mp->hw, SUPPORTS_TPC_PER_MRR))
> +	{

bad indentation

> +		mi->fixed_txpower_idx = (u32)-1;
> +		debugfs_create_u32("rc_fixed_txpower_idx", S_IRUGO | S_IWUGO,
> +				   dir, &mi->fixed_txpower_idx);
> 

Seems like that should be a function with some range check?

johannes
diff mbox series

Patch

diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index 24c3c055db6d..222b51e7d9ee 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -1486,6 +1486,14 @@  minstrel_ht_set_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi,
 
 	ratetbl->rate[offset].idx = idx;
 	ratetbl->rate[offset].flags = flags;
+
+#ifdef CONFIG_MAC80211_DEBUGFS
+	if (mi->fixed_txpower_idx != -1) {
+		ratetbl->rate[offset].txpower_idx = mi->fixed_txpower_idx;
+		return;
+	}
+#endif
+	ratetbl->rate[offset].txpower_idx = -1;
 }
 
 static inline int
@@ -1603,8 +1611,14 @@  minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
 	info->flags |= mi->tx_flags;
 
 #ifdef CONFIG_MAC80211_DEBUGFS
+	if (mi->fixed_txpower_idx != -1)
+		info->control.txpower_idx = mi->fixed_txpower_idx;
+
 	if (mp->fixed_rate_idx != -1)
 		return;
+#else
+	/* Pass -1 to indicate 'ignore txpower' or 'use default' */
+	info->control.txpower_idx = -1;
 #endif
 
 	/* Don't use EAPOL frames for sampling on non-mrr hw */
diff --git a/net/mac80211/rc80211_minstrel_ht.h b/net/mac80211/rc80211_minstrel_ht.h
index 1766ff0c78d3..15222d66c4b8 100644
--- a/net/mac80211/rc80211_minstrel_ht.h
+++ b/net/mac80211/rc80211_minstrel_ht.h
@@ -194,6 +194,17 @@  struct minstrel_ht_sta {
 
 	/* MCS rate group info and statistics */
 	struct minstrel_mcs_group_data groups[MINSTREL_GROUPS_NB];
+
+#ifdef CONFIG_MAC80211_DEBUGFS
+	/*
+	 * enable fixed tx-power processing per STA
+	 *   - write static index to debugfs:ieee80211/phyX/netdev:wlanY
+	 *   		/stations/<MAC>/rc_fixed_txpower_idx
+	 *   - write -1 to enable automatic processing again
+	 *   - setting will be applied on next update
+	 */
+	u32 fixed_txpower_idx;
+#endif
 };
 
 void minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir);
diff --git a/net/mac80211/rc80211_minstrel_ht_debugfs.c b/net/mac80211/rc80211_minstrel_ht_debugfs.c
index 25b8a67a63a4..d625d860d01a 100644
--- a/net/mac80211/rc80211_minstrel_ht_debugfs.c
+++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c
@@ -329,8 +329,19 @@  static const struct file_operations minstrel_ht_stat_csv_fops = {
 void
 minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir)
 {
+	struct minstrel_priv *mp = priv;
+	struct minstrel_ht_sta *mi = priv_sta;
+
 	debugfs_create_file("rc_stats", 0444, dir, priv_sta,
 			    &minstrel_ht_stat_fops);
 	debugfs_create_file("rc_stats_csv", 0444, dir, priv_sta,
 			    &minstrel_ht_stat_csv_fops);
+
+	if (ieee80211_hw_check(mp->hw, SUPPORTS_TPC_PER_PACKET) ||
+	    ieee80211_hw_check(mp->hw, SUPPORTS_TPC_PER_MRR))
+	{
+		mi->fixed_txpower_idx = (u32)-1;
+		debugfs_create_u32("rc_fixed_txpower_idx", S_IRUGO | S_IWUGO,
+				   dir, &mi->fixed_txpower_idx);
+	}
 }