]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop some unneeded mt76 patches from 5.18
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Aug 2022 13:34:54 +0000 (15:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Aug 2022 13:34:54 +0000 (15:34 +0200)
queue-5.18/mt76-connac-move-connac2_mac_write_txwi-in-mt76_conn.patch [deleted file]
queue-5.18/mt76-connac-move-mac-connac2-defs-in-mt76_connac2_ma.patch [deleted file]
queue-5.18/mt76-mt7915-add-support-for-6g-in-band-discovery.patch [deleted file]
queue-5.18/mt76-mt7915-fix-incorrect-testmode-ipg-on-band-1-cau.patch [deleted file]
queue-5.18/mt76-mt7915-rely-on-mt76_dev-in-mt7915_mac_write_txw.patch [deleted file]
queue-5.18/mt76-mt7921-add-ap-mode-support.patch [deleted file]
queue-5.18/mt76-mt7921-rely-on-mt76_dev-in-mt7921_mac_write_txw.patch [deleted file]

diff --git a/queue-5.18/mt76-connac-move-connac2_mac_write_txwi-in-mt76_conn.patch b/queue-5.18/mt76-connac-move-connac2_mac_write_txwi-in-mt76_conn.patch
deleted file mode 100644 (file)
index ecbcd19..0000000
+++ /dev/null
@@ -1,946 +0,0 @@
-From 5536ffc5cd4009a333107d0930b7d281ecfe637f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 7 Jun 2022 11:28:40 +0200
-Subject: mt76: connac: move connac2_mac_write_txwi in mt76_connac module
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit 182071cdd594bc79f42899c85afa995c370ef82d ]
-
-mac_write_txwi code is shared between connac2 devices (mt7915 and
-mt7921). Move it in connac module.
-
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/wireless/mediatek/mt76/mt76_connac.h  |   6 +
- .../wireless/mediatek/mt76/mt76_connac_mac.c  | 284 ++++++++++++++++++
- .../net/wireless/mediatek/mt76/mt7915/mac.c   | 251 +---------------
- .../net/wireless/mediatek/mt76/mt7915/mcu.c   |   2 +-
- .../wireless/mediatek/mt76/mt7915/mt7915.h    |   1 -
- .../net/wireless/mediatek/mt76/mt7921/mac.c   | 212 +------------
- .../net/wireless/mediatek/mt76/mt7921/main.c  |   2 +-
- .../net/wireless/mediatek/mt76/mt7921/mcu.c   |   4 +-
- .../wireless/mediatek/mt76/mt7921/mt7921.h    |   5 -
- .../wireless/mediatek/mt76/mt7921/pci_mac.c   |   4 +-
- 10 files changed, 299 insertions(+), 472 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
-index 400ba514460e..a9d7a269fcf3 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
-@@ -12,6 +12,8 @@
- #define MT76_CONNAC_MAX_SCHED_SCAN_SSID               10
- #define MT76_CONNAC_MAX_SCAN_MATCH            16
-+#define MT76_CONNAC_MAX_WMM_SETS              4
-+
- #define MT76_CONNAC_COREDUMP_TIMEOUT          (HZ / 20)
- #define MT76_CONNAC_COREDUMP_SZ                       (1300 * 1024)
-@@ -244,5 +246,9 @@ void mt76_connac_pm_queue_skb(struct ieee80211_hw *hw,
-                             struct sk_buff *skb);
- void mt76_connac_pm_dequeue_skbs(struct mt76_phy *phy,
-                                struct mt76_connac_pm *pm);
-+void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-+                               struct sk_buff *skb, struct mt76_wcid *wcid,
-+                               struct ieee80211_key_conf *key, int pid,
-+                               u32 changed);
- #endif /* __MT76_CONNAC_H */
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
-index 306e9eaea917..0ea795565c88 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
-@@ -2,6 +2,7 @@
- /* Copyright (C) 2020 MediaTek Inc. */
- #include "mt76_connac.h"
-+#include "mt76_connac2_mac.h"
- int mt76_connac_pm_wake(struct mt76_phy *phy, struct mt76_connac_pm *pm)
- {
-@@ -115,3 +116,286 @@ void mt76_connac_pm_dequeue_skbs(struct mt76_phy *phy,
-       mt76_worker_schedule(&phy->dev->tx_worker);
- }
- EXPORT_SYMBOL_GPL(mt76_connac_pm_dequeue_skbs);
-+
-+static u16
-+mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
-+                           bool beacon, bool mcast)
-+{
-+      u8 mode = 0, band = mphy->chandef.chan->band;
-+      int rateidx = 0, mcast_rate;
-+
-+      if (!vif)
-+              goto legacy;
-+
-+      if (is_mt7921(mphy->dev)) {
-+              rateidx = ffs(vif->bss_conf.basic_rates) - 1;
-+              goto legacy;
-+      }
-+
-+      if (beacon) {
-+              struct cfg80211_bitrate_mask *mask;
-+
-+              mask = &vif->bss_conf.beacon_tx_rate;
-+              if (hweight16(mask->control[band].he_mcs[0]) == 1) {
-+                      rateidx = ffs(mask->control[band].he_mcs[0]) - 1;
-+                      mode = MT_PHY_TYPE_HE_SU;
-+                      goto out;
-+              } else if (hweight16(mask->control[band].vht_mcs[0]) == 1) {
-+                      rateidx = ffs(mask->control[band].vht_mcs[0]) - 1;
-+                      mode = MT_PHY_TYPE_VHT;
-+                      goto out;
-+              } else if (hweight8(mask->control[band].ht_mcs[0]) == 1) {
-+                      rateidx = ffs(mask->control[band].ht_mcs[0]) - 1;
-+                      mode = MT_PHY_TYPE_HT;
-+                      goto out;
-+              } else if (hweight32(mask->control[band].legacy) == 1) {
-+                      rateidx = ffs(mask->control[band].legacy) - 1;
-+                      goto legacy;
-+              }
-+      }
-+
-+      mcast_rate = vif->bss_conf.mcast_rate[band];
-+      if (mcast && mcast_rate > 0)
-+              rateidx = mcast_rate - 1;
-+      else
-+              rateidx = ffs(vif->bss_conf.basic_rates) - 1;
-+
-+legacy:
-+      rateidx = mt76_calculate_default_rate(mphy, rateidx);
-+      mode = rateidx >> 8;
-+      rateidx &= GENMASK(7, 0);
-+
-+out:
-+      return FIELD_PREP(MT_TX_RATE_IDX, rateidx) |
-+             FIELD_PREP(MT_TX_RATE_MODE, mode);
-+}
-+
-+static void
-+mt76_connac2_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
-+                               struct mt76_wcid *wcid)
-+{
-+      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-+      u8 fc_type, fc_stype;
-+      u16 ethertype;
-+      bool wmm = false;
-+      u32 val;
-+
-+      if (wcid->sta) {
-+              struct ieee80211_sta *sta;
-+
-+              sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
-+              wmm = sta->wme;
-+      }
-+
-+      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) |
-+            FIELD_PREP(MT_TXD1_TID, tid);
-+
-+      ethertype = get_unaligned_be16(&skb->data[12]);
-+      if (ethertype >= ETH_P_802_3_MIN)
-+              val |= MT_TXD1_ETH_802_3;
-+
-+      txwi[1] |= cpu_to_le32(val);
-+
-+      fc_type = IEEE80211_FTYPE_DATA >> 2;
-+      fc_stype = wmm ? IEEE80211_STYPE_QOS_DATA >> 4 : 0;
-+
-+      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-+            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
-+
-+      txwi[2] |= cpu_to_le32(val);
-+
-+      val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-+            FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
-+
-+      txwi[7] |= cpu_to_le32(val);
-+}
-+
-+static void
-+mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
-+                                struct sk_buff *skb,
-+                                struct ieee80211_key_conf *key)
-+{
-+      struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+      struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-+      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-+      bool multicast = is_multicast_ether_addr(hdr->addr1);
-+      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-+      __le16 fc = hdr->frame_control;
-+      u8 fc_type, fc_stype;
-+      u32 val;
-+
-+      if (ieee80211_is_action(fc) &&
-+          mgmt->u.action.category == WLAN_CATEGORY_BACK &&
-+          mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
-+              u16 capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab);
-+
-+              txwi[5] |= cpu_to_le32(MT_TXD5_ADD_BA);
-+              tid = (capab >> 2) & IEEE80211_QOS_CTL_TID_MASK;
-+      } else if (ieee80211_is_back_req(hdr->frame_control)) {
-+              struct ieee80211_bar *bar = (struct ieee80211_bar *)hdr;
-+              u16 control = le16_to_cpu(bar->control);
-+
-+              tid = FIELD_GET(IEEE80211_BAR_CTRL_TID_INFO_MASK, control);
-+      }
-+
-+      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
-+            FIELD_PREP(MT_TXD1_HDR_INFO,
-+                       ieee80211_get_hdrlen_from_skb(skb) / 2) |
-+            FIELD_PREP(MT_TXD1_TID, tid);
-+
-+      txwi[1] |= cpu_to_le32(val);
-+
-+      fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
-+      fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
-+
-+      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-+            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype) |
-+            FIELD_PREP(MT_TXD2_MULTICAST, multicast);
-+
-+      if (key && multicast && ieee80211_is_robust_mgmt_frame(skb) &&
-+          key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
-+              val |= MT_TXD2_BIP;
-+              txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
-+      }
-+
-+      if (!ieee80211_is_data(fc) || multicast ||
-+          info->flags & IEEE80211_TX_CTL_USE_MINRATE)
-+              val |= MT_TXD2_FIX_RATE;
-+
-+      txwi[2] |= cpu_to_le32(val);
-+
-+      if (ieee80211_is_beacon(fc)) {
-+              txwi[3] &= ~cpu_to_le32(MT_TXD3_SW_POWER_MGMT);
-+              txwi[3] |= cpu_to_le32(MT_TXD3_REM_TX_COUNT);
-+              if (!is_mt7921(dev))
-+                      txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX,
-+                                                        0x18));
-+      }
-+
-+      if (info->flags & IEEE80211_TX_CTL_INJECTED) {
-+              u16 seqno = le16_to_cpu(hdr->seq_ctrl);
-+
-+              if (ieee80211_is_back_req(hdr->frame_control)) {
-+                      struct ieee80211_bar *bar;
-+
-+                      bar = (struct ieee80211_bar *)skb->data;
-+                      seqno = le16_to_cpu(bar->start_seq_num);
-+              }
-+
-+              val = MT_TXD3_SN_VALID |
-+                    FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
-+              txwi[3] |= cpu_to_le32(val);
-+              txwi[7] &= ~cpu_to_le32(MT_TXD7_HW_AMSDU);
-+      }
-+
-+      if (mt76_is_mmio(dev)) {
-+              val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-+                    FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
-+              txwi[7] |= cpu_to_le32(val);
-+      } else {
-+              val = FIELD_PREP(MT_TXD8_L_TYPE, fc_type) |
-+                    FIELD_PREP(MT_TXD8_L_SUB_TYPE, fc_stype);
-+              txwi[8] |= cpu_to_le32(val);
-+      }
-+}
-+
-+void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-+                               struct sk_buff *skb, struct mt76_wcid *wcid,
-+                               struct ieee80211_key_conf *key, int pid,
-+                               u32 changed)
-+{
-+      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-+      bool ext_phy = info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY;
-+      struct ieee80211_vif *vif = info->control.vif;
-+      struct mt76_phy *mphy = &dev->phy;
-+      u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0, band_idx = 0;
-+      u32 val, sz_txd = mt76_is_mmio(dev) ? MT_TXD_SIZE : MT_SDIO_TXD_SIZE;
-+      bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-+      bool beacon = !!(changed & (BSS_CHANGED_BEACON |
-+                                  BSS_CHANGED_BEACON_ENABLED));
-+      bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-+                                       BSS_CHANGED_FILS_DISCOVERY));
-+
-+      if (vif) {
-+              struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-+
-+              omac_idx = mvif->omac_idx;
-+              wmm_idx = mvif->wmm_idx;
-+              band_idx = mvif->band_idx;
-+      }
-+
-+      if (ext_phy && dev->phy2)
-+              mphy = dev->phy2;
-+
-+      if (inband_disc) {
-+              p_fmt = MT_TX_TYPE_FW;
-+              q_idx = MT_LMAC_ALTX0;
-+      } else if (beacon) {
-+              p_fmt = MT_TX_TYPE_FW;
-+              q_idx = MT_LMAC_BCN0;
-+      } else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
-+              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-+              q_idx = MT_LMAC_ALTX0;
-+      } else {
-+              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-+              q_idx = wmm_idx * MT76_CONNAC_MAX_WMM_SETS +
-+                      mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
-+      }
-+
-+      val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + sz_txd) |
-+            FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
-+            FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
-+      txwi[0] = cpu_to_le32(val);
-+
-+      val = MT_TXD1_LONG_FORMAT |
-+            FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
-+            FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
-+      if (!is_mt7921(dev))
-+              val |= MT_TXD1_VTA;
-+      if (ext_phy || band_idx)
-+              val |= MT_TXD1_TGID;
-+
-+      txwi[1] = cpu_to_le32(val);
-+      txwi[2] = 0;
-+
-+      val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 15);
-+      if (!is_mt7921(dev))
-+              val |= MT_TXD3_SW_POWER_MGMT;
-+      if (key)
-+              val |= MT_TXD3_PROTECT_FRAME;
-+      if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-+              val |= MT_TXD3_NO_ACK;
-+
-+      txwi[3] = cpu_to_le32(val);
-+      txwi[4] = 0;
-+
-+      val = FIELD_PREP(MT_TXD5_PID, pid);
-+      if (pid >= MT_PACKET_ID_FIRST)
-+              val |= MT_TXD5_TX_STATUS_HOST;
-+
-+      txwi[5] = cpu_to_le32(val);
-+      txwi[6] = 0;
-+      txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
-+
-+      if (is_8023)
-+              mt76_connac2_mac_write_txwi_8023(txwi, skb, wcid);
-+      else
-+              mt76_connac2_mac_write_txwi_80211(dev, txwi, skb, key);
-+
-+      if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
-+              /* Fixed rata is available just for 802.11 txd */
-+              struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+              bool multicast = is_multicast_ether_addr(hdr->addr1);
-+              u16 rate = mt76_connac2_mac_tx_rate_val(mphy, vif, beacon,
-+                                                      multicast);
-+              u32 val = MT_TXD6_FIXED_BW;
-+
-+              /* hardware won't add HTC for mgmt/ctrl frame */
-+              txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD);
-+
-+              val |= FIELD_PREP(MT_TXD6_TX_RATE, rate);
-+              txwi[6] |= cpu_to_le32(val);
-+              txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
-+      }
-+}
-+EXPORT_SYMBOL_GPL(mt76_connac2_mac_write_txwi);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-index d65a873739af..9bf8db47d103 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-@@ -1013,265 +1013,18 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
- #endif
- }
--static void
--mt7915_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
--                         struct mt76_wcid *wcid)
--{
--
--      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
--      u8 fc_type, fc_stype;
--      u16 ethertype;
--      bool wmm = false;
--      u32 val;
--
--      if (wcid->sta) {
--              struct ieee80211_sta *sta;
--
--              sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
--              wmm = sta->wme;
--      }
--
--      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) |
--            FIELD_PREP(MT_TXD1_TID, tid);
--
--      ethertype = get_unaligned_be16(&skb->data[12]);
--      if (ethertype >= ETH_P_802_3_MIN)
--              val |= MT_TXD1_ETH_802_3;
--
--      txwi[1] |= cpu_to_le32(val);
--
--      fc_type = IEEE80211_FTYPE_DATA >> 2;
--      fc_stype = wmm ? IEEE80211_STYPE_QOS_DATA >> 4 : 0;
--
--      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
--
--      txwi[2] |= cpu_to_le32(val);
--
--      val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
--      txwi[7] |= cpu_to_le32(val);
--}
--
--static void
--mt7915_mac_write_txwi_80211(__le32 *txwi, struct sk_buff *skb,
--                          struct ieee80211_key_conf *key, bool *mcast)
--{
--      struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
--      struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
--      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
--      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
--      __le16 fc = hdr->frame_control;
--      u8 fc_type, fc_stype;
--      u32 val;
--
--      *mcast = is_multicast_ether_addr(hdr->addr1);
--
--      if (ieee80211_is_action(fc) &&
--          mgmt->u.action.category == WLAN_CATEGORY_BACK &&
--          mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
--              u16 capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab);
--
--              txwi[5] |= cpu_to_le32(MT_TXD5_ADD_BA);
--              tid = (capab >> 2) & IEEE80211_QOS_CTL_TID_MASK;
--      } else if (ieee80211_is_back_req(hdr->frame_control)) {
--              struct ieee80211_bar *bar = (struct ieee80211_bar *)hdr;
--              u16 control = le16_to_cpu(bar->control);
--
--              tid = FIELD_GET(IEEE80211_BAR_CTRL_TID_INFO_MASK, control);
--      }
--
--      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
--            FIELD_PREP(MT_TXD1_HDR_INFO,
--                       ieee80211_get_hdrlen_from_skb(skb) / 2) |
--            FIELD_PREP(MT_TXD1_TID, tid);
--      txwi[1] |= cpu_to_le32(val);
--
--      fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
--      fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
--
--      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype) |
--            FIELD_PREP(MT_TXD2_MULTICAST, *mcast);
--
--      if (key && *mcast && ieee80211_is_robust_mgmt_frame(skb) &&
--          key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
--              val |= MT_TXD2_BIP;
--              txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
--      }
--
--      if (!ieee80211_is_data(fc) || *mcast ||
--          info->flags & IEEE80211_TX_CTL_USE_MINRATE)
--              val |= MT_TXD2_FIX_RATE;
--
--      txwi[2] |= cpu_to_le32(val);
--
--      if (ieee80211_is_beacon(fc)) {
--              txwi[3] &= ~cpu_to_le32(MT_TXD3_SW_POWER_MGMT);
--              txwi[3] |= cpu_to_le32(MT_TXD3_REM_TX_COUNT);
--              txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX, 0x18));
--      }
--
--      if (info->flags & IEEE80211_TX_CTL_INJECTED) {
--              u16 seqno = le16_to_cpu(hdr->seq_ctrl);
--
--              if (ieee80211_is_back_req(hdr->frame_control)) {
--                      struct ieee80211_bar *bar;
--
--                      bar = (struct ieee80211_bar *)skb->data;
--                      seqno = le16_to_cpu(bar->start_seq_num);
--              }
--
--              val = MT_TXD3_SN_VALID |
--                    FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
--              txwi[3] |= cpu_to_le32(val);
--              txwi[7] &= ~cpu_to_le32(MT_TXD7_HW_AMSDU);
--      }
--
--      val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
--      txwi[7] |= cpu_to_le32(val);
--}
--
--static u16
--mt7915_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
--                     bool beacon, bool mcast)
--{
--      u8 mode = 0, band = mphy->chandef.chan->band;
--      int rateidx = 0, mcast_rate;
--
--      if (beacon) {
--              struct cfg80211_bitrate_mask *mask;
--
--              mask = &vif->bss_conf.beacon_tx_rate;
--              if (hweight16(mask->control[band].he_mcs[0]) == 1) {
--                      rateidx = ffs(mask->control[band].he_mcs[0]) - 1;
--                      mode = MT_PHY_TYPE_HE_SU;
--                      goto out;
--              } else if (hweight16(mask->control[band].vht_mcs[0]) == 1) {
--                      rateidx = ffs(mask->control[band].vht_mcs[0]) - 1;
--                      mode = MT_PHY_TYPE_VHT;
--                      goto out;
--              } else if (hweight8(mask->control[band].ht_mcs[0]) == 1) {
--                      rateidx = ffs(mask->control[band].ht_mcs[0]) - 1;
--                      mode = MT_PHY_TYPE_HT;
--                      goto out;
--              } else if (hweight32(mask->control[band].legacy) == 1) {
--                      rateidx = ffs(mask->control[band].legacy) - 1;
--                      goto legacy;
--              }
--      }
--
--      mcast_rate = vif->bss_conf.mcast_rate[band];
--      if (mcast && mcast_rate > 0)
--              rateidx = mcast_rate - 1;
--      else
--              rateidx = ffs(vif->bss_conf.basic_rates) - 1;
--
--legacy:
--      rateidx = mt76_calculate_default_rate(mphy, rateidx);
--      mode = rateidx >> 8;
--      rateidx &= GENMASK(7, 0);
--
--out:
--      return FIELD_PREP(MT_TX_RATE_IDX, rateidx) |
--             FIELD_PREP(MT_TX_RATE_MODE, mode);
--}
--
- void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-                          struct ieee80211_key_conf *key, u32 changed)
- {
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
--      struct ieee80211_vif *vif = info->control.vif;
-       struct mt76_phy *mphy = &dev->phy;
--      bool ext_phy = info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY;
--      u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0, band_idx = 0;
--      bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
--      bool mcast = false;
--      u16 tx_count = 15;
--      u32 val;
--      bool beacon = !!(changed & (BSS_CHANGED_BEACON |
--                                  BSS_CHANGED_BEACON_ENABLED));
--      bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
--                                       BSS_CHANGED_FILS_DISCOVERY));
--      if (vif) {
--              struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
--
--              omac_idx = mvif->mt76.omac_idx;
--              wmm_idx = mvif->mt76.wmm_idx;
--              band_idx = mvif->mt76.band_idx;
--      }
--
--      if (ext_phy && dev->phy2)
-+      if ((info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY) && dev->phy2)
-               mphy = dev->phy2;
--      if (inband_disc) {
--              p_fmt = MT_TX_TYPE_FW;
--              q_idx = MT_LMAC_ALTX0;
--      } else if (beacon) {
--              p_fmt = MT_TX_TYPE_FW;
--              q_idx = MT_LMAC_BCN0;
--      } else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
--              p_fmt = MT_TX_TYPE_CT;
--              q_idx = MT_LMAC_ALTX0;
--      } else {
--              p_fmt = MT_TX_TYPE_CT;
--              q_idx = wmm_idx * MT7915_MAX_WMM_SETS +
--                      mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
--      }
--
--      val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + MT_TXD_SIZE) |
--            FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
--            FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
--      txwi[0] = cpu_to_le32(val);
--
--      val = MT_TXD1_LONG_FORMAT | MT_TXD1_VTA |
--            FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
--            FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
--
--      if (ext_phy || band_idx)
--              val |= MT_TXD1_TGID;
--
--      txwi[1] = cpu_to_le32(val);
--
--      txwi[2] = 0;
-+      mt76_connac2_mac_write_txwi(dev, txwi, skb, wcid, key, pid, changed);
--      val = MT_TXD3_SW_POWER_MGMT |
--            FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count);
--      if (key)
--              val |= MT_TXD3_PROTECT_FRAME;
--      if (info->flags & IEEE80211_TX_CTL_NO_ACK)
--              val |= MT_TXD3_NO_ACK;
--
--      txwi[3] = cpu_to_le32(val);
--      txwi[4] = 0;
--
--      val = FIELD_PREP(MT_TXD5_PID, pid);
--      if (pid >= MT_PACKET_ID_FIRST)
--              val |= MT_TXD5_TX_STATUS_HOST;
--      txwi[5] = cpu_to_le32(val);
--
--      txwi[6] = 0;
--      txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
--
--      if (is_8023)
--              mt7915_mac_write_txwi_8023(txwi, skb, wcid);
--      else
--              mt7915_mac_write_txwi_80211(txwi, skb, key, &mcast);
--
--      if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
--              u16 rate = mt7915_mac_tx_rate_val(mphy, vif, beacon, mcast);
--
--              /* hardware won't add HTC for mgmt/ctrl frame */
--              txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD);
--
--              val = MT_TXD6_FIXED_BW |
--                    FIELD_PREP(MT_TXD6_TX_RATE, rate);
--              txwi[6] |= cpu_to_le32(val);
--              txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
--      }
-       if (mt76_testmode_enabled(mphy))
-               mt7915_mac_write_txwi_tm(mphy->priv, txwi, skb);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-index 0ef3952bc33c..695c38a6f90c 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-@@ -2701,7 +2701,7 @@ int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif)
-               struct edca *e = &req.edca[ac];
-               e->set = WMM_PARAM_SET;
--              e->queue = ac + mvif->mt76.wmm_idx * MT7915_MAX_WMM_SETS;
-+              e->queue = ac + mvif->mt76.wmm_idx * MT76_CONNAC_MAX_WMM_SETS;
-               e->aifs = q->aifs;
-               e->txop = cpu_to_le16(q->txop);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-index 41d76e24dd8b..6e4bff51b427 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-@@ -10,7 +10,6 @@
- #include "regs.h"
- #define MT7915_MAX_INTERFACES         19
--#define MT7915_MAX_WMM_SETS           4
- #define MT7915_WTBL_SIZE              288
- #define MT7916_WTBL_SIZE              544
- #define MT7915_WTBL_RESERVED          (mt7915_wtbl_size(dev) - 1)
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-index 3ae7989c8500..297f3630537e 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-@@ -808,216 +808,6 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
-       return 0;
- }
--static void
--mt7921_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
--                         struct mt76_wcid *wcid)
--{
--      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
--      u8 fc_type, fc_stype;
--      u16 ethertype;
--      bool wmm = false;
--      u32 val;
--
--      if (wcid->sta) {
--              struct ieee80211_sta *sta;
--
--              sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
--              wmm = sta->wme;
--      }
--
--      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) |
--            FIELD_PREP(MT_TXD1_TID, tid);
--
--      ethertype = get_unaligned_be16(&skb->data[12]);
--      if (ethertype >= ETH_P_802_3_MIN)
--              val |= MT_TXD1_ETH_802_3;
--
--      txwi[1] |= cpu_to_le32(val);
--
--      fc_type = IEEE80211_FTYPE_DATA >> 2;
--      fc_stype = wmm ? IEEE80211_STYPE_QOS_DATA >> 4 : 0;
--
--      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
--
--      txwi[2] |= cpu_to_le32(val);
--
--      val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
--      txwi[7] |= cpu_to_le32(val);
--}
--
--static void
--mt7921_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
--                          struct sk_buff *skb, struct ieee80211_key_conf *key)
--{
--      struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
--      struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
--      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
--      bool multicast = is_multicast_ether_addr(hdr->addr1);
--      u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
--      __le16 fc = hdr->frame_control;
--      u8 fc_type, fc_stype;
--      u32 val;
--
--      if (ieee80211_is_action(fc) &&
--          mgmt->u.action.category == WLAN_CATEGORY_BACK &&
--          mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
--              u16 capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab);
--
--              txwi[5] |= cpu_to_le32(MT_TXD5_ADD_BA);
--              tid = (capab >> 2) & IEEE80211_QOS_CTL_TID_MASK;
--      } else if (ieee80211_is_back_req(hdr->frame_control)) {
--              struct ieee80211_bar *bar = (struct ieee80211_bar *)hdr;
--              u16 control = le16_to_cpu(bar->control);
--
--              tid = FIELD_GET(IEEE80211_BAR_CTRL_TID_INFO_MASK, control);
--      }
--
--      val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
--            FIELD_PREP(MT_TXD1_HDR_INFO,
--                       ieee80211_get_hdrlen_from_skb(skb) / 2) |
--            FIELD_PREP(MT_TXD1_TID, tid);
--      txwi[1] |= cpu_to_le32(val);
--
--      fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
--      fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
--
--      val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
--            FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype) |
--            FIELD_PREP(MT_TXD2_MULTICAST, multicast);
--
--      if (key && multicast && ieee80211_is_robust_mgmt_frame(skb) &&
--          key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
--              val |= MT_TXD2_BIP;
--              txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
--      }
--
--      if (!ieee80211_is_data(fc) || multicast ||
--          info->flags & IEEE80211_TX_CTL_USE_MINRATE)
--              val |= MT_TXD2_FIX_RATE;
--
--      txwi[2] |= cpu_to_le32(val);
--
--      if (ieee80211_is_beacon(fc)) {
--              txwi[3] &= ~cpu_to_le32(MT_TXD3_SW_POWER_MGMT);
--              txwi[3] |= cpu_to_le32(MT_TXD3_REM_TX_COUNT);
--      }
--
--      if (info->flags & IEEE80211_TX_CTL_INJECTED) {
--              u16 seqno = le16_to_cpu(hdr->seq_ctrl);
--
--              if (ieee80211_is_back_req(hdr->frame_control)) {
--                      struct ieee80211_bar *bar;
--
--                      bar = (struct ieee80211_bar *)skb->data;
--                      seqno = le16_to_cpu(bar->start_seq_num);
--              }
--
--              val = MT_TXD3_SN_VALID |
--                    FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
--              txwi[3] |= cpu_to_le32(val);
--              txwi[7] &= ~cpu_to_le32(MT_TXD7_HW_AMSDU);
--      }
--
--      if (mt76_is_mmio(dev)) {
--              val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
--                    FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
--              txwi[7] |= cpu_to_le32(val);
--      } else {
--              val = FIELD_PREP(MT_TXD8_L_TYPE, fc_type) |
--                    FIELD_PREP(MT_TXD8_L_SUB_TYPE, fc_stype);
--              txwi[8] |= cpu_to_le32(val);
--      }
--}
--
--void mt7921_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
--                         struct sk_buff *skb, struct mt76_wcid *wcid,
--                         struct ieee80211_key_conf *key, int pid,
--                         bool beacon)
--{
--      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
--      struct ieee80211_vif *vif = info->control.vif;
--      struct mt76_phy *mphy = &dev->phy;
--      u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
--      u32 sz_txd = mt76_is_mmio(dev) ? MT_TXD_SIZE : MT_SDIO_TXD_SIZE;
--      bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
--      u16 tx_count = 15;
--      u32 val;
--
--      if (vif) {
--              struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
--
--              omac_idx = mvif->omac_idx;
--              wmm_idx = mvif->wmm_idx;
--      }
--
--      if (beacon) {
--              p_fmt = MT_TX_TYPE_FW;
--              q_idx = MT_LMAC_BCN0;
--      } else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
--              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
--              q_idx = MT_LMAC_ALTX0;
--      } else {
--              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
--              q_idx = wmm_idx * MT7921_MAX_WMM_SETS +
--                      mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
--      }
--
--      val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + sz_txd) |
--            FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
--            FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
--      txwi[0] = cpu_to_le32(val);
--
--      val = MT_TXD1_LONG_FORMAT |
--            FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
--            FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
--
--      txwi[1] = cpu_to_le32(val);
--      txwi[2] = 0;
--
--      val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count);
--      if (key)
--              val |= MT_TXD3_PROTECT_FRAME;
--      if (info->flags & IEEE80211_TX_CTL_NO_ACK)
--              val |= MT_TXD3_NO_ACK;
--
--      txwi[3] = cpu_to_le32(val);
--      txwi[4] = 0;
--
--      val = FIELD_PREP(MT_TXD5_PID, pid);
--      if (pid >= MT_PACKET_ID_FIRST)
--              val |= MT_TXD5_TX_STATUS_HOST;
--      txwi[5] = cpu_to_le32(val);
--
--      txwi[6] = 0;
--      txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
--
--      if (is_8023)
--              mt7921_mac_write_txwi_8023(txwi, skb, wcid);
--      else
--              mt7921_mac_write_txwi_80211(dev, txwi, skb, key);
--
--      if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
--              int rateidx = vif ? ffs(vif->bss_conf.basic_rates) - 1 : 0;
--              u16 rate, mode;
--
--              /* hardware won't add HTC for mgmt/ctrl frame */
--              txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD);
--
--              rate = mt76_calculate_default_rate(mphy, rateidx);
--              mode = rate >> 8;
--              rate &= GENMASK(7, 0);
--              rate |= FIELD_PREP(MT_TX_RATE_MODE, mode);
--
--              val = MT_TXD6_FIXED_BW |
--                    FIELD_PREP(MT_TXD6_TX_RATE, rate);
--              txwi[6] |= cpu_to_le32(val);
--              txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
--      }
--}
--EXPORT_SYMBOL_GPL(mt7921_mac_write_txwi);
--
- void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
- {
-       struct mt7921_sta *msta;
-@@ -1645,7 +1435,7 @@ mt7921_usb_sdio_write_txwi(struct mt7921_dev *dev, struct mt76_wcid *wcid,
-       __le32 *txwi = (__le32 *)(skb->data - MT_SDIO_TXD_SIZE);
-       memset(txwi, 0, MT_SDIO_TXD_SIZE);
--      mt7921_mac_write_txwi(&dev->mt76, txwi, skb, wcid, key, pid, false);
-+      mt76_connac2_mac_write_txwi(&dev->mt76, txwi, skb, wcid, key, pid, 0);
-       skb_push(skb, MT_SDIO_TXD_SIZE);
- }
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-index d7e2bd605117..aa3d92d94353 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-@@ -321,7 +321,7 @@ static int mt7921_add_interface(struct ieee80211_hw *hw,
-       mvif->mt76.omac_idx = mvif->mt76.idx;
-       mvif->phy = phy;
-       mvif->mt76.band_idx = 0;
--      mvif->mt76.wmm_idx = mvif->mt76.idx % MT7921_MAX_WMM_SETS;
-+      mvif->mt76.wmm_idx = mvif->mt76.idx % MT76_CONNAC_MAX_WMM_SETS;
-       ret = mt76_connac_mcu_uni_add_dev(&dev->mphy, vif, &mvif->sta.wcid,
-                                         true);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-index c2245be657d4..f2bfa0c4e737 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-@@ -1226,8 +1226,8 @@ mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-               return -EINVAL;
-       }
--      mt7921_mac_write_txwi(&dev->mt76, (__le32 *)(req.beacon_tlv.pkt), skb,
--                            wcid, NULL, 0, true);
-+      mt76_connac2_mac_write_txwi(&dev->mt76, (__le32 *)(req.beacon_tlv.pkt),
-+                                  skb, wcid, NULL, 0, BSS_CHANGED_BEACON);
-       memcpy(req.beacon_tlv.pkt + MT_TXD_SIZE, skb->data, skb->len);
-       req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-       req.beacon_tlv.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-index d105e815fcd4..9b484b389117 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-@@ -10,7 +10,6 @@
- #include "regs.h"
- #define MT7921_MAX_INTERFACES         4
--#define MT7921_MAX_WMM_SETS           4
- #define MT7921_WTBL_SIZE              20
- #define MT7921_WTBL_RESERVED          (MT7921_WTBL_SIZE - 1)
- #define MT7921_WTBL_STA                       (MT7921_WTBL_RESERVED - \
-@@ -411,10 +410,6 @@ int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                       void *data, int len);
- int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
-                        struct netlink_callback *cb, void *data, int len);
--void mt7921_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
--                         struct sk_buff *skb, struct mt76_wcid *wcid,
--                         struct ieee80211_key_conf *key, int pid,
--                         bool beacon);
- void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi);
- void mt7921_mac_sta_poll(struct mt7921_dev *dev);
- int mt7921_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb,
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-index f261cbfae2f3..b0f58bcf70cb 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-@@ -72,8 +72,8 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-       }
-       pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
--      mt7921_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, key,
--                            pid, false);
-+      mt76_connac2_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, key,
-+                                  pid, 0);
-       txp = (struct mt7921_txp_common *)(txwi + MT_TXD_SIZE);
-       memset(txp, 0, sizeof(struct mt7921_txp_common));
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-connac-move-mac-connac2-defs-in-mt76_connac2_ma.patch b/queue-5.18/mt76-connac-move-mac-connac2-defs-in-mt76_connac2_ma.patch
deleted file mode 100644 (file)
index 1eb83cf..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-From d3d26f6277444cd8f05771aa21dfc0f34386ff67 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 7 Jun 2022 11:28:39 +0200
-Subject: mt76: connac: move mac connac2 defs in mt76_connac2_mac.h
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit 90211957a640e6933b236e06728578d252f7374f ]
-
-This is a preliminary patch to share connac2 mac txwi code.
-
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../wireless/mediatek/mt76/mt76_connac2_mac.h | 167 ++++++++++++++++++
- .../net/wireless/mediatek/mt76/mt7915/mac.h   | 142 +--------------
- .../wireless/mediatek/mt76/mt7915/mt7915.h    |  14 --
- .../net/wireless/mediatek/mt76/mt7921/mac.h   | 123 +------------
- .../wireless/mediatek/mt76/mt7921/mt7921.h    |  10 --
- 5 files changed, 171 insertions(+), 285 deletions(-)
- create mode 100644 drivers/net/wireless/mediatek/mt76/mt76_connac2_mac.h
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac2_mac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac2_mac.h
-new file mode 100644
-index 000000000000..c9d9c8475a38
---- /dev/null
-+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac2_mac.h
-@@ -0,0 +1,167 @@
-+/* SPDX-License-Identifier: ISC */
-+/* Copyright (C) 2022 MediaTek Inc. */
-+
-+#ifndef __MT76_CONNAC2_MAC_H
-+#define __MT76_CONNAC2_MAC_H
-+
-+enum tx_header_format {
-+      MT_HDR_FORMAT_802_3,
-+      MT_HDR_FORMAT_CMD,
-+      MT_HDR_FORMAT_802_11,
-+      MT_HDR_FORMAT_802_11_EXT,
-+};
-+
-+enum tx_pkt_type {
-+      MT_TX_TYPE_CT,
-+      MT_TX_TYPE_SF,
-+      MT_TX_TYPE_CMD,
-+      MT_TX_TYPE_FW,
-+};
-+
-+enum {
-+      MT_CTX0,
-+      MT_HIF0 = 0x0,
-+
-+      MT_LMAC_AC00 = 0x0,
-+      MT_LMAC_AC01,
-+      MT_LMAC_AC02,
-+      MT_LMAC_AC03,
-+      MT_LMAC_ALTX0 = 0x10,
-+      MT_LMAC_BMC0,
-+      MT_LMAC_BCN0,
-+      MT_LMAC_PSMP0,
-+};
-+
-+#define MT_TXD_SIZE                   (8 * 4)
-+#define MT_SDIO_TXD_SIZE              (MT_TXD_SIZE + 8 * 4)
-+#define MT_SDIO_TAIL_SIZE             8
-+#define MT_SDIO_HDR_SIZE              4
-+#define MT_USB_TAIL_SIZE              4
-+
-+#define MT_TXD0_Q_IDX                 GENMASK(31, 25)
-+#define MT_TXD0_PKT_FMT                       GENMASK(24, 23)
-+#define MT_TXD0_ETH_TYPE_OFFSET               GENMASK(22, 16)
-+#define MT_TXD0_TX_BYTES              GENMASK(15, 0)
-+
-+#define MT_TXD1_LONG_FORMAT           BIT(31)
-+#define MT_TXD1_TGID                  BIT(30)
-+#define MT_TXD1_OWN_MAC                       GENMASK(29, 24)
-+#define MT_TXD1_AMSDU                 BIT(23)
-+#define MT_TXD1_TID                   GENMASK(22, 20)
-+#define MT_TXD1_HDR_PAD                       GENMASK(19, 18)
-+#define MT_TXD1_HDR_FORMAT            GENMASK(17, 16)
-+#define MT_TXD1_HDR_INFO              GENMASK(15, 11)
-+#define MT_TXD1_ETH_802_3             BIT(15)
-+#define MT_TXD1_VTA                   BIT(10)
-+#define MT_TXD1_WLAN_IDX              GENMASK(9, 0)
-+
-+#define MT_TXD2_FIX_RATE              BIT(31)
-+#define MT_TXD2_FIXED_RATE            BIT(30)
-+#define MT_TXD2_POWER_OFFSET          GENMASK(29, 24)
-+#define MT_TXD2_MAX_TX_TIME           GENMASK(23, 16)
-+#define MT_TXD2_FRAG                  GENMASK(15, 14)
-+#define MT_TXD2_HTC_VLD                       BIT(13)
-+#define MT_TXD2_DURATION              BIT(12)
-+#define MT_TXD2_BIP                   BIT(11)
-+#define MT_TXD2_MULTICAST             BIT(10)
-+#define MT_TXD2_RTS                   BIT(9)
-+#define MT_TXD2_SOUNDING              BIT(8)
-+#define MT_TXD2_NDPA                  BIT(7)
-+#define MT_TXD2_NDP                   BIT(6)
-+#define MT_TXD2_FRAME_TYPE            GENMASK(5, 4)
-+#define MT_TXD2_SUB_TYPE              GENMASK(3, 0)
-+
-+#define MT_TXD3_SN_VALID              BIT(31)
-+#define MT_TXD3_PN_VALID              BIT(30)
-+#define MT_TXD3_SW_POWER_MGMT         BIT(29)
-+#define MT_TXD3_BA_DISABLE            BIT(28)
-+#define MT_TXD3_SEQ                   GENMASK(27, 16)
-+#define MT_TXD3_REM_TX_COUNT          GENMASK(15, 11)
-+#define MT_TXD3_TX_COUNT              GENMASK(10, 6)
-+#define MT_TXD3_TIMING_MEASURE                BIT(5)
-+#define MT_TXD3_DAS                   BIT(4)
-+#define MT_TXD3_EEOSP                 BIT(3)
-+#define MT_TXD3_EMRD                  BIT(2)
-+#define MT_TXD3_PROTECT_FRAME         BIT(1)
-+#define MT_TXD3_NO_ACK                        BIT(0)
-+
-+#define MT_TXD4_PN_LOW                        GENMASK(31, 0)
-+
-+#define MT_TXD5_PN_HIGH                       GENMASK(31, 16)
-+#define MT_TXD5_MD                    BIT(15)
-+#define MT_TXD5_ADD_BA                        BIT(14)
-+#define MT_TXD5_TX_STATUS_HOST                BIT(10)
-+#define MT_TXD5_TX_STATUS_MCU         BIT(9)
-+#define MT_TXD5_TX_STATUS_FMT         BIT(8)
-+#define MT_TXD5_PID                   GENMASK(7, 0)
-+
-+#define MT_TXD6_TX_IBF                        BIT(31)
-+#define MT_TXD6_TX_EBF                        BIT(30)
-+#define MT_TXD6_TX_RATE                       GENMASK(29, 16)
-+#define MT_TXD6_SGI                   GENMASK(15, 14)
-+#define MT_TXD6_HELTF                 GENMASK(13, 12)
-+#define MT_TXD6_LDPC                  BIT(11)
-+#define MT_TXD6_SPE_ID_IDX            BIT(10)
-+#define MT_TXD6_ANT_ID                        GENMASK(7, 4)
-+#define MT_TXD6_DYN_BW                        BIT(3)
-+#define MT_TXD6_FIXED_BW              BIT(2)
-+#define MT_TXD6_BW                    GENMASK(1, 0)
-+
-+#define MT_TXD7_TXD_LEN                       GENMASK(31, 30)
-+#define MT_TXD7_UDP_TCP_SUM           BIT(29)
-+#define MT_TXD7_IP_SUM                        BIT(28)
-+#define MT_TXD7_TYPE                  GENMASK(21, 20)
-+#define MT_TXD7_SUB_TYPE              GENMASK(19, 16)
-+
-+#define MT_TXD7_PSE_FID                       GENMASK(27, 16)
-+#define MT_TXD7_SPE_IDX                       GENMASK(15, 11)
-+#define MT_TXD7_HW_AMSDU              BIT(10)
-+#define MT_TXD7_TX_TIME                       GENMASK(9, 0)
-+
-+#define MT_TXD8_L_TYPE                        GENMASK(5, 4)
-+#define MT_TXD8_L_SUB_TYPE            GENMASK(3, 0)
-+
-+#define MT_TX_RATE_STBC                       BIT(13)
-+#define MT_TX_RATE_NSS                        GENMASK(12, 10)
-+#define MT_TX_RATE_MODE                       GENMASK(9, 6)
-+#define MT_TX_RATE_SU_EXT_TONE                BIT(5)
-+#define MT_TX_RATE_DCM                        BIT(4)
-+/* VHT/HE only use bits 0-3 */
-+#define MT_TX_RATE_IDX                        GENMASK(5, 0)
-+
-+#define MT_TXS0_FIXED_RATE            BIT(31)
-+#define MT_TXS0_BW                    GENMASK(30, 29)
-+#define MT_TXS0_TID                   GENMASK(28, 26)
-+#define MT_TXS0_AMPDU                 BIT(25)
-+#define MT_TXS0_TXS_FORMAT            GENMASK(24, 23)
-+#define MT_TXS0_BA_ERROR              BIT(22)
-+#define MT_TXS0_PS_FLAG                       BIT(21)
-+#define MT_TXS0_TXOP_TIMEOUT          BIT(20)
-+#define MT_TXS0_BIP_ERROR             BIT(19)
-+
-+#define MT_TXS0_QUEUE_TIMEOUT         BIT(18)
-+#define MT_TXS0_RTS_TIMEOUT           BIT(17)
-+#define MT_TXS0_ACK_TIMEOUT           BIT(16)
-+#define MT_TXS0_ACK_ERROR_MASK                GENMASK(18, 16)
-+
-+#define MT_TXS0_TX_STATUS_HOST                BIT(15)
-+#define MT_TXS0_TX_STATUS_MCU         BIT(14)
-+#define MT_TXS0_TX_RATE                       GENMASK(13, 0)
-+
-+#define MT_TXS1_SEQNO                 GENMASK(31, 20)
-+#define MT_TXS1_RESP_RATE             GENMASK(19, 16)
-+#define MT_TXS1_RXV_SEQNO             GENMASK(15, 8)
-+#define MT_TXS1_TX_POWER_DBM          GENMASK(7, 0)
-+
-+#define MT_TXS2_BF_STATUS             GENMASK(31, 30)
-+#define MT_TXS2_LAST_TX_RATE          GENMASK(29, 27)
-+#define MT_TXS2_SHARED_ANTENNA                BIT(26)
-+#define MT_TXS2_WCID                  GENMASK(25, 16)
-+#define MT_TXS2_TX_DELAY              GENMASK(15, 0)
-+
-+#define MT_TXS3_PID                   GENMASK(31, 24)
-+#define MT_TXS3_ANT_ID                        GENMASK(23, 0)
-+
-+#define MT_TXS4_TIMESTAMP             GENMASK(31, 0)
-+
-+#endif /* __MT76_CONNAC2_MAC_H */
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.h b/drivers/net/wireless/mediatek/mt76/mt7915/mac.h
-index 5add1dd36dbe..51496981cb1e 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.h
-@@ -4,6 +4,8 @@
- #ifndef __MT7915_MAC_H
- #define __MT7915_MAC_H
-+#include "../mt76_connac2_mac.h"
-+
- #define MT_CT_PARSE_LEN                       72
- #define MT_CT_DMA_BUF_NUM             2
-@@ -165,20 +167,6 @@ enum rx_pkt_type {
- #define MT_CRXV_FOE_HI                GENMASK(6, 0)
- #define MT_CRXV_FOE_SHIFT     13
--enum tx_header_format {
--      MT_HDR_FORMAT_802_3,
--      MT_HDR_FORMAT_CMD,
--      MT_HDR_FORMAT_802_11,
--      MT_HDR_FORMAT_802_11_EXT,
--};
--
--enum tx_pkt_type {
--      MT_TX_TYPE_CT,
--      MT_TX_TYPE_SF,
--      MT_TX_TYPE_CMD,
--      MT_TX_TYPE_FW,
--};
--
- enum tx_port_idx {
-       MT_TX_PORT_IDX_LMAC,
-       MT_TX_PORT_IDX_MCU
-@@ -199,97 +187,6 @@ enum tx_mcu_port_q_idx {
- #define MT_CT_INFO_HSR2_TX            BIT(4)
- #define MT_CT_INFO_FROM_HOST          BIT(7)
--#define MT_TXD_SIZE                   (8 * 4)
--
--#define MT_TXD0_Q_IDX                 GENMASK(31, 25)
--#define MT_TXD0_PKT_FMT                       GENMASK(24, 23)
--#define MT_TXD0_ETH_TYPE_OFFSET               GENMASK(22, 16)
--#define MT_TXD0_TX_BYTES              GENMASK(15, 0)
--
--#define MT_TXD1_LONG_FORMAT           BIT(31)
--#define MT_TXD1_TGID                  BIT(30)
--#define MT_TXD1_OWN_MAC                       GENMASK(29, 24)
--#define MT_TXD1_AMSDU                 BIT(23)
--#define MT_TXD1_TID                   GENMASK(22, 20)
--#define MT_TXD1_HDR_PAD                       GENMASK(19, 18)
--#define MT_TXD1_HDR_FORMAT            GENMASK(17, 16)
--#define MT_TXD1_HDR_INFO              GENMASK(15, 11)
--#define MT_TXD1_ETH_802_3             BIT(15)
--#define MT_TXD1_VTA                   BIT(10)
--#define MT_TXD1_WLAN_IDX              GENMASK(9, 0)
--
--#define MT_TXD2_FIX_RATE              BIT(31)
--#define MT_TXD2_FIXED_RATE            BIT(30)
--#define MT_TXD2_POWER_OFFSET          GENMASK(29, 24)
--#define MT_TXD2_MAX_TX_TIME           GENMASK(23, 16)
--#define MT_TXD2_FRAG                  GENMASK(15, 14)
--#define MT_TXD2_HTC_VLD                       BIT(13)
--#define MT_TXD2_DURATION              BIT(12)
--#define MT_TXD2_BIP                   BIT(11)
--#define MT_TXD2_MULTICAST             BIT(10)
--#define MT_TXD2_RTS                   BIT(9)
--#define MT_TXD2_SOUNDING              BIT(8)
--#define MT_TXD2_NDPA                  BIT(7)
--#define MT_TXD2_NDP                   BIT(6)
--#define MT_TXD2_FRAME_TYPE            GENMASK(5, 4)
--#define MT_TXD2_SUB_TYPE              GENMASK(3, 0)
--
--#define MT_TXD3_SN_VALID              BIT(31)
--#define MT_TXD3_PN_VALID              BIT(30)
--#define MT_TXD3_SW_POWER_MGMT         BIT(29)
--#define MT_TXD3_BA_DISABLE            BIT(28)
--#define MT_TXD3_SEQ                   GENMASK(27, 16)
--#define MT_TXD3_REM_TX_COUNT          GENMASK(15, 11)
--#define MT_TXD3_TX_COUNT              GENMASK(10, 6)
--#define MT_TXD3_TIMING_MEASURE                BIT(5)
--#define MT_TXD3_DAS                   BIT(4)
--#define MT_TXD3_EEOSP                 BIT(3)
--#define MT_TXD3_EMRD                  BIT(2)
--#define MT_TXD3_PROTECT_FRAME         BIT(1)
--#define MT_TXD3_NO_ACK                        BIT(0)
--
--#define MT_TXD4_PN_LOW                        GENMASK(31, 0)
--
--#define MT_TXD5_PN_HIGH                       GENMASK(31, 16)
--#define MT_TXD5_MD                    BIT(15)
--#define MT_TXD5_ADD_BA                        BIT(14)
--#define MT_TXD5_TX_STATUS_HOST                BIT(10)
--#define MT_TXD5_TX_STATUS_MCU         BIT(9)
--#define MT_TXD5_TX_STATUS_FMT         BIT(8)
--#define MT_TXD5_PID                   GENMASK(7, 0)
--
--#define MT_TXD6_TX_IBF                        BIT(31)
--#define MT_TXD6_TX_EBF                        BIT(30)
--#define MT_TXD6_TX_RATE                       GENMASK(29, 16)
--#define MT_TXD6_SGI                   GENMASK(15, 14)
--#define MT_TXD6_HELTF                 GENMASK(13, 12)
--#define MT_TXD6_LDPC                  BIT(11)
--#define MT_TXD6_SPE_ID_IDX            BIT(10)
--#define MT_TXD6_ANT_ID                        GENMASK(7, 4)
--#define MT_TXD6_DYN_BW                        BIT(3)
--#define MT_TXD6_FIXED_BW              BIT(2)
--#define MT_TXD6_BW                    GENMASK(1, 0)
--
--#define MT_TXD7_TXD_LEN                       GENMASK(31, 30)
--#define MT_TXD7_UDP_TCP_SUM           BIT(29)
--#define MT_TXD7_IP_SUM                        BIT(28)
--
--#define MT_TXD7_TYPE                  GENMASK(21, 20)
--#define MT_TXD7_SUB_TYPE              GENMASK(19, 16)
--
--#define MT_TXD7_PSE_FID                       GENMASK(27, 16)
--#define MT_TXD7_SPE_IDX                       GENMASK(15, 11)
--#define MT_TXD7_HW_AMSDU              BIT(10)
--#define MT_TXD7_TX_TIME                       GENMASK(9, 0)
--
--#define MT_TX_RATE_STBC                       BIT(13)
--#define MT_TX_RATE_NSS                        GENMASK(12, 10)
--#define MT_TX_RATE_MODE                       GENMASK(9, 6)
--#define MT_TX_RATE_SU_EXT_TONE                BIT(5)
--#define MT_TX_RATE_DCM                        BIT(4)
--/* VHT/HE only use bits 0-3 */
--#define MT_TX_RATE_IDX                        GENMASK(5, 0)
--
- #define MT_TXP_MAX_BUF_NUM            6
- struct mt7915_txp {
-@@ -322,41 +219,6 @@ struct mt7915_tx_free {
- /* will support this field in further revision */
- #define MT_TX_FREE_RATE                       GENMASK(13, 0)
--#define MT_TXS0_FIXED_RATE            BIT(31)
--#define MT_TXS0_BW                    GENMASK(30, 29)
--#define MT_TXS0_TID                   GENMASK(28, 26)
--#define MT_TXS0_AMPDU                 BIT(25)
--#define MT_TXS0_TXS_FORMAT            GENMASK(24, 23)
--#define MT_TXS0_BA_ERROR              BIT(22)
--#define MT_TXS0_PS_FLAG                       BIT(21)
--#define MT_TXS0_TXOP_TIMEOUT          BIT(20)
--#define MT_TXS0_BIP_ERROR             BIT(19)
--
--#define MT_TXS0_QUEUE_TIMEOUT         BIT(18)
--#define MT_TXS0_RTS_TIMEOUT           BIT(17)
--#define MT_TXS0_ACK_TIMEOUT           BIT(16)
--#define MT_TXS0_ACK_ERROR_MASK                GENMASK(18, 16)
--
--#define MT_TXS0_TX_STATUS_HOST                BIT(15)
--#define MT_TXS0_TX_STATUS_MCU         BIT(14)
--#define MT_TXS0_TX_RATE                       GENMASK(13, 0)
--
--#define MT_TXS1_SEQNO                 GENMASK(31, 20)
--#define MT_TXS1_RESP_RATE             GENMASK(19, 16)
--#define MT_TXS1_RXV_SEQNO             GENMASK(15, 8)
--#define MT_TXS1_TX_POWER_DBM          GENMASK(7, 0)
--
--#define MT_TXS2_BF_STATUS             GENMASK(31, 30)
--#define MT_TXS2_LAST_TX_RATE          GENMASK(29, 27)
--#define MT_TXS2_SHARED_ANTENNA                BIT(26)
--#define MT_TXS2_WCID                  GENMASK(25, 16)
--#define MT_TXS2_TX_DELAY              GENMASK(15, 0)
--
--#define MT_TXS3_PID                   GENMASK(31, 24)
--#define MT_TXS3_ANT_ID                        GENMASK(23, 0)
--
--#define MT_TXS4_TIMESTAMP             GENMASK(31, 0)
--
- #define MT_TXS5_F0_FINAL_MPDU         BIT(31)
- #define MT_TXS5_F0_QOS                        BIT(30)
- #define MT_TXS5_F0_TX_COUNT           GENMASK(29, 25)
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-index 64b4c3c09d33..41d76e24dd8b 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-@@ -335,20 +335,6 @@ enum {
-       __MT_WFDMA_MAX,
- };
--enum {
--      MT_CTX0,
--      MT_HIF0 = 0x0,
--
--      MT_LMAC_AC00 = 0x0,
--      MT_LMAC_AC01,
--      MT_LMAC_AC02,
--      MT_LMAC_AC03,
--      MT_LMAC_ALTX0 = 0x10,
--      MT_LMAC_BMC0,
--      MT_LMAC_BCN0,
--      MT_LMAC_PSMP0,
--};
--
- enum {
-       MT_RX_SEL0,
-       MT_RX_SEL1,
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.h b/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
-index 79447e2d0143..556e687bd235 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
-@@ -4,6 +4,8 @@
- #ifndef __MT7921_MAC_H
- #define __MT7921_MAC_H
-+#include "../mt76_connac2_mac.h"
-+
- #define MT_CT_PARSE_LEN                       72
- #define MT_CT_DMA_BUF_NUM             2
-@@ -163,20 +165,6 @@ enum rx_pkt_type {
- #define MT_CRXV_FOE_HI                GENMASK(6, 0)
- #define MT_CRXV_FOE_SHIFT     13
--enum tx_header_format {
--      MT_HDR_FORMAT_802_3,
--      MT_HDR_FORMAT_CMD,
--      MT_HDR_FORMAT_802_11,
--      MT_HDR_FORMAT_802_11_EXT,
--};
--
--enum tx_pkt_type {
--      MT_TX_TYPE_CT,
--      MT_TX_TYPE_SF,
--      MT_TX_TYPE_CMD,
--      MT_TX_TYPE_FW,
--};
--
- enum tx_port_idx {
-       MT_TX_PORT_IDX_LMAC,
-       MT_TX_PORT_IDX_MCU
-@@ -197,104 +185,6 @@ enum tx_mcu_port_q_idx {
- #define MT_CT_INFO_HSR2_TX            BIT(4)
- #define MT_CT_INFO_FROM_HOST          BIT(7)
--#define MT_TXD_SIZE                   (8 * 4)
--
--#define MT_SDIO_TXD_SIZE              (MT_TXD_SIZE + 8 * 4)
--#define MT_SDIO_TAIL_SIZE             8
--#define MT_SDIO_HDR_SIZE              4
--#define MT_USB_TAIL_SIZE              4
--
--#define MT_TXD0_Q_IDX                 GENMASK(31, 25)
--#define MT_TXD0_PKT_FMT                       GENMASK(24, 23)
--#define MT_TXD0_ETH_TYPE_OFFSET               GENMASK(22, 16)
--#define MT_TXD0_TX_BYTES              GENMASK(15, 0)
--
--#define MT_TXD1_LONG_FORMAT           BIT(31)
--#define MT_TXD1_TGID                  BIT(30)
--#define MT_TXD1_OWN_MAC                       GENMASK(29, 24)
--#define MT_TXD1_AMSDU                 BIT(23)
--#define MT_TXD1_TID                   GENMASK(22, 20)
--#define MT_TXD1_HDR_PAD                       GENMASK(19, 18)
--#define MT_TXD1_HDR_FORMAT            GENMASK(17, 16)
--#define MT_TXD1_HDR_INFO              GENMASK(15, 11)
--#define MT_TXD1_ETH_802_3             BIT(15)
--#define MT_TXD1_VTA                   BIT(10)
--#define MT_TXD1_WLAN_IDX              GENMASK(9, 0)
--
--#define MT_TXD2_FIX_RATE              BIT(31)
--#define MT_TXD2_FIXED_RATE            BIT(30)
--#define MT_TXD2_POWER_OFFSET          GENMASK(29, 24)
--#define MT_TXD2_MAX_TX_TIME           GENMASK(23, 16)
--#define MT_TXD2_FRAG                  GENMASK(15, 14)
--#define MT_TXD2_HTC_VLD                       BIT(13)
--#define MT_TXD2_DURATION              BIT(12)
--#define MT_TXD2_BIP                   BIT(11)
--#define MT_TXD2_MULTICAST             BIT(10)
--#define MT_TXD2_RTS                   BIT(9)
--#define MT_TXD2_SOUNDING              BIT(8)
--#define MT_TXD2_NDPA                  BIT(7)
--#define MT_TXD2_NDP                   BIT(6)
--#define MT_TXD2_FRAME_TYPE            GENMASK(5, 4)
--#define MT_TXD2_SUB_TYPE              GENMASK(3, 0)
--
--#define MT_TXD3_SN_VALID              BIT(31)
--#define MT_TXD3_PN_VALID              BIT(30)
--#define MT_TXD3_SW_POWER_MGMT         BIT(29)
--#define MT_TXD3_BA_DISABLE            BIT(28)
--#define MT_TXD3_SEQ                   GENMASK(27, 16)
--#define MT_TXD3_REM_TX_COUNT          GENMASK(15, 11)
--#define MT_TXD3_TX_COUNT              GENMASK(10, 6)
--#define MT_TXD3_TIMING_MEASURE                BIT(5)
--#define MT_TXD3_DAS                   BIT(4)
--#define MT_TXD3_EEOSP                 BIT(3)
--#define MT_TXD3_EMRD                  BIT(2)
--#define MT_TXD3_PROTECT_FRAME         BIT(1)
--#define MT_TXD3_NO_ACK                        BIT(0)
--
--#define MT_TXD4_PN_LOW                        GENMASK(31, 0)
--
--#define MT_TXD5_PN_HIGH                       GENMASK(31, 16)
--#define MT_TXD5_MD                    BIT(15)
--#define MT_TXD5_ADD_BA                        BIT(14)
--#define MT_TXD5_TX_STATUS_HOST                BIT(10)
--#define MT_TXD5_TX_STATUS_MCU         BIT(9)
--#define MT_TXD5_TX_STATUS_FMT         BIT(8)
--#define MT_TXD5_PID                   GENMASK(7, 0)
--
--#define MT_TXD6_TX_IBF                        BIT(31)
--#define MT_TXD6_TX_EBF                        BIT(30)
--#define MT_TXD6_TX_RATE                       GENMASK(29, 16)
--#define MT_TXD6_SGI                   GENMASK(15, 14)
--#define MT_TXD6_HELTF                 GENMASK(13, 12)
--#define MT_TXD6_LDPC                  BIT(11)
--#define MT_TXD6_SPE_ID_IDX            BIT(10)
--#define MT_TXD6_ANT_ID                        GENMASK(7, 4)
--#define MT_TXD6_DYN_BW                        BIT(3)
--#define MT_TXD6_FIXED_BW              BIT(2)
--#define MT_TXD6_BW                    GENMASK(1, 0)
--
--#define MT_TXD7_TXD_LEN                       GENMASK(31, 30)
--#define MT_TXD7_UDP_TCP_SUM           BIT(29)
--#define MT_TXD7_IP_SUM                        BIT(28)
--
--#define MT_TXD7_TYPE                  GENMASK(21, 20)
--#define MT_TXD7_SUB_TYPE              GENMASK(19, 16)
--
--#define MT_TXD7_PSE_FID                       GENMASK(27, 16)
--#define MT_TXD7_SPE_IDX                       GENMASK(15, 11)
--#define MT_TXD7_HW_AMSDU              BIT(10)
--#define MT_TXD7_TX_TIME                       GENMASK(9, 0)
--
--#define MT_TXD8_L_TYPE                        GENMASK(5, 4)
--#define MT_TXD8_L_SUB_TYPE            GENMASK(3, 0)
--
--#define MT_TX_RATE_STBC                       BIT(13)
--#define MT_TX_RATE_NSS                        GENMASK(12, 10)
--#define MT_TX_RATE_MODE                       GENMASK(9, 6)
--#define MT_TX_RATE_SU_EXT_TONE                BIT(5)
--#define MT_TX_RATE_DCM                        BIT(4)
--#define MT_TX_RATE_IDX                        GENMASK(3, 0)
--
- #define MT_TXP_MAX_BUF_NUM            6
- struct mt7921_txp {
-@@ -325,15 +215,6 @@ struct mt7921_tx_free {
- /* will support this field in further revision */
- #define MT_TX_FREE_RATE                       GENMASK(13, 0)
--#define MT_TXS0_BW                    GENMASK(30, 29)
--#define MT_TXS0_TXS_FORMAT            GENMASK(24, 23)
--#define MT_TXS0_ACK_ERROR_MASK                GENMASK(18, 16)
--#define MT_TXS0_TX_RATE                       GENMASK(13, 0)
--
--#define MT_TXS2_WCID                  GENMASK(25, 16)
--
--#define MT_TXS3_PID                   GENMASK(31, 24)
--
- static inline struct mt7921_txp_common *
- mt7921_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
- {
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-index a049bd35e0bc..d105e815fcd4 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-@@ -244,16 +244,6 @@ struct mt7921_txpwr {
-       } data[TXPWR_MAX_NUM];
- };
--enum {
--      MT_LMAC_AC00,
--      MT_LMAC_AC01,
--      MT_LMAC_AC02,
--      MT_LMAC_AC03,
--      MT_LMAC_ALTX0 = 0x10,
--      MT_LMAC_BMC0,
--      MT_LMAC_BCN0,
--};
--
- static inline struct mt7921_phy *
- mt7921_hw_phy(struct ieee80211_hw *hw)
- {
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-mt7915-add-support-for-6g-in-band-discovery.patch b/queue-5.18/mt76-mt7915-add-support-for-6g-in-band-discovery.patch
deleted file mode 100644 (file)
index 9005f45..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-From e4cfaffd52b1756a4fdab00b30e525a8962df8de Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 26 Apr 2022 10:23:35 +0800
-Subject: mt76: mt7915: add support for 6G in-band discovery
-
-From: MeiChia Chiu <MeiChia.Chiu@mediatek.com>
-
-[ Upstream commit 869f06468e77b06795bc5855bd5b6b03c6cb147c ]
-
-Add offloading FILS discovery and unsolicited broadcast probe response support.
-
-Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
-Signed-off-by: MeiChia Chiu <MeiChia.Chiu@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/wireless/mediatek/mt76/mt7915/init.c  |  2 +
- .../net/wireless/mediatek/mt76/mt7915/mac.c   | 17 +++--
- .../net/wireless/mediatek/mt76/mt7915/main.c  |  8 +-
- .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 75 ++++++++++++++++++-
- .../net/wireless/mediatek/mt76/mt7915/mcu.h   | 15 +++-
- .../wireless/mediatek/mt76/mt7915/mt7915.h    |  4 +-
- 6 files changed, 107 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-index 6d29366c5139..a03251a2960a 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-@@ -351,6 +351,8 @@ mt7915_init_wiphy(struct ieee80211_hw *hw)
-       wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
-       wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
-       wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_DISCOVERY);
-       if (!mdev->dev->of_node ||
-           !of_property_read_bool(mdev->dev->of_node,
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-index 45169a027fda..7873fdaf0373 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-@@ -1181,7 +1181,7 @@ mt7915_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
- void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
--                         struct ieee80211_key_conf *key, bool beacon)
-+                         struct ieee80211_key_conf *key, u32 changed)
- {
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_vif *vif = info->control.vif;
-@@ -1192,6 +1192,10 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-       bool mcast = false;
-       u16 tx_count = 15;
-       u32 val;
-+      bool beacon = !!(changed & (BSS_CHANGED_BEACON |
-+                                  BSS_CHANGED_BEACON_ENABLED));
-+      bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-+                                       BSS_CHANGED_FILS_DISCOVERY));
-       if (vif) {
-               struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-@@ -1204,7 +1208,10 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-       if (ext_phy && dev->mt76.phy2)
-               mphy = dev->mt76.phy2;
--      if (beacon) {
-+      if (inband_disc) {
-+              p_fmt = MT_TX_TYPE_FW;
-+              q_idx = MT_LMAC_ALTX0;
-+      } else if (beacon) {
-               p_fmt = MT_TX_TYPE_FW;
-               q_idx = MT_LMAC_BCN0;
-       } else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
-@@ -1312,8 +1319,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-               return id;
-       pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
--      mt7915_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid, key,
--                            false);
-+      mt7915_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid, key, 0);
-       txp = (struct mt7915_txp *)(txwi + MT_TXD_SIZE);
-       for (i = 0; i < nbuf; i++) {
-@@ -1923,7 +1929,8 @@ mt7915_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
-       case NL80211_IFTYPE_MESH_POINT:
-       case NL80211_IFTYPE_ADHOC:
-       case NL80211_IFTYPE_AP:
--              mt7915_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon);
-+              mt7915_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon,
-+                                    BSS_CHANGED_BEACON_ENABLED);
-               break;
-       default:
-               break;
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
-index 187cf4ccd36e..d6d0a17c3730 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
-@@ -630,8 +630,10 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw,
-               mt7915_update_bss_color(hw, vif, &info->he_bss_color);
-       if (changed & (BSS_CHANGED_BEACON |
--                     BSS_CHANGED_BEACON_ENABLED))
--              mt7915_mcu_add_beacon(hw, vif, info->enable_beacon);
-+                     BSS_CHANGED_BEACON_ENABLED |
-+                     BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-+                     BSS_CHANGED_FILS_DISCOVERY))
-+              mt7915_mcu_add_beacon(hw, vif, info->enable_beacon, changed);
-       mutex_unlock(&dev->mt76.mutex);
- }
-@@ -644,7 +646,7 @@ mt7915_channel_switch_beacon(struct ieee80211_hw *hw,
-       struct mt7915_dev *dev = mt7915_hw_dev(hw);
-       mutex_lock(&dev->mt76.mutex);
--      mt7915_mcu_add_beacon(hw, vif, true);
-+      mt7915_mcu_add_beacon(hw, vif, true, BSS_CHANGED_BEACON);
-       mutex_unlock(&dev->mt76.mutex);
- }
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-index 736c9c342baa..4bfb26e730eb 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-@@ -1892,6 +1892,7 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-       u8 *buf;
-       int len = sizeof(*cont) + MT_TXD_SIZE + skb->len;
-+      len = (len & 0x3) ? ((len | 0x3) + 1) : len;
-       tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_CONTENT,
-                                          len, &bcn->sub_ntlv, &bcn->len);
-@@ -1910,7 +1911,7 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-       buf = (u8 *)tlv + sizeof(*cont);
-       mt7915_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
--                            true);
-+                            BSS_CHANGED_BEACON);
-       memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
- }
-@@ -1992,8 +1993,71 @@ mt7915_mcu_beacon_check_caps(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-       }
- }
--int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
--                        struct ieee80211_vif *vif, int en)
-+static void
-+mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-+                              struct sk_buff *rskb, struct bss_info_bcn *bcn,
-+                              u32 changed)
-+{
-+#define OFFLOAD_TX_MODE_SU    BIT(0)
-+#define OFFLOAD_TX_MODE_MU    BIT(1)
-+      struct ieee80211_hw *hw = mt76_hw(dev);
-+      struct mt7915_phy *phy = mt7915_hw_phy(hw);
-+      struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-+      struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
-+      enum nl80211_band band = chandef->chan->band;
-+      struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-+      struct bss_info_inband_discovery *discov;
-+      struct ieee80211_tx_info *info;
-+      struct sk_buff *skb = NULL;
-+      struct tlv *tlv;
-+      bool ext_phy = phy != &dev->phy;
-+      u8 *buf, interval;
-+      int len;
-+
-+      if (changed & BSS_CHANGED_FILS_DISCOVERY &&
-+          vif->bss_conf.fils_discovery.max_interval) {
-+              interval = vif->bss_conf.fils_discovery.max_interval;
-+              skb = ieee80211_get_fils_discovery_tmpl(hw, vif);
-+      } else if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP &&
-+                 vif->bss_conf.unsol_bcast_probe_resp_interval) {
-+              interval = vif->bss_conf.unsol_bcast_probe_resp_interval;
-+              skb = ieee80211_get_unsol_bcast_probe_resp_tmpl(hw, vif);
-+      }
-+
-+      if (!skb)
-+              return;
-+
-+      info = IEEE80211_SKB_CB(skb);
-+      info->control.vif = vif;
-+      info->band = band;
-+
-+      if (ext_phy)
-+              info->hw_queue |= MT_TX_HW_QUEUE_EXT_PHY;
-+
-+      len = sizeof(*discov) + MT_TXD_SIZE + skb->len;
-+      len = (len & 0x3) ? ((len | 0x3) + 1) : len;
-+
-+      tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_DISCOV,
-+                                         len, &bcn->sub_ntlv, &bcn->len);
-+      discov = (struct bss_info_inband_discovery *)tlv;
-+      discov->tx_mode = OFFLOAD_TX_MODE_SU;
-+      /* 0: UNSOL PROBE RESP, 1: FILS DISCOV */
-+      discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY);
-+      discov->tx_interval = interval;
-+      discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-+      discov->enable = true;
-+
-+      buf = (u8 *)tlv + sizeof(*discov);
-+
-+      mt7915_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
-+                            changed);
-+      memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-+
-+      dev_kfree_skb(skb);
-+}
-+
-+int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-+                        int en, u32 changed)
- {
- #define MAX_BEACON_SIZE 512
-       struct mt7915_dev *dev = mt7915_hw_dev(hw);
-@@ -2044,6 +2108,11 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
-       mt7915_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
-       dev_kfree_skb(skb);
-+      if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP ||
-+          changed & BSS_CHANGED_FILS_DISCOVERY)
-+              mt7915_mcu_beacon_inband_discov(dev, vif, rskb,
-+                                              bcn, changed);
-+
- out:
-       return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
-                                    MCU_EXT_CMD(BSS_INFO_UPDATE), true);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
-index 960072a44222..2b5495bd1e20 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
-@@ -414,11 +414,23 @@ struct bss_info_bcn_cont {
-       __le16 pkt_len;
- } __packed __aligned(4);
-+struct bss_info_inband_discovery {
-+      __le16 tag;
-+      __le16 len;
-+      u8 tx_type;
-+      u8 tx_mode;
-+      u8 tx_interval;
-+      u8 enable;
-+      __le16 rsv;
-+      __le16 prob_rsp_len;
-+} __packed __aligned(4);
-+
- enum {
-       BSS_INFO_BCN_CSA,
-       BSS_INFO_BCN_BCC,
-       BSS_INFO_BCN_MBSSID,
-       BSS_INFO_BCN_CONTENT,
-+      BSS_INFO_BCN_DISCOV,
-       BSS_INFO_BCN_MAX
- };
-@@ -486,6 +498,7 @@ enum {
- #define MT7915_BEACON_UPDATE_SIZE     (sizeof(struct sta_req_hdr) +   \
-                                        sizeof(struct bss_info_bcn_cntdwn) + \
-                                        sizeof(struct bss_info_bcn_mbss) + \
--                                       sizeof(struct bss_info_bcn_cont))
-+                                       sizeof(struct bss_info_bcn_cont) + \
-+                                       sizeof(struct bss_info_inband_discovery))
- #endif
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-index 4b6eda958ef3..ff413fe1da5e 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-@@ -463,7 +463,7 @@ int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev,
- int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-                               struct cfg80211_he_bss_color *he_bss_color);
- int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
--                        int enable);
-+                        int enable, u32 changed);
- int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-                             bool enable);
- int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-@@ -550,7 +550,7 @@ void mt7915_mac_cca_stats_reset(struct mt7915_phy *phy);
- void mt7915_mac_enable_nf(struct mt7915_dev *dev, bool ext_phy);
- void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
--                         struct ieee80211_key_conf *key, bool beacon);
-+                         struct ieee80211_key_conf *key, u32 changed);
- void mt7915_mac_set_timing(struct mt7915_phy *phy);
- int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta);
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-mt7915-fix-incorrect-testmode-ipg-on-band-1-cau.patch b/queue-5.18/mt76-mt7915-fix-incorrect-testmode-ipg-on-band-1-cau.patch
deleted file mode 100644 (file)
index 4c0daf2..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-From 97c5577cb493dbe3f3ef0bf350695e52d9df9acd Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 20 Jun 2022 14:17:17 +0800
-Subject: mt76: mt7915: fix incorrect testmode ipg on band 1 caused by wmm_idx
-
-From: Shayne Chen <shayne.chen@mediatek.com>
-
-[ Upstream commit 6e744cfeee02c2d8676eb55d5b3720808812f41f ]
-
-Fix the issue that the measured inter packet gap didn't fit its
-setting value.
-
-Fixes: c2d3b1926f30 ("mt76: mt7915: add support for ipg in testmode")
-Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/mediatek/mt76/mt7915/testmode.c | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
-index 20f63644e929..0f5c1e5bffe1 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
-@@ -168,13 +168,14 @@ mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
- }
- static int
--mt7915_tm_set_wmm_qid(struct mt7915_dev *dev, u8 qid, u8 aifs, u8 cw_min,
-+mt7915_tm_set_wmm_qid(struct mt7915_phy *phy, u8 qid, u8 aifs, u8 cw_min,
-                     u16 cw_max, u16 txop)
- {
-+      struct mt7915_vif *mvif = (struct mt7915_vif *)phy->monitor_vif->drv_priv;
-       struct mt7915_mcu_tx req = { .total = 1 };
-       struct edca *e = &req.edca[0];
--      e->queue = qid;
-+      e->queue = qid + mvif->mt76.wmm_idx * MT76_CONNAC_MAX_WMM_SETS;
-       e->set = WMM_PARAM_SET;
-       e->aifs = aifs;
-@@ -182,7 +183,7 @@ mt7915_tm_set_wmm_qid(struct mt7915_dev *dev, u8 qid, u8 aifs, u8 cw_min,
-       e->cw_max = cpu_to_le16(cw_max);
-       e->txop = cpu_to_le16(txop);
--      return mt7915_mcu_update_edca(dev, &req);
-+      return mt7915_mcu_update_edca(phy->dev, &req);
- }
- static int
-@@ -244,7 +245,7 @@ mt7915_tm_set_ipg_params(struct mt7915_phy *phy, u32 ipg, u8 mode)
-       mt7915_tm_set_slot_time(phy, slot_time, sifs);
--      return mt7915_tm_set_wmm_qid(dev,
-+      return mt7915_tm_set_wmm_qid(phy,
-                                    mt76_connac_lmac_mapping(IEEE80211_AC_BE),
-                                    aifsn, cw, cw, 0);
- }
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-mt7915-rely-on-mt76_dev-in-mt7915_mac_write_txw.patch b/queue-5.18/mt76-mt7915-rely-on-mt76_dev-in-mt7915_mac_write_txw.patch
deleted file mode 100644 (file)
index 05e5a0d..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-From ca4fb9b60c0b6bb52c2bdd4b3a3800096b9a4c0b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 7 Jun 2022 11:28:38 +0200
-Subject: mt76: mt7915: rely on mt76_dev in mt7915_mac_write_txwi signature
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit d502e30020b85857ead0f9d392d24dba8c0f44cb ]
-
-This is a preliminary patch to share txwi configuration code.
-
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/wireless/mediatek/mt76/mt7915/mac.c   | 23 +++++++++----------
- .../net/wireless/mediatek/mt76/mt7915/mcu.c   |  4 ++--
- .../wireless/mediatek/mt76/mt7915/mt7915.h    |  2 +-
- 3 files changed, 14 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-index 7873fdaf0373..d65a873739af 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
-@@ -1014,8 +1014,8 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
- }
- static void
--mt7915_mac_write_txwi_8023(struct mt7915_dev *dev, __le32 *txwi,
--                         struct sk_buff *skb, struct mt76_wcid *wcid)
-+mt7915_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
-+                         struct mt76_wcid *wcid)
- {
-       u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-@@ -1054,9 +1054,8 @@ mt7915_mac_write_txwi_8023(struct mt7915_dev *dev, __le32 *txwi,
- }
- static void
--mt7915_mac_write_txwi_80211(struct mt7915_dev *dev, __le32 *txwi,
--                          struct sk_buff *skb, struct ieee80211_key_conf *key,
--                          bool *mcast)
-+mt7915_mac_write_txwi_80211(__le32 *txwi, struct sk_buff *skb,
-+                          struct ieee80211_key_conf *key, bool *mcast)
- {
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-@@ -1179,13 +1178,13 @@ mt7915_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
-              FIELD_PREP(MT_TX_RATE_MODE, mode);
- }
--void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-+void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-                          struct ieee80211_key_conf *key, u32 changed)
- {
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_vif *vif = info->control.vif;
--      struct mt76_phy *mphy = &dev->mphy;
-+      struct mt76_phy *mphy = &dev->phy;
-       bool ext_phy = info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY;
-       u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0, band_idx = 0;
-       bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-@@ -1205,8 +1204,8 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-               band_idx = mvif->mt76.band_idx;
-       }
--      if (ext_phy && dev->mt76.phy2)
--              mphy = dev->mt76.phy2;
-+      if (ext_phy && dev->phy2)
-+              mphy = dev->phy2;
-       if (inband_disc) {
-               p_fmt = MT_TX_TYPE_FW;
-@@ -1258,9 +1257,9 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-       txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
-       if (is_8023)
--              mt7915_mac_write_txwi_8023(dev, txwi, skb, wcid);
-+              mt7915_mac_write_txwi_8023(txwi, skb, wcid);
-       else
--              mt7915_mac_write_txwi_80211(dev, txwi, skb, key, &mcast);
-+              mt7915_mac_write_txwi_80211(txwi, skb, key, &mcast);
-       if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
-               u16 rate = mt7915_mac_tx_rate_val(mphy, vif, beacon, mcast);
-@@ -1319,7 +1318,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-               return id;
-       pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
--      mt7915_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid, key, 0);
-+      mt7915_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, pid, key, 0);
-       txp = (struct mt7915_txp *)(txwi + MT_TXD_SIZE);
-       for (i = 0; i < nbuf; i++) {
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-index 4bfb26e730eb..0ef3952bc33c 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-@@ -1910,7 +1910,7 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-       }
-       buf = (u8 *)tlv + sizeof(*cont);
--      mt7915_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
-+      mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL,
-                             BSS_CHANGED_BEACON);
-       memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
- }
-@@ -2049,7 +2049,7 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
-       buf = (u8 *)tlv + sizeof(*discov);
--      mt7915_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
-+      mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL,
-                             changed);
-       memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-index ff413fe1da5e..64b4c3c09d33 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
-@@ -548,7 +548,7 @@ bool mt7915_mac_wtbl_update(struct mt7915_dev *dev, int idx, u32 mask);
- void mt7915_mac_reset_counters(struct mt7915_phy *phy);
- void mt7915_mac_cca_stats_reset(struct mt7915_phy *phy);
- void mt7915_mac_enable_nf(struct mt7915_dev *dev, bool ext_phy);
--void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
-+void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-                          struct ieee80211_key_conf *key, u32 changed);
- void mt7915_mac_set_timing(struct mt7915_phy *phy);
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-mt7921-add-ap-mode-support.patch b/queue-5.18/mt76-mt7921-add-ap-mode-support.patch
deleted file mode 100644 (file)
index 11602aa..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-From cb9d7e965884f88681508d5d4b131768d3fd8188 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 7 Apr 2022 02:29:14 +0800
-Subject: mt76: mt7921: Add AP mode support
-
-From: Sean Wang <sean.wang@mediatek.com>
-
-[ Upstream commit 116c69603b01f2d6e4499ca5d535f5b71c52052c ]
-
-add AP mode support to mt7921 that can work for mt7921[e,s,u]
-with the common code.
-
-Tested-by: Deren Wu <deren.wu@mediatek.com>
-Tested-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Sean Wang <sean.wang@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/wireless/mediatek/mt76/mt7921/init.c  | 11 ++-
- .../net/wireless/mediatek/mt76/mt7921/mac.c   |  9 +++
- .../net/wireless/mediatek/mt76/mt7921/main.c  | 45 +++++++++++
- .../net/wireless/mediatek/mt76/mt7921/mcu.c   | 79 ++++++++++++++++++-
- .../wireless/mediatek/mt76/mt7921/mt7921.h    |  4 +
- 5 files changed, 146 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
-index 37453e1c136f..0a688c6545b3 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
-@@ -11,6 +11,10 @@ static const struct ieee80211_iface_limit if_limits[] = {
-       {
-               .max = MT7921_MAX_INTERFACES,
-               .types = BIT(NL80211_IFTYPE_STATION)
-+      },
-+      {
-+              .max = 1,
-+              .types = BIT(NL80211_IFTYPE_AP)
-       }
- };
-@@ -64,7 +68,8 @@ mt7921_init_wiphy(struct ieee80211_hw *hw)
-       wiphy->iface_combinations = if_comb;
-       wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
-                         WIPHY_FLAG_4ADDR_STATION);
--      wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
-+      wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
-+                               BIT(NL80211_IFTYPE_AP);
-       wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-       wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
-       wiphy->max_scan_ssids = 4;
-@@ -80,6 +85,10 @@ mt7921_init_wiphy(struct ieee80211_hw *hw)
-       wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
-                          NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
-       wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
-+      wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
-       ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
-       ieee80211_hw_set(hw, HAS_RATE_CONTROL);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-index c5350e7a11e6..ac11e8b28f13 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-@@ -1363,12 +1363,21 @@ mt7921_vif_connect_iter(void *priv, u8 *mac,
- {
-       struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-       struct mt7921_dev *dev = mvif->phy->dev;
-+      struct ieee80211_hw *hw = mt76_hw(dev);
-       if (vif->type == NL80211_IFTYPE_STATION)
-               ieee80211_disconnect(vif, true);
-       mt76_connac_mcu_uni_add_dev(&dev->mphy, vif, &mvif->sta.wcid, true);
-       mt7921_mcu_set_tx(dev, vif);
-+
-+      if (vif->type == NL80211_IFTYPE_AP) {
-+              mt76_connac_mcu_uni_add_bss(dev->phy.mt76, vif, &mvif->sta.wcid,
-+                                          true);
-+              mt7921_mcu_sta_update(dev, NULL, vif, true,
-+                                    MT76_STA_INFO_STATE_NONE);
-+              mt7921_mcu_uni_add_beacon_offload(dev, hw, vif, true);
-+      }
- }
- /* system error recovery */
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-index 9b9e80f56eda..d7e2bd605117 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-@@ -53,6 +53,7 @@ mt7921_init_he_caps(struct mt7921_phy *phy, enum nl80211_band band,
-               switch (i) {
-               case NL80211_IFTYPE_STATION:
-+              case NL80211_IFTYPE_AP:
-                       break;
-               default:
-                       continue;
-@@ -86,6 +87,23 @@ mt7921_init_he_caps(struct mt7921_phy *phy, enum nl80211_band band,
-                       IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO;
-               switch (i) {
-+              case NL80211_IFTYPE_AP:
-+                      he_cap_elem->mac_cap_info[2] |=
-+                              IEEE80211_HE_MAC_CAP2_BSR;
-+                      he_cap_elem->mac_cap_info[4] |=
-+                              IEEE80211_HE_MAC_CAP4_BQR;
-+                      he_cap_elem->mac_cap_info[5] |=
-+                              IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX;
-+                      he_cap_elem->phy_cap_info[3] |=
-+                              IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-+                              IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-+                      he_cap_elem->phy_cap_info[6] |=
-+                              IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-+                              IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-+                      he_cap_elem->phy_cap_info[9] |=
-+                              IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-+                              IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU;
-+                      break;
-               case NL80211_IFTYPE_STATION:
-                       he_cap_elem->mac_cap_info[1] |=
-                               IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US;
-@@ -635,6 +653,20 @@ static void mt7921_bss_info_changed(struct ieee80211_hw *hw,
-               }
-       }
-+      if (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon) {
-+              struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-+
-+              mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid,
-+                                          true);
-+              mt7921_mcu_sta_update(dev, NULL, vif, true,
-+                                    MT76_STA_INFO_STATE_NONE);
-+      }
-+
-+      if (changed & (BSS_CHANGED_BEACON |
-+                     BSS_CHANGED_BEACON_ENABLED))
-+              mt7921_mcu_uni_add_beacon_offload(dev, hw, vif,
-+                                                info->enable_beacon);
-+
-       /* ensure that enable txcmd_mode after bss_info */
-       if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-               mt7921_mcu_set_tx(dev, vif);
-@@ -1395,6 +1427,18 @@ static int mt7921_set_sar_specs(struct ieee80211_hw *hw,
-       return err;
- }
-+static void
-+mt7921_channel_switch_beacon(struct ieee80211_hw *hw,
-+                           struct ieee80211_vif *vif,
-+                           struct cfg80211_chan_def *chandef)
-+{
-+      struct mt7921_dev *dev = mt7921_hw_dev(hw);
-+
-+      mt7921_mutex_acquire(dev);
-+      mt7921_mcu_uni_add_beacon_offload(dev, hw, vif, true);
-+      mt7921_mutex_release(dev);
-+}
-+
- const struct ieee80211_ops mt7921_ops = {
-       .tx = mt7921_tx,
-       .start = mt7921_start,
-@@ -1413,6 +1457,7 @@ const struct ieee80211_ops mt7921_ops = {
-       .set_rts_threshold = mt7921_set_rts_threshold,
-       .wake_tx_queue = mt76_wake_tx_queue,
-       .release_buffered_frames = mt76_release_buffered_frames,
-+      .channel_switch_beacon = mt7921_channel_switch_beacon,
-       .get_txpower = mt76_get_txpower,
-       .get_stats = mt7921_get_stats,
-       .get_et_sset_count = mt7921_get_et_sset_count,
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-index 2a609b25561c..b1ce15cea9e0 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-@@ -248,7 +248,8 @@ mt7921_mcu_connection_loss_iter(void *priv, u8 *mac,
-       if (mvif->idx != event->bss_idx)
-               return;
--      if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER))
-+      if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER) ||
-+          vif->type != NL80211_IFTYPE_STATION)
-               return;
-       ieee80211_connection_loss(vif);
-@@ -1167,3 +1168,79 @@ int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-       return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(SNIFFER), &req, sizeof(req),
-                                true);
- }
-+
-+int
-+mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-+                                struct ieee80211_hw *hw,
-+                                struct ieee80211_vif *vif,
-+                                bool enable)
-+{
-+      struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-+      struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-+      struct ieee80211_mutable_offsets offs;
-+      struct {
-+              struct req_hdr {
-+                      u8 bss_idx;
-+                      u8 pad[3];
-+              } __packed hdr;
-+              struct bcn_content_tlv {
-+                      __le16 tag;
-+                      __le16 len;
-+                      __le16 tim_ie_pos;
-+                      __le16 csa_ie_pos;
-+                      __le16 bcc_ie_pos;
-+                      /* 0: disable beacon offload
-+                       * 1: enable beacon offload
-+                       * 2: update probe respond offload
-+                       */
-+                      u8 enable;
-+                      /* 0: legacy format (TXD + payload)
-+                       * 1: only cap field IE
-+                       */
-+                      u8 type;
-+                      __le16 pkt_len;
-+                      u8 pkt[512];
-+              } __packed beacon_tlv;
-+      } req = {
-+              .hdr = {
-+                      .bss_idx = mvif->mt76.idx,
-+              },
-+              .beacon_tlv = {
-+                      .tag = cpu_to_le16(UNI_BSS_INFO_BCN_CONTENT),
-+                      .len = cpu_to_le16(sizeof(struct bcn_content_tlv)),
-+                      .enable = enable,
-+              },
-+      };
-+      struct sk_buff *skb;
-+
-+      if (!enable)
-+              goto out;
-+
-+      skb = ieee80211_beacon_get_template(mt76_hw(dev), vif, &offs);
-+      if (!skb)
-+              return -EINVAL;
-+
-+      if (skb->len > 512 - MT_TXD_SIZE) {
-+              dev_err(dev->mt76.dev, "beacon size limit exceed\n");
-+              dev_kfree_skb(skb);
-+              return -EINVAL;
-+      }
-+
-+      mt7921_mac_write_txwi(dev, (__le32 *)(req.beacon_tlv.pkt), skb,
-+                            wcid, NULL, 0, true);
-+      memcpy(req.beacon_tlv.pkt + MT_TXD_SIZE, skb->data, skb->len);
-+      req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-+      req.beacon_tlv.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
-+
-+      if (offs.cntdwn_counter_offs[0]) {
-+              u16 csa_offs;
-+
-+              csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
-+              req.beacon_tlv.csa_ie_pos = cpu_to_le16(csa_offs);
-+      }
-+      dev_kfree_skb(skb);
-+
-+out:
-+      return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(BSS_INFO_UPDATE),
-+                               &req, sizeof(req), true);
-+}
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-index 7690364bc079..d497a7e59a29 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-@@ -470,4 +470,8 @@ int mt7921u_wfsys_reset(struct mt7921_dev *dev);
- int mt7921u_dma_init(struct mt7921_dev *dev);
- int mt7921u_init_reset(struct mt7921_dev *dev);
- int mt7921u_mac_reset(struct mt7921_dev *dev);
-+int mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-+                                    struct ieee80211_hw *hw,
-+                                    struct ieee80211_vif *vif,
-+                                    bool enable);
- #endif
--- 
-2.35.1
-
diff --git a/queue-5.18/mt76-mt7921-rely-on-mt76_dev-in-mt7921_mac_write_txw.patch b/queue-5.18/mt76-mt7921-rely-on-mt76_dev-in-mt7921_mac_write_txw.patch
deleted file mode 100644 (file)
index 2b7dc13..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-From bdec8b3e32716c381149c169a100b932f420a779 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 7 Jun 2022 11:28:37 +0200
-Subject: mt76: mt7921: rely on mt76_dev in mt7921_mac_write_txwi signature
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit e00b3e407efeed81dc30a72e4041ff57bf7068d5 ]
-
-This is a preliminary patch to share txwi configuration code.
-
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- .../net/wireless/mediatek/mt76/mt7921/mac.c   | 23 +++++++++----------
- .../net/wireless/mediatek/mt76/mt7921/mcu.c   |  2 +-
- .../wireless/mediatek/mt76/mt7921/mt7921.h    |  2 +-
- .../wireless/mediatek/mt76/mt7921/pci_mac.c   |  2 +-
- 4 files changed, 14 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-index ac11e8b28f13..3ae7989c8500 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
-@@ -809,8 +809,8 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
- }
- static void
--mt7921_mac_write_txwi_8023(struct mt7921_dev *dev, __le32 *txwi,
--                         struct sk_buff *skb, struct mt76_wcid *wcid)
-+mt7921_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
-+                         struct mt76_wcid *wcid)
- {
-       u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-       u8 fc_type, fc_stype;
-@@ -848,7 +848,7 @@ mt7921_mac_write_txwi_8023(struct mt7921_dev *dev, __le32 *txwi,
- }
- static void
--mt7921_mac_write_txwi_80211(struct mt7921_dev *dev, __le32 *txwi,
-+mt7921_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
-                           struct sk_buff *skb, struct ieee80211_key_conf *key)
- {
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-@@ -920,7 +920,7 @@ mt7921_mac_write_txwi_80211(struct mt7921_dev *dev, __le32 *txwi,
-               txwi[7] &= ~cpu_to_le32(MT_TXD7_HW_AMSDU);
-       }
--      if (mt76_is_mmio(&dev->mt76)) {
-+      if (mt76_is_mmio(dev)) {
-               val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-                     FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
-               txwi[7] |= cpu_to_le32(val);
-@@ -931,17 +931,16 @@ mt7921_mac_write_txwi_80211(struct mt7921_dev *dev, __le32 *txwi,
-       }
- }
--void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,
-+void mt7921_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid,
-                          struct ieee80211_key_conf *key, int pid,
-                          bool beacon)
- {
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_vif *vif = info->control.vif;
--      struct mt76_phy *mphy = &dev->mphy;
-+      struct mt76_phy *mphy = &dev->phy;
-       u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
--      bool is_mmio = mt76_is_mmio(&dev->mt76);
--      u32 sz_txd = is_mmio ? MT_TXD_SIZE : MT_SDIO_TXD_SIZE;
-+      u32 sz_txd = mt76_is_mmio(dev) ? MT_TXD_SIZE : MT_SDIO_TXD_SIZE;
-       bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-       u16 tx_count = 15;
-       u32 val;
-@@ -957,10 +956,10 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,
-               p_fmt = MT_TX_TYPE_FW;
-               q_idx = MT_LMAC_BCN0;
-       } else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
--              p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-+              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-               q_idx = MT_LMAC_ALTX0;
-       } else {
--              p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-+              p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-               q_idx = wmm_idx * MT7921_MAX_WMM_SETS +
-                       mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
-       }
-@@ -995,7 +994,7 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,
-       txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
-       if (is_8023)
--              mt7921_mac_write_txwi_8023(dev, txwi, skb, wcid);
-+              mt7921_mac_write_txwi_8023(txwi, skb, wcid);
-       else
-               mt7921_mac_write_txwi_80211(dev, txwi, skb, key);
-@@ -1646,7 +1645,7 @@ mt7921_usb_sdio_write_txwi(struct mt7921_dev *dev, struct mt76_wcid *wcid,
-       __le32 *txwi = (__le32 *)(skb->data - MT_SDIO_TXD_SIZE);
-       memset(txwi, 0, MT_SDIO_TXD_SIZE);
--      mt7921_mac_write_txwi(dev, txwi, skb, wcid, key, pid, false);
-+      mt7921_mac_write_txwi(&dev->mt76, txwi, skb, wcid, key, pid, false);
-       skb_push(skb, MT_SDIO_TXD_SIZE);
- }
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-index b1ce15cea9e0..c2245be657d4 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
-@@ -1226,7 +1226,7 @@ mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-               return -EINVAL;
-       }
--      mt7921_mac_write_txwi(dev, (__le32 *)(req.beacon_tlv.pkt), skb,
-+      mt7921_mac_write_txwi(&dev->mt76, (__le32 *)(req.beacon_tlv.pkt), skb,
-                             wcid, NULL, 0, true);
-       memcpy(req.beacon_tlv.pkt + MT_TXD_SIZE, skb->data, skb->len);
-       req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-index d497a7e59a29..a049bd35e0bc 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
-@@ -421,7 +421,7 @@ int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                       void *data, int len);
- int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
-                        struct netlink_callback *cb, void *data, int len);
--void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,
-+void mt7921_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-                          struct sk_buff *skb, struct mt76_wcid *wcid,
-                          struct ieee80211_key_conf *key, int pid,
-                          bool beacon);
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-index 5ca14dbbdd26..f261cbfae2f3 100644
---- a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
-@@ -72,7 +72,7 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-       }
-       pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
--      mt7921_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, key,
-+      mt7921_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, key,
-                             pid, false);
-       txp = (struct mt7921_txp_common *)(txwi + MT_TXD_SIZE);
--- 
-2.35.1
-