mt76: mt7921: move mt7921_usb_sdio_tx_prepare_skb in common mac code
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 14 Mar 2022 15:10:28 +0000 (16:10 +0100)
committerFelix Fietkau <nbd@nbd.name>
Wed, 16 Mar 2022 16:40:23 +0000 (17:40 +0100)
This is a preliminary patch to add mt7921u driver support.

Tested-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7921/mac.c
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
drivers/net/wireless/mediatek/mt76/mt7921/sdio.c
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c

index 8bd8b4fe1047dba6c04ad7bf8f0c4404b2d3f4b3..dd1a241c45d61b72a48ceea7123e854347b705b2 100644 (file)
@@ -1622,3 +1622,61 @@ void mt7921_coredump_work(struct work_struct *work)
 
        mt7921_reset(&dev->mt76);
 }
+
+/* usb_sdio */
+static void
+mt7921_usb_sdio_write_txwi(struct mt7921_dev *dev, struct mt76_wcid *wcid,
+                          enum mt76_txq_id qid, struct ieee80211_sta *sta,
+                          struct ieee80211_key_conf *key, int pid,
+                          struct sk_buff *skb)
+{
+       __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);
+       skb_push(skb, MT_SDIO_TXD_SIZE);
+}
+
+int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+                                  enum mt76_txq_id qid, struct mt76_wcid *wcid,
+                                  struct ieee80211_sta *sta,
+                                  struct mt76_tx_info *tx_info)
+{
+       struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
+       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
+       struct ieee80211_key_conf *key = info->control.hw_key;
+       struct sk_buff *skb = tx_info->skb;
+       int err, pad, pktid, type;
+
+       if (unlikely(tx_info->skb->len <= ETH_HLEN))
+               return -EINVAL;
+
+       if (!wcid)
+               wcid = &dev->mt76.global_wcid;
+
+       if (sta) {
+               struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
+
+               if (time_after(jiffies, msta->last_txs + HZ / 4)) {
+                       info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
+                       msta->last_txs = jiffies;
+               }
+       }
+
+       pktid = mt76_tx_status_skb_add(&dev->mt76, wcid, skb);
+       mt7921_usb_sdio_write_txwi(dev, wcid, qid, sta, key, pktid, skb);
+
+       type = mt76_is_sdio(mdev) ? MT7921_SDIO_DATA : 0;
+       mt7921_skb_add_usb_sdio_hdr(dev, skb, type);
+       pad = round_up(skb->len, 4) - skb->len;
+       if (mt76_is_usb(mdev))
+               pad += 4;
+
+       err = mt76_skb_adjust_pad(skb, pad);
+       if (err)
+               /* Release pktid in case of error. */
+               idr_remove(&wcid->pktid, pktid);
+
+       return err;
+}
+EXPORT_SYMBOL_GPL(mt7921_usb_sdio_tx_prepare_skb);
index 39ad75af988c5352dc895f978bef2164cf566f6e..06db3e1f39a206c7a2a9b040bbc95d789f0ee3e7 100644 (file)
@@ -444,14 +444,15 @@ int mt7921e_mcu_fw_pmctrl(struct mt7921_dev *dev);
 int mt7921s_mcu_init(struct mt7921_dev *dev);
 int mt7921s_mcu_drv_pmctrl(struct mt7921_dev *dev);
 int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev);
-int mt7921s_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-                          enum mt76_txq_id qid, struct mt76_wcid *wcid,
-                          struct ieee80211_sta *sta,
-                          struct mt76_tx_info *tx_info);
 void mt7921s_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
 bool mt7921s_tx_status_data(struct mt76_dev *mdev, u8 *update);
 void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data);
 void mt7921_set_runtime_pm(struct mt7921_dev *dev);
 int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
                           bool enable);
+
+int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+                                  enum mt76_txq_id qid, struct mt76_wcid *wcid,
+                                  struct ieee80211_sta *sta,
+                                  struct mt76_tx_info *tx_info);
 #endif
index a6ae29c97e0e5dbeb329adb658080439bdd2e9a3..fc6499640a1c6b688927ffaa25c15845bd9bcaa3 100644 (file)
@@ -91,7 +91,7 @@ static int mt7921s_probe(struct sdio_func *func,
                .survey_flags = SURVEY_INFO_TIME_TX |
                                SURVEY_INFO_TIME_RX |
                                SURVEY_INFO_TIME_BSS_RX,
-               .tx_prepare_skb = mt7921s_tx_prepare_skb,
+               .tx_prepare_skb = mt7921_usb_sdio_tx_prepare_skb,
                .tx_complete_skb = mt7921s_tx_complete_skb,
                .tx_status_data = mt7921s_tx_status_data,
                .rx_skb = mt7921_queue_rx_skb,
index 248d3f3cdb0860d9041cf41f48a7704bd47e6ec7..d741a58c1260a067fe4472cb2eb4222cc8cb933a 100644 (file)
@@ -141,59 +141,6 @@ out:
        return err;
 }
 
-static void
-mt7921s_write_txwi(struct mt7921_dev *dev, struct mt76_wcid *wcid,
-                  enum mt76_txq_id qid, struct ieee80211_sta *sta,
-                  struct ieee80211_key_conf *key, int pid,
-                  struct sk_buff *skb)
-{
-       __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);
-       skb_push(skb, MT_SDIO_TXD_SIZE);
-}
-
-int mt7921s_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-                          enum mt76_txq_id qid, struct mt76_wcid *wcid,
-                          struct ieee80211_sta *sta,
-                          struct mt76_tx_info *tx_info)
-{
-       struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-       struct ieee80211_key_conf *key = info->control.hw_key;
-       struct sk_buff *skb = tx_info->skb;
-       int err, pad, pktid;
-
-       if (unlikely(tx_info->skb->len <= ETH_HLEN))
-               return -EINVAL;
-
-       if (!wcid)
-               wcid = &dev->mt76.global_wcid;
-
-       if (sta) {
-               struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-
-               if (time_after(jiffies, msta->last_txs + HZ / 4)) {
-                       info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
-                       msta->last_txs = jiffies;
-               }
-       }
-
-       pktid = mt76_tx_status_skb_add(&dev->mt76, wcid, skb);
-       mt7921s_write_txwi(dev, wcid, qid, sta, key, pktid, skb);
-
-       mt7921_skb_add_usb_sdio_hdr(dev, skb, MT7921_SDIO_DATA);
-       pad = round_up(skb->len, 4) - skb->len;
-
-       err = mt76_skb_adjust_pad(skb, pad);
-       if (err)
-               /* Release pktid in case of error. */
-               idr_remove(&wcid->pktid, pktid);
-
-       return err;
-}
-
 void mt7921s_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
 {
        __le32 *txwi = (__le32 *)(e->skb->data + MT_SDIO_HDR_SIZE);