static int __maybe_unused mt76x2u_resume(struct usb_interface *intf) { struct mt76x02_dev *dev = usb_get_intfdata(intf); struct mt76_usb *usb = &dev->mt76.usb; int err; reinit_completion(&usb->mcu.cmpl); err = mt76u_submit_buf(&dev->mt76, USB_DIR_IN, MT_EP_IN_CMD_RESP, &usb->mcu.res, GFP_KERNEL, mt76u_mcu_complete_urb, &usb->mcu.cmpl); if (err < 0) goto err; err = mt76u_submit_rx_buffers(&dev->mt76); if (err < 0) goto err; tasklet_enable(&usb->rx_tasklet); tasklet_enable(&usb->tx_tasklet); err = mt76x2u_init_hardware(dev); if (err < 0) goto err; return 0; err: mt76x2u_cleanup(dev); return err; }
static int mt76u_alloc_rx(struct mt76_dev *dev) { struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN]; int i, err, nsgs; spin_lock_init(&q->rx_page_lock); spin_lock_init(&q->lock); q->entry = devm_kcalloc(dev->dev, MT_NUM_RX_ENTRIES, sizeof(*q->entry), GFP_KERNEL); if (!q->entry) return -ENOMEM; if (mt76u_check_sg(dev)) { q->buf_size = MT_RX_BUF_SIZE; nsgs = MT_SG_MAX_SIZE; } else { q->buf_size = PAGE_SIZE; nsgs = 1; } for (i = 0; i < MT_NUM_RX_ENTRIES; i++) { err = mt76u_buf_alloc(dev, &q->entry[i].ubuf, nsgs, q->buf_size, SKB_WITH_OVERHEAD(q->buf_size), GFP_KERNEL); if (err < 0) return err; } q->ndesc = MT_NUM_RX_ENTRIES; return mt76u_submit_rx_buffers(dev); }