| From 056ff64bf4b942ff77e1b5931cdabd236f9d0f83 Mon Sep 17 00:00:00 2001 |
| From: Shayne Chen <shayne.chen@mediatek.com> |
| Date: Mon, 11 Dec 2023 18:45:00 +0800 |
| Subject: [PATCH 098/116] wifi: mt76: connac: rework connac helpers |
| |
| Rework connac helpers related to rate and phymode. |
| This is a preliminary patch to add MLO support for mt7996 chipsets. |
| |
| Co-developed-by: Bo Jiao <Bo.Jiao@mediatek.com> |
| Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com> |
| Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> |
| --- |
| mt76_connac.h | 2 +- |
| mt76_connac_mac.c | 17 ++++++++--------- |
| mt76_connac_mcu.c | 6 +++--- |
| mt76_connac_mcu.h | 2 +- |
| mt7925/main.c | 2 +- |
| mt7996/main.c | 2 +- |
| mt7996/mcu.c | 2 +- |
| 7 files changed, 16 insertions(+), 17 deletions(-) |
| |
| diff --git a/mt76_connac.h b/mt76_connac.h |
| index 445d0f0..f7766a9 100644 |
| --- a/mt76_connac.h |
| +++ b/mt76_connac.h |
| @@ -427,7 +427,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, |
| struct ieee80211_key_conf *key, int pid, |
| enum mt76_txq_id qid, u32 changed); |
| u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, |
| - struct ieee80211_vif *vif, |
| + struct ieee80211_bss_conf *conf, |
| bool beacon, bool mcast); |
| bool mt76_connac2_mac_fill_txs(struct mt76_dev *dev, struct mt76_wcid *wcid, |
| __le32 *txs_data); |
| diff --git a/mt76_connac_mac.c b/mt76_connac_mac.c |
| index b841bf6..c1e9ba0 100644 |
| --- a/mt76_connac_mac.c |
| +++ b/mt76_connac_mac.c |
| @@ -291,12 +291,11 @@ EXPORT_SYMBOL_GPL(mt76_connac_init_tx_queues); |
| }) |
| |
| u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, |
| - struct ieee80211_vif *vif, |
| + struct ieee80211_bss_conf *conf, |
| bool beacon, bool mcast) |
| { |
| - struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; |
| - struct cfg80211_chan_def *chandef = mvif->ctx ? |
| - &mvif->ctx->def : &mphy->chandef; |
| + struct ieee80211_vif *vif = conf->vif; |
| + struct cfg80211_chan_def *chandef = &mphy->chandef; |
| u8 nss = 0, mode = 0, band = chandef->chan->band; |
| int rateidx = 0, mcast_rate; |
| |
| @@ -304,14 +303,14 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, |
| goto legacy; |
| |
| if (is_mt7921(mphy->dev)) { |
| - rateidx = ffs(vif->bss_conf.basic_rates) - 1; |
| + rateidx = ffs(conf->basic_rates) - 1; |
| goto legacy; |
| } |
| |
| if (beacon) { |
| struct cfg80211_bitrate_mask *mask; |
| |
| - mask = &vif->bss_conf.beacon_tx_rate; |
| + mask = &conf->beacon_tx_rate; |
| |
| __bitrate_mask_check(he_mcs, HE_SU); |
| __bitrate_mask_check(vht_mcs, VHT); |
| @@ -323,11 +322,11 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, |
| } |
| } |
| |
| - mcast_rate = vif->bss_conf.mcast_rate[band]; |
| + mcast_rate = conf->mcast_rate[band]; |
| if (mcast && mcast_rate > 0) |
| rateidx = mcast_rate - 1; |
| else |
| - rateidx = ffs(vif->bss_conf.basic_rates) - 1; |
| + rateidx = ffs(conf->basic_rates) - 1; |
| |
| legacy: |
| rateidx = mt76_calculate_default_rate(mphy, vif, rateidx); |
| @@ -561,7 +560,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, |
| struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
| bool multicast = ieee80211_is_data(hdr->frame_control) && |
| is_multicast_ether_addr(hdr->addr1); |
| - u16 rate = mt76_connac2_mac_tx_rate_val(mphy, vif, beacon, |
| + u16 rate = mt76_connac2_mac_tx_rate_val(mphy, &vif->bss_conf, beacon, |
| multicast); |
| u32 val = MT_TXD6_FIXED_BW; |
| |
| diff --git a/mt76_connac_mcu.c b/mt76_connac_mcu.c |
| index 9ea7471..71f3d30 100644 |
| --- a/mt76_connac_mcu.c |
| +++ b/mt76_connac_mcu.c |
| @@ -1361,7 +1361,7 @@ u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif, |
| } |
| EXPORT_SYMBOL_GPL(mt76_connac_get_phy_mode); |
| |
| -u8 mt76_connac_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_vif *vif, |
| +u8 mt76_connac_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_bss_conf *conf, |
| enum nl80211_band band) |
| { |
| const struct ieee80211_sta_eht_cap *eht_cap; |
| @@ -1372,9 +1372,9 @@ u8 mt76_connac_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_vif *vif, |
| mode |= PHY_MODE_AX_6G; |
| |
| sband = phy->hw->wiphy->bands[band]; |
| - eht_cap = ieee80211_get_eht_iftype_cap(sband, vif->type); |
| + eht_cap = ieee80211_get_eht_iftype_cap(sband, conf->vif->type); |
| |
| - if (!eht_cap || !eht_cap->has_eht || !vif->bss_conf.eht_support) |
| + if (!eht_cap || !eht_cap->has_eht || !conf->eht_support) |
| return mode; |
| |
| switch (band) { |
| diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h |
| index b93b5e0..4d0fd4b 100644 |
| --- a/mt76_connac_mcu.h |
| +++ b/mt76_connac_mcu.h |
| @@ -2023,7 +2023,7 @@ mt76_connac_get_eht_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif); |
| u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif, |
| enum nl80211_band band, |
| struct ieee80211_link_sta *link_sta); |
| -u8 mt76_connac_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_vif *vif, |
| +u8 mt76_connac_get_phy_mode_ext(struct mt76_phy *phy, struct ieee80211_bss_conf *conf, |
| enum nl80211_band band); |
| |
| int mt76_connac_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif, |
| diff --git a/mt7925/main.c b/mt7925/main.c |
| index 1f07ec5..6d7ec77 100644 |
| --- a/mt7925/main.c |
| +++ b/mt7925/main.c |
| @@ -675,7 +675,7 @@ mt7925_get_rates_table(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
| u16 rate; |
| u8 i, idx, ht; |
| |
| - rate = mt76_connac2_mac_tx_rate_val(mphy, vif, beacon, mcast); |
| + rate = mt76_connac2_mac_tx_rate_val(mphy, &vif->bss_conf, beacon, mcast); |
| ht = FIELD_GET(MT_TX_RATE_MODE, rate) > MT_PHY_TYPE_OFDM; |
| |
| if (beacon && ht) { |
| diff --git a/mt7996/main.c b/mt7996/main.c |
| index a94955c..0245b6b 100644 |
| --- a/mt7996/main.c |
| +++ b/mt7996/main.c |
| @@ -804,7 +804,7 @@ mt7996_get_rates_table(struct ieee80211_hw *hw, struct ieee80211_bss_conf *conf, |
| u16 rate; |
| u8 i, idx; |
| |
| - rate = mt76_connac2_mac_tx_rate_val(mphy, conf->vif, beacon, mcast); |
| + rate = mt76_connac2_mac_tx_rate_val(mphy, conf, beacon, mcast); |
| |
| if (beacon) { |
| struct mt7996_phy *phy = mphy->priv; |
| diff --git a/mt7996/mcu.c b/mt7996/mcu.c |
| index 7f31dd9..f3d162a 100644 |
| --- a/mt7996/mcu.c |
| +++ b/mt7996/mcu.c |
| @@ -1219,7 +1219,7 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb, struct ieee80211_bss_conf *conf, |
| bss->dtim_period = conf->dtim_period; |
| bss->phymode = mt76_connac_get_phy_mode(phy, vif, |
| chandef->chan->band, NULL); |
| - bss->phymode_ext = mt76_connac_get_phy_mode_ext(phy, vif, |
| + bss->phymode_ext = mt76_connac_get_phy_mode_ext(phy, conf, |
| chandef->chan->band); |
| |
| return 0; |
| -- |
| 2.18.0 |
| |