}
 EXPORT_SYMBOL_GPL(mt76u_resume_rx);
 
-static void mt76u_tx_worker(struct mt76_worker *w)
+static void mt76u_status_worker(struct mt76_worker *w)
 {
-       struct mt76_dev *dev = container_of(w, struct mt76_dev, tx_worker);
+       struct mt76_usb *usb = container_of(w, struct mt76_usb, status_worker);
+       struct mt76_dev *dev = container_of(usb, struct mt76_dev, usb);
        struct mt76_queue_entry entry;
        struct mt76_queue *q;
        bool wake;
                if (!q->queued)
                        wake_up(&dev->tx_wait);
 
-               mt76_txq_schedule(&dev->phy, i);
+               mt76_worker_schedule(&dev->tx_worker);
 
                if (dev->drv->tx_status_data &&
                    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
                dev_err(dev->dev, "tx urb failed: %d\n", urb->status);
        e->done = true;
 
-       mt76_worker_schedule(&dev->tx_worker);
+       mt76_worker_schedule(&dev->usb.status_worker);
 }
 
 static int
 {
        int i;
 
+       mt76_worker_teardown(&dev->usb.status_worker);
+
        for (i = 0; i < IEEE80211_NUM_ACS; i++) {
                struct mt76_queue *q;
                int j;
        int ret;
 
        mt76_worker_disable(&dev->tx_worker);
+       mt76_worker_disable(&dev->usb.status_worker);
 
        ret = wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(&dev->phy),
                                 HZ / 5);
        clear_bit(MT76_READING_STATS, &dev->phy.state);
 
        mt76_worker_enable(&dev->tx_worker);
+       mt76_worker_enable(&dev->usb.status_worker);
 
        mt76_tx_status_check(dev, NULL, true);
 }
        mt76u_ops.rmw = ext ? mt76u_rmw_ext : mt76u_rmw;
        mt76u_ops.write_copy = ext ? mt76u_copy_ext : mt76u_copy;
 
-       dev->tx_worker.fn = mt76u_tx_worker;
        INIT_WORK(&usb->stat_work, mt76u_tx_status_data);
 
        usb->data_len = usb_maxpacket(udev, usb_sndctrlpipe(udev, 0), 1);
        if (err)
                return err;
 
+       err = mt76_worker_setup(dev->hw, &usb->status_worker,
+                               mt76u_status_worker, "usb-status");
+       if (err)
+               return err;
+
        sched_set_fifo_low(usb->rx_worker.task);
+       sched_set_fifo_low(usb->status_worker.task);
 
        return 0;
 }