Lines Matching defs:drv_data
54 static int nfcmrvl_inc_tx(struct nfcmrvl_usb_drv_data *drv_data)
59 spin_lock_irqsave(&drv_data->txlock, flags);
60 rv = test_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags);
62 drv_data->tx_in_flight++;
63 spin_unlock_irqrestore(&drv_data->txlock, flags);
70 struct nfcmrvl_usb_drv_data *drv_data = urb->context;
74 dev_dbg(&drv_data->udev->dev, "urb %p status %d count %d\n",
77 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags))
81 skb = nci_skb_alloc(drv_data->priv->ndev, urb->actual_length,
84 nfc_err(&drv_data->udev->dev, "failed to alloc mem\n");
88 if (nfcmrvl_nci_recv_frame(drv_data->priv, skb) < 0)
89 nfc_err(&drv_data->udev->dev,
94 if (!test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags))
97 usb_anchor_urb(urb, &drv_data->bulk_anchor);
98 usb_mark_last_busy(drv_data->udev);
106 nfc_err(&drv_data->udev->dev,
113 nfcmrvl_submit_bulk_urb(struct nfcmrvl_usb_drv_data *drv_data, gfp_t mem_flags)
120 if (!drv_data->bulk_rx_ep)
133 pipe = usb_rcvbulkpipe(drv_data->udev,
134 drv_data->bulk_rx_ep->bEndpointAddress);
136 usb_fill_bulk_urb(urb, drv_data->udev, pipe, buf, size,
137 nfcmrvl_bulk_complete, drv_data);
141 usb_mark_last_busy(drv_data->udev);
142 usb_anchor_urb(urb, &drv_data->bulk_anchor);
147 nfc_err(&drv_data->udev->dev,
162 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data;
168 spin_lock_irqsave(&drv_data->txlock, flags);
169 drv_data->tx_in_flight--;
170 spin_unlock_irqrestore(&drv_data->txlock, flags);
178 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data;
181 err = usb_autopm_get_interface(drv_data->intf);
185 drv_data->intf->needs_remote_wakeup = 1;
187 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL);
191 set_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags);
192 nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL);
194 usb_autopm_put_interface(drv_data->intf);
198 usb_autopm_put_interface(drv_data->intf);
202 static void nfcmrvl_usb_stop_traffic(struct nfcmrvl_usb_drv_data *drv_data)
204 usb_kill_anchored_urbs(&drv_data->bulk_anchor);
209 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data;
212 cancel_work_sync(&drv_data->waker);
214 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags);
216 nfcmrvl_usb_stop_traffic(drv_data);
217 usb_kill_anchored_urbs(&drv_data->tx_anchor);
218 err = usb_autopm_get_interface(drv_data->intf);
222 drv_data->intf->needs_remote_wakeup = 0;
223 usb_autopm_put_interface(drv_data->intf);
226 usb_scuttle_anchored_urbs(&drv_data->deferred);
233 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data;
238 if (!drv_data->bulk_tx_ep)
245 pipe = usb_sndbulkpipe(drv_data->udev,
246 drv_data->bulk_tx_ep->bEndpointAddress);
248 usb_fill_bulk_urb(urb, drv_data->udev, pipe, skb->data, skb->len,
251 err = nfcmrvl_inc_tx(drv_data);
253 usb_anchor_urb(urb, &drv_data->deferred);
254 schedule_work(&drv_data->waker);
259 usb_anchor_urb(urb, &drv_data->tx_anchor);
264 nfc_err(&drv_data->udev->dev,
269 usb_mark_last_busy(drv_data->udev);
285 struct nfcmrvl_usb_drv_data *drv_data =
289 err = usb_autopm_get_interface(drv_data->intf);
293 usb_autopm_put_interface(drv_data->intf);
300 struct nfcmrvl_usb_drv_data *drv_data;
312 drv_data = devm_kzalloc(&intf->dev, sizeof(*drv_data), GFP_KERNEL);
313 if (!drv_data)
319 if (!drv_data->bulk_tx_ep &&
321 drv_data->bulk_tx_ep = ep_desc;
325 if (!drv_data->bulk_rx_ep &&
327 drv_data->bulk_rx_ep = ep_desc;
332 if (!drv_data->bulk_tx_ep || !drv_data->bulk_rx_ep)
335 drv_data->udev = udev;
336 drv_data->intf = intf;
338 INIT_WORK(&drv_data->waker, nfcmrvl_waker);
339 spin_lock_init(&drv_data->txlock);
341 init_usb_anchor(&drv_data->tx_anchor);
342 init_usb_anchor(&drv_data->bulk_anchor);
343 init_usb_anchor(&drv_data->deferred);
345 priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_USB, drv_data, &usb_ops,
350 drv_data->priv = priv;
351 drv_data->priv->support_fw_dnld = false;
353 usb_set_intfdata(intf, drv_data);
360 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf);
362 if (!drv_data)
365 nfc_info(&drv_data->udev->dev, "intf %p\n", intf);
367 nfcmrvl_nci_unregister_dev(drv_data->priv);
369 usb_set_intfdata(drv_data->intf, NULL);
375 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf);
377 nfc_info(&drv_data->udev->dev, "intf %p\n", intf);
379 if (drv_data->suspend_count++)
382 spin_lock_irq(&drv_data->txlock);
383 if (!(PMSG_IS_AUTO(message) && drv_data->tx_in_flight)) {
384 set_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags);
385 spin_unlock_irq(&drv_data->txlock);
387 spin_unlock_irq(&drv_data->txlock);
388 drv_data->suspend_count--;
392 nfcmrvl_usb_stop_traffic(drv_data);
393 usb_kill_anchored_urbs(&drv_data->tx_anchor);
398 static void nfcmrvl_play_deferred(struct nfcmrvl_usb_drv_data *drv_data)
403 while ((urb = usb_get_from_anchor(&drv_data->deferred))) {
404 usb_anchor_urb(urb, &drv_data->tx_anchor);
414 drv_data->tx_in_flight++;
419 while ((urb = usb_get_from_anchor(&drv_data->deferred))) {
427 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf);
430 nfc_info(&drv_data->udev->dev, "intf %p\n", intf);
432 if (--drv_data->suspend_count)
435 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags))
438 if (test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) {
439 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO);
441 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags);
445 nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO);
448 spin_lock_irq(&drv_data->txlock);
449 nfcmrvl_play_deferred(drv_data);
450 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags);
451 spin_unlock_irq(&drv_data->txlock);
456 usb_scuttle_anchored_urbs(&drv_data->deferred);
458 spin_lock_irq(&drv_data->txlock);
459 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags);
460 spin_unlock_irq(&drv_data->txlock);