wifi: mt76: mt7921: fix the wrong rate selected in fw for the chanctx driver
authorSean Wang <sean.wang@mediatek.com>
Mon, 18 Sep 2023 08:03:08 +0000 (16:03 +0800)
committerFelix Fietkau <nbd@nbd.name>
Sat, 30 Sep 2023 18:03:05 +0000 (20:03 +0200)
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.

Fixes: 41ac53c899bd ("wifi: mt76: mt7921: introduce chanctx support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Tested-by: David Ruth <druth@chromium.org>
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c

index 32512066e3aaeb032feb1d817eadc052d6feae8f..bcd6c20f37ad1372f3e03dd68792ba1663bc2135 100644 (file)
@@ -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];