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@xxxxxxxxx> > --- > 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