{
        struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
        struct mt7915_mcu_txd *mcu_txd;
-       u8 seq, pkt_fmt, qidx;
 -      enum mt76_txq_id txq;
 +      enum mt76_mcuq_id qid;
        __le32 *txd;
        u32 val;
+       u8 seq;
  
        /* TODO: make dynamic based on msg type */
        mdev->mcu.timeout = 20 * HZ;
        if (!seq)
                seq = ++dev->mt76.mcu.msg_seq & 0xf;
  
-       if (cmd == -MCU_CMD_FW_SCATTER) {
+       if (cmd == MCU_CMD(FW_SCATTER)) {
 -              txq = MT_MCUQ_FWDL;
 +              qid = MT_MCUQ_FWDL;
                goto exit;
        }
  
        mcu_txd = (struct mt7915_mcu_txd *)skb_push(skb, sizeof(*mcu_txd));
- 
-       if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state)) {
+       if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state))
 -              txq = MT_MCUQ_WA;
 +              qid = MT_MCUQ_WA;
-               qidx = MT_TX_MCU_PORT_RX_Q0;
-               pkt_fmt = MT_TX_TYPE_CMD;
-       } else {
+       else
 -              txq = MT_MCUQ_WM;
 +              qid = MT_MCUQ_WM;
-               qidx = MT_TX_MCU_PORT_RX_Q0;
-               pkt_fmt = MT_TX_TYPE_CMD;
-       }
  
        txd = mcu_txd->txd;
  
        if (wait_seq)
                *wait_seq = seq;
  
 -      return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[txq], skb, 0);
 +      return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
  }
  
+ static void
+ mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
+ {
+       struct {
+               __le32 args[3];
+       } req = {
+               .args = {
+                       cpu_to_le32(a1),
+                       cpu_to_le32(a2),
+                       cpu_to_le32(a3),
+               },
+       };
+ 
+       mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
+ }
+ 
  static void
  mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
  {