wifi: mt76: mt7921: fix the wrong rate pickup for the chanctx driver
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 1/3 wifi: mt76: move struct ieee80211_chanctx_conf up to struct mt76_vif
From: Sean Wang <[email protected]>
Move struct ieee80211_chanctx_conf up to struct mt76_vif to allow the connac2 library can access the struct ieee80211_chanctx_conf * member in struct mt76_vif.
---
v2:
- rebase on the top of maintainer tree
- fix build error and apply the same change in mt792x core
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/mt7921/main.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt792x.h | 1 - drivers/net/wireless/mediatek/mt76/mt792x_core.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -712,6 +712,7 @@ struct mt76_vif {u8 basic_rates_idx;u8 mcast_rates_idx;u8 beacon_rates_idx; +struct ieee80211_chanctx_conf *ctx; };struct mt76_phy {
drivers/net/wireless/mediatek/mt76/mt7921/main.c +6 -6
@@ -753,7 +753,7 @@ void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_STATION && !sta->tdls)mt76_connac_mcu_uni_add_bss (&dev->mphy, vif, &mvif->sta.wcid, - true, mvif->ctx); + true, mvif->mt76.ctx);ewma_avg_signal_init (&msta->avg_ack_signal);
@@ -788,7 +788,7 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (!sta->tdls)mt76_connac_mcu_uni_add_bss (&dev->mphy, vif, &mvif->sta.wcid, false, - mvif->ctx); + mvif->mt76.ctx); }spin_lock_bh (&dev->mt76.sta_poll_lock);
@@ -1205,7 +1205,7 @@ mt7921_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,mt792x_mutex_acquire (dev); err =mt76_connac_mcu_uni_add_bss (phy->mt76, vif, &mvif->sta.wcid, - true, mvif->ctx); + true, mvif->mt76.ctx);if (err) goto out;
@@ -1237,7 +1237,7 @@ mt7921_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif, goto out;mt76_connac_mcu_uni_add_bss (phy->mt76, vif, &mvif->sta.wcid, false, - mvif->ctx); + mvif->mt76.ctx); out:mt792x_mutex_release (dev);
@@ -1262,7 +1262,7 @@ static void mt7921_ctx_iter(void *priv, u8 *mac,struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;struct ieee80211_chanctx_conf *ctx = priv; -if (ctx != mvif->ctx) +if (ctx != mvif->mt76.ctx)return ;if (vif->type ==NL80211_IFTYPE_MONITOR )
@@ -1295,7 +1295,7 @@ static void mt7921_mgd_prepare_tx(struct ieee80211_hw *hw,jiffies_to_msecs (HZ );mt792x_mutex_acquire (dev); -mt7921_set_roc (mvif->phy, mvif, mvif->ctx->def.chan, duration, +mt7921_set_roc (mvif->phy, mvif, mvif->mt76.ctx->def.chan, duration,MT7921_ROC_REQ_JOIN );mt792x_mutex_release (dev); }
drivers/net/wireless/mediatek/mt76/mt792x.h +0 -1
@@ -93,7 +93,6 @@ struct mt792x_vif {struct ewma_rssi rssi;struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS ]; -struct ieee80211_chanctx_conf *ctx; };struct mt792x_phy {
drivers/net/wireless/mediatek/mt76/mt792x_core.c +2 -2
@@ -243,7 +243,7 @@ int mt792x_assign_vif_chanctx(struct ieee80211_hw *hw,struct mt792x_dev *dev =mt792x_hw_dev (hw);mutex_lock (&dev->mt76.mutex); - mvif->ctx = ctx; + mvif->mt76.ctx = ctx;mutex_unlock (&dev->mt76.mutex);return 0 ;
@@ -259,7 +259,7 @@ void mt792x_unassign_vif_chanctx(struct ieee80211_hw *hw,struct mt792x_dev *dev =mt792x_hw_dev (hw);mutex_lock (&dev->mt76.mutex); - mvif->ctx =NULL ; + mvif->mt76.ctx =NULL ;mutex_unlock (&dev->mt76.mutex); }EXPORT_SYMBOL_GPL (mt792x_unassign_vif_chanctx);
Signature · 1 line
2.18.0
PATCH v2 2/3 wifi: mt76: mt7921: fix the wrong rate pickup for the chanctx driver
In reply to a message not in the archiveFrom: Sean Wang <[email protected]>
The variable band should be determined by the ieee80211_chanctx_conf when the driver is a kind of chanctx one e.g mt7921 and mt7922 driver so we added the extension to mt76_connac2_mac_tx_rate_val by distinguishing if it can support chanctx to fix the incorrect rate pickup.
---
v2: rebase on the top of maintainer tree
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 9 +++++++-- drivers/net/wireless/mediatek/mt76/mt76.h | 3 ++- drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 7 +++++-- 3 files changed, 14 insertions(+), 5 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +7 -2
@@ -1744,11 +1744,16 @@ mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc, }EXPORT_SYMBOL_GPL (mt76_init_queue); -u16 mt76_calculate_default_rate (struct mt76_phy *phy,int rateidx) +u16 mt76_calculate_default_rate (struct mt76_phy *phy, +struct ieee80211_vif *vif,int rateidx) { +struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; +struct cfg80211_chan_def *chandef = mvif->ctx ? + &mvif->ctx->def : + &phy->chandef;int offset =0 ; -if (phy->chandef.chan->band !=NL80211_BAND_2GHZ ) +if (chandef->chan->band !=NL80211_BAND_2GHZ ) offset =4 ;/* pick the lowest rate for hidden nodes */
drivers/net/wireless/mediatek/mt76/mt76.h +2 -1
@@ -1107,7 +1107,8 @@ int mt76_get_of_eeprom(struct mt76_dev *dev, void *data, int offset, int len);struct mt76_queue *mt76_init_queue (struct mt76_dev *dev,int qid,int idx,int n_desc,int ring_base,u32 flags); -u16 mt76_calculate_default_rate (struct mt76_phy *phy,int rateidx); +u16 mt76_calculate_default_rate (struct mt76_phy *phy, +struct ieee80211_vif *vif,int rateidx);static inline int mt76_init_tx_queue (struct mt76_phy *phy,int qid,int idx,int n_desc,int ring_base,u32 flags) {
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +5 -2
@@ -293,7 +293,10 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,struct ieee80211_vif *vif, bool beacon, bool mcast) { - u8 nss = 0, mode = 0, band = mphy->chandef.chan->band; + struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; +struct cfg80211_chan_def *chandef = mvif->ctx ? + &mvif->ctx->def : &mphy->chandef; +u8 nss =0 , mode =0 , band = chandef->chan->band;int rateidx =0 , mcast_rate;if (!vif)
@@ -326,7 +329,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, rateidx =ffs (vif->bss_conf.basic_rates) -1 ; legacy: - rateidx =mt76_calculate_default_rate (mphy, rateidx); + rateidx =mt76_calculate_default_rate (mphy, vif, rateidx); mode = rateidx >>8 ; rateidx &=GENMASK (7 ,0 ); out:
Signature · 1 line
2.18.0
PATCH v2 3/3 wifi: mt76: mt7921: fix the wrong rate selected in fw for the chanctx driver
In reply to a message not in the archiveFrom: Sean Wang <[email protected]>
The variable band should be determined by the ieee80211_chanctx_conf when the driver is a kind of chanctx one e.g mt7921 and mt7922 driver so we added the extension to mt76_connac2_mac_tx_rate_val and mt76_connac_get_he_phy_cap for the firmware can select the proper rate.
---
v2: rebase on the top of maintainer tree
--- drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +7 -2
@@ -841,7 +841,9 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,struct ieee80211_vif *vif, u8 rcpi, u8 sta_state) { - struct cfg80211_chan_def *chandef = &mphy->chandef; + struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; +struct cfg80211_chan_def *chandef = mvif->ctx ? + &mvif->ctx->def : &mphy->chandef;enum nl80211_band band = chandef->chan->band;struct mt76_dev *dev = mphy->dev;struct sta_rec_ra_info *ra_info;
@@ -1381,7 +1383,10 @@ EXPORT_SYMBOL_GPL(mt76_connac_get_phy_mode_ext);const struct ieee80211_sta_he_cap *mt76_connac_get_he_phy_cap (struct mt76_phy *phy,struct ieee80211_vif *vif) { -enum nl80211_band band = phy->chandef.chan->band; +struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; +struct cfg80211_chan_def *chandef = mvif->ctx ? + &mvif->ctx->def : &phy->chandef; +enum nl80211_band band = chandef->chan->band;struct ieee80211_supported_band *sband; sband = phy->hw->wiphy->bands[band];
Signature · 1 line
2.18.0