Merge git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git
[platform/kernel/linux-starfive.git] / drivers / net / wireless / mediatek / mt76 / usb.c
index 87382b2..dcab599 100644 (file)
@@ -672,17 +672,11 @@ mt76u_process_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
 static void mt76u_rx_tasklet(unsigned long data)
 {
        struct mt76_dev *dev = (struct mt76_dev *)data;
-       struct mt76_queue *q;
        int i;
 
        rcu_read_lock();
-       for (i = 0; i < __MT_RXQ_MAX; i++) {
-               q = &dev->q_rx[i];
-               if (!q->ndesc)
-                       continue;
-
-               mt76u_process_rx_queue(dev, q);
-       }
+       mt76_for_each_q_rx(dev, i)
+               mt76u_process_rx_queue(dev, &dev->q_rx[i]);
        rcu_read_unlock();
 }
 
@@ -756,27 +750,19 @@ mt76u_free_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
 
 static void mt76u_free_rx(struct mt76_dev *dev)
 {
-       struct mt76_queue *q;
        int i;
 
-       for (i = 0; i < __MT_RXQ_MAX; i++) {
-               q = &dev->q_rx[i];
-               if (!q->ndesc)
-                       continue;
-
-               mt76u_free_rx_queue(dev, q);
-       }
+       mt76_for_each_q_rx(dev, i)
+               mt76u_free_rx_queue(dev, &dev->q_rx[i]);
 }
 
 void mt76u_stop_rx(struct mt76_dev *dev)
 {
-       struct mt76_queue *q;
-       int i, j;
+       int i;
 
-       for (i = 0; i < __MT_RXQ_MAX; i++) {
-               q = &dev->q_rx[i];
-               if (!q->ndesc)
-                       continue;
+       mt76_for_each_q_rx(dev, i) {
+               struct mt76_queue *q = &dev->q_rx[i];
+               int j;
 
                for (j = 0; j < q->ndesc; j++)
                        usb_poison_urb(q->entry[j].urb);
@@ -788,14 +774,11 @@ EXPORT_SYMBOL_GPL(mt76u_stop_rx);
 
 int mt76u_resume_rx(struct mt76_dev *dev)
 {
-       struct mt76_queue *q;
-       int i, j, err;
-
-       for (i = 0; i < __MT_RXQ_MAX; i++) {
-               q = &dev->q_rx[i];
+       int i;
 
-               if (!q->ndesc)
-                       continue;
+       mt76_for_each_q_rx(dev, i) {
+               struct mt76_queue *q = &dev->q_rx[i];
+               int err, j;
 
                for (j = 0; j < q->ndesc; j++)
                        usb_unpoison_urb(q->entry[j].urb);
@@ -859,7 +842,7 @@ static void mt76u_tx_tasklet(unsigned long data)
 
                if (dev->drv->tx_status_data &&
                    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
-                       queue_work(dev->usb.wq, &dev->usb.stat_work);
+                       queue_work(dev->wq, &dev->usb.stat_work);
                if (wake)
                        ieee80211_wake_queue(dev->hw, i);
        }
@@ -885,7 +868,7 @@ static void mt76u_tx_status_data(struct work_struct *work)
        }
 
        if (count && test_bit(MT76_STATE_RUNNING, &dev->phy.state))
-               queue_work(usb->wq, &usb->stat_work);
+               queue_work(dev->wq, &usb->stat_work);
        else
                clear_bit(MT76_READING_STATS, &dev->phy.state);
 }
@@ -921,35 +904,6 @@ mt76u_tx_setup_buffers(struct mt76_dev *dev, struct sk_buff *skb,
        return urb->num_sgs;
 }
 
-int mt76u_skb_dma_info(struct sk_buff *skb, u32 info)
-{
-       struct sk_buff *iter, *last = skb;
-       u32 pad;
-
-       put_unaligned_le32(info, skb_push(skb, sizeof(info)));
-       /* Add zero pad of 4 - 7 bytes */
-       pad = round_up(skb->len, 4) + 4 - skb->len;
-
-       /* First packet of a A-MSDU burst keeps track of the whole burst
-        * length, need to update length of it and the last packet.
-        */
-       skb_walk_frags(skb, iter) {
-               last = iter;
-               if (!iter->next) {
-                       skb->data_len += pad;
-                       skb->len += pad;
-                       break;
-               }
-       }
-
-       if (skb_pad(last, pad))
-               return -ENOMEM;
-       __skb_put(last, pad);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(mt76u_skb_dma_info);
-
 static int
 mt76u_tx_queue_skb(struct mt76_dev *dev, enum mt76_txq_id qid,
                   struct sk_buff *skb, struct mt76_wcid *wcid,
@@ -1161,15 +1115,6 @@ static const struct mt76_queue_ops usb_queue_ops = {
        .kick = mt76u_tx_kick,
 };
 
-void mt76u_deinit(struct mt76_dev *dev)
-{
-       if (dev->usb.wq) {
-               destroy_workqueue(dev->usb.wq);
-               dev->usb.wq = NULL;
-       }
-}
-EXPORT_SYMBOL_GPL(mt76u_deinit);
-
 int mt76u_init(struct mt76_dev *dev,
               struct usb_interface *intf, bool ext)
 {
@@ -1192,10 +1137,6 @@ int mt76u_init(struct mt76_dev *dev,
        tasklet_init(&dev->tx_tasklet, mt76u_tx_tasklet, (unsigned long)dev);
        INIT_WORK(&usb->stat_work, mt76u_tx_status_data);
 
-       usb->wq = alloc_workqueue("mt76u", WQ_UNBOUND, 0);
-       if (!usb->wq)
-               return -ENOMEM;
-
        usb->data_len = usb_maxpacket(udev, usb_sndctrlpipe(udev, 0), 1);
        if (usb->data_len < 32)
                usb->data_len = 32;
@@ -1219,7 +1160,8 @@ int mt76u_init(struct mt76_dev *dev,
        return 0;
 
 error:
-       mt76u_deinit(dev);
+       destroy_workqueue(dev->wq);
+
        return err;
 }
 EXPORT_SYMBOL_GPL(mt76u_init);