mt76: mt7921: refactor mt7921_mcu_send_message
authorSean Wang <sean.wang@mediatek.com>
Mon, 18 Oct 2021 23:11:45 +0000 (07:11 +0800)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Oct 2021 08:37:00 +0000 (10:37 +0200)
This is a preliminary patch to introduce mt7921s support.

Refactor mt7921_mcu_send_message to be sharable between mt7921s and
mt7921e.

Tested-by: Deren Wu <deren.wu@mediatek.com>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c

index a95495069a4dbcb79ef32374c60d4175a7d388b0..44e74e43ee78271197e8794c4ff6784ac7218a1f 100644 (file)
@@ -224,12 +224,11 @@ int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
 }
 EXPORT_SYMBOL_GPL(mt7921_mcu_parse_response);
 
-int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+int mt7921_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb,
                            int cmd, int *wait_seq)
 {
        struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
        int txd_len, mcu_cmd = cmd & MCU_CMD_MASK;
-       enum mt76_mcuq_id txq = MT_MCUQ_WM;
        struct mt7921_uni_txd *uni_txd;
        struct mt7921_mcu_txd *mcu_txd;
        __le32 *txd;
@@ -251,10 +250,8 @@ int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
        if (!seq)
                seq = ++dev->mt76.mcu.msg_seq & 0xf;
 
-       if (cmd == MCU_CMD_FW_SCATTER) {
-               txq = MT_MCUQ_FWDL;
+       if (cmd == MCU_CMD_FW_SCATTER)
                goto exit;
-       }
 
        txd_len = cmd & MCU_UNI_PREFIX ? sizeof(*uni_txd) : sizeof(*mcu_txd);
        txd = (__le32 *)skb_push(skb, txd_len);
@@ -318,9 +315,9 @@ exit:
        if (wait_seq)
                *wait_seq = seq;
 
-       return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[txq], skb, 0);
+       return 0;
 }
-EXPORT_SYMBOL_GPL(mt7921_mcu_send_message);
+EXPORT_SYMBOL_GPL(mt7921_mcu_fill_message);
 
 static void
 mt7921_mcu_scan_event(struct mt7921_dev *dev, struct sk_buff *skb)
index 2082b4d2a23d222a1fe68861e4496fe1470b5477..f4b85ec530bd43c5ace722ff0200b4a5faa42f00 100644 (file)
@@ -381,7 +381,7 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,
                           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_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+int mt7921_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb,
                            int cmd, int *wait_seq);
 int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
                              struct sk_buff *skb, int seq);
index 9ac3bc25f0679c02bfce251622ac6db316eaaf36..583a89a34734a8597748b7a70eccf857999bedbc 100644 (file)
@@ -18,6 +18,24 @@ static int mt7921e_driver_own(struct mt7921_dev *dev)
        return 0;
 }
 
+static int
+mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+                       int cmd, int *seq)
+{
+       struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
+       enum mt76_mcuq_id txq = MT_MCUQ_WM;
+       int ret;
+
+       ret = mt7921_mcu_fill_message(mdev, skb, cmd, seq);
+       if (ret)
+               return ret;
+
+       if (cmd == MCU_CMD_FW_SCATTER)
+               txq = MT_MCUQ_FWDL;
+
+       return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[txq], skb, 0);
+}
+
 int mt7921e_mcu_init(struct mt7921_dev *dev)
 {
        static const struct mt76_mcu_ops mt7921_mcu_ops = {