Lines Matching refs:drv_data

54 static int nfcmrvl_inc_tx(struct nfcmrvl_usb_drv_data *drv_data)  in nfcmrvl_inc_tx()  argument
59 spin_lock_irqsave(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
60 rv = test_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_inc_tx()
62 drv_data->tx_in_flight++; in nfcmrvl_inc_tx()
63 spin_unlock_irqrestore(&drv_data->txlock, flags); in nfcmrvl_inc_tx()
70 struct nfcmrvl_usb_drv_data *drv_data = urb->context; in nfcmrvl_bulk_complete() local
74 dev_dbg(&drv_data->udev->dev, "urb %p status %d count %d\n", in nfcmrvl_bulk_complete()
77 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
81 skb = nci_skb_alloc(drv_data->priv->ndev, urb->actual_length, in nfcmrvl_bulk_complete()
84 nfc_err(&drv_data->udev->dev, "failed to alloc mem\n"); in nfcmrvl_bulk_complete()
88 if (nfcmrvl_nci_recv_frame(drv_data->priv, skb) < 0) in nfcmrvl_bulk_complete()
89 nfc_err(&drv_data->udev->dev, in nfcmrvl_bulk_complete()
94 if (!test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) in nfcmrvl_bulk_complete()
97 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_bulk_complete()
98 usb_mark_last_busy(drv_data->udev); in nfcmrvl_bulk_complete()
106 nfc_err(&drv_data->udev->dev, in nfcmrvl_bulk_complete()
113 nfcmrvl_submit_bulk_urb(struct nfcmrvl_usb_drv_data *drv_data, gfp_t mem_flags) in nfcmrvl_submit_bulk_urb() argument
120 if (!drv_data->bulk_rx_ep) in nfcmrvl_submit_bulk_urb()
133 pipe = usb_rcvbulkpipe(drv_data->udev, in nfcmrvl_submit_bulk_urb()
134 drv_data->bulk_rx_ep->bEndpointAddress); in nfcmrvl_submit_bulk_urb()
136 usb_fill_bulk_urb(urb, drv_data->udev, pipe, buf, size, in nfcmrvl_submit_bulk_urb()
137 nfcmrvl_bulk_complete, drv_data); in nfcmrvl_submit_bulk_urb()
141 usb_mark_last_busy(drv_data->udev); in nfcmrvl_submit_bulk_urb()
142 usb_anchor_urb(urb, &drv_data->bulk_anchor); in nfcmrvl_submit_bulk_urb()
147 nfc_err(&drv_data->udev->dev, in nfcmrvl_submit_bulk_urb()
162 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_tx_complete() local
167 spin_lock(&drv_data->txlock); in nfcmrvl_tx_complete()
168 drv_data->tx_in_flight--; in nfcmrvl_tx_complete()
169 spin_unlock(&drv_data->txlock); in nfcmrvl_tx_complete()
177 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_open() local
180 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
184 drv_data->intf->needs_remote_wakeup = 1; in nfcmrvl_usb_nci_open()
186 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
190 set_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_open()
191 nfcmrvl_submit_bulk_urb(drv_data, GFP_KERNEL); in nfcmrvl_usb_nci_open()
193 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
197 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_open()
201 static void nfcmrvl_usb_stop_traffic(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_usb_stop_traffic() argument
203 usb_kill_anchored_urbs(&drv_data->bulk_anchor); in nfcmrvl_usb_stop_traffic()
208 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_close() local
211 cancel_work_sync(&drv_data->waker); in nfcmrvl_usb_nci_close()
213 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_usb_nci_close()
215 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_usb_nci_close()
216 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_usb_nci_close()
217 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
221 drv_data->intf->needs_remote_wakeup = 0; in nfcmrvl_usb_nci_close()
222 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_usb_nci_close()
225 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_usb_nci_close()
232 struct nfcmrvl_usb_drv_data *drv_data = priv->drv_data; in nfcmrvl_usb_nci_send() local
237 if (!drv_data->bulk_tx_ep) in nfcmrvl_usb_nci_send()
244 pipe = usb_sndbulkpipe(drv_data->udev, in nfcmrvl_usb_nci_send()
245 drv_data->bulk_tx_ep->bEndpointAddress); in nfcmrvl_usb_nci_send()
247 usb_fill_bulk_urb(urb, drv_data->udev, pipe, skb->data, skb->len, in nfcmrvl_usb_nci_send()
250 err = nfcmrvl_inc_tx(drv_data); in nfcmrvl_usb_nci_send()
252 usb_anchor_urb(urb, &drv_data->deferred); in nfcmrvl_usb_nci_send()
253 schedule_work(&drv_data->waker); in nfcmrvl_usb_nci_send()
258 usb_anchor_urb(urb, &drv_data->tx_anchor); in nfcmrvl_usb_nci_send()
263 nfc_err(&drv_data->udev->dev, in nfcmrvl_usb_nci_send()
268 usb_mark_last_busy(drv_data->udev); in nfcmrvl_usb_nci_send()
284 struct nfcmrvl_usb_drv_data *drv_data = in nfcmrvl_waker() local
288 err = usb_autopm_get_interface(drv_data->intf); in nfcmrvl_waker()
292 usb_autopm_put_interface(drv_data->intf); in nfcmrvl_waker()
299 struct nfcmrvl_usb_drv_data *drv_data; in nfcmrvl_probe() local
310 drv_data = devm_kzalloc(&intf->dev, sizeof(*drv_data), GFP_KERNEL); in nfcmrvl_probe()
311 if (!drv_data) in nfcmrvl_probe()
317 if (!drv_data->bulk_tx_ep && in nfcmrvl_probe()
319 drv_data->bulk_tx_ep = ep_desc; in nfcmrvl_probe()
323 if (!drv_data->bulk_rx_ep && in nfcmrvl_probe()
325 drv_data->bulk_rx_ep = ep_desc; in nfcmrvl_probe()
330 if (!drv_data->bulk_tx_ep || !drv_data->bulk_rx_ep) in nfcmrvl_probe()
333 drv_data->udev = udev; in nfcmrvl_probe()
334 drv_data->intf = intf; in nfcmrvl_probe()
336 INIT_WORK(&drv_data->waker, nfcmrvl_waker); in nfcmrvl_probe()
337 spin_lock_init(&drv_data->txlock); in nfcmrvl_probe()
339 init_usb_anchor(&drv_data->tx_anchor); in nfcmrvl_probe()
340 init_usb_anchor(&drv_data->bulk_anchor); in nfcmrvl_probe()
341 init_usb_anchor(&drv_data->deferred); in nfcmrvl_probe()
343 priv = nfcmrvl_nci_register_dev(NFCMRVL_PHY_USB, drv_data, &usb_ops, in nfcmrvl_probe()
344 &drv_data->udev->dev, &config); in nfcmrvl_probe()
348 drv_data->priv = priv; in nfcmrvl_probe()
349 drv_data->priv->support_fw_dnld = false; in nfcmrvl_probe()
351 priv->dev = &drv_data->udev->dev; in nfcmrvl_probe()
353 usb_set_intfdata(intf, drv_data); in nfcmrvl_probe()
360 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_disconnect() local
362 if (!drv_data) in nfcmrvl_disconnect()
365 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_disconnect()
367 nfcmrvl_nci_unregister_dev(drv_data->priv); in nfcmrvl_disconnect()
369 usb_set_intfdata(drv_data->intf, NULL); in nfcmrvl_disconnect()
375 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_suspend() local
377 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_suspend()
379 if (drv_data->suspend_count++) in nfcmrvl_suspend()
382 spin_lock_irq(&drv_data->txlock); in nfcmrvl_suspend()
383 if (!(PMSG_IS_AUTO(message) && drv_data->tx_in_flight)) { in nfcmrvl_suspend()
384 set_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_suspend()
385 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
387 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_suspend()
388 drv_data->suspend_count--; in nfcmrvl_suspend()
392 nfcmrvl_usb_stop_traffic(drv_data); in nfcmrvl_suspend()
393 usb_kill_anchored_urbs(&drv_data->tx_anchor); in nfcmrvl_suspend()
398 static void nfcmrvl_play_deferred(struct nfcmrvl_usb_drv_data *drv_data) in nfcmrvl_play_deferred() argument
403 while ((urb = usb_get_from_anchor(&drv_data->deferred))) { in nfcmrvl_play_deferred()
408 drv_data->tx_in_flight++; in nfcmrvl_play_deferred()
410 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_play_deferred()
415 struct nfcmrvl_usb_drv_data *drv_data = usb_get_intfdata(intf); in nfcmrvl_resume() local
418 nfc_info(&drv_data->udev->dev, "intf %p\n", intf); in nfcmrvl_resume()
420 if (--drv_data->suspend_count) in nfcmrvl_resume()
423 if (!test_bit(NFCMRVL_NCI_RUNNING, &drv_data->flags)) in nfcmrvl_resume()
426 if (test_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags)) { in nfcmrvl_resume()
427 err = nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
429 clear_bit(NFCMRVL_USB_BULK_RUNNING, &drv_data->flags); in nfcmrvl_resume()
433 nfcmrvl_submit_bulk_urb(drv_data, GFP_NOIO); in nfcmrvl_resume()
436 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
437 nfcmrvl_play_deferred(drv_data); in nfcmrvl_resume()
438 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
439 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()
444 usb_scuttle_anchored_urbs(&drv_data->deferred); in nfcmrvl_resume()
446 spin_lock_irq(&drv_data->txlock); in nfcmrvl_resume()
447 clear_bit(NFCMRVL_USB_SUSPENDING, &drv_data->flags); in nfcmrvl_resume()
448 spin_unlock_irq(&drv_data->txlock); in nfcmrvl_resume()