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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:58:59 +0000 (11:58 +0100)
[ Upstream commit c558d22e7a93affeb18aae1dcd777ddd1ad18da1 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c

index 0f0a519..8274a57 100644 (file)
@@ -829,7 +829,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;
@@ -1369,7 +1371,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];