Lines Matching full:vdev
34 struct virtual_nci_dev *vdev = nci_get_drvdata(ndev); in virtual_nci_open() local
36 vdev->running = true; in virtual_nci_open()
42 struct virtual_nci_dev *vdev = nci_get_drvdata(ndev); in virtual_nci_close() local
44 mutex_lock(&vdev->mtx); in virtual_nci_close()
45 kfree_skb(vdev->send_buff); in virtual_nci_close()
46 vdev->send_buff = NULL; in virtual_nci_close()
47 vdev->running = false; in virtual_nci_close()
48 mutex_unlock(&vdev->mtx); in virtual_nci_close()
55 struct virtual_nci_dev *vdev = nci_get_drvdata(ndev); in virtual_nci_send() local
57 mutex_lock(&vdev->mtx); in virtual_nci_send()
58 if (vdev->send_buff || !vdev->running) { in virtual_nci_send()
59 mutex_unlock(&vdev->mtx); in virtual_nci_send()
63 vdev->send_buff = skb_copy(skb, GFP_KERNEL); in virtual_nci_send()
64 if (!vdev->send_buff) { in virtual_nci_send()
65 mutex_unlock(&vdev->mtx); in virtual_nci_send()
69 mutex_unlock(&vdev->mtx); in virtual_nci_send()
70 wake_up_interruptible(&vdev->wq); in virtual_nci_send()
85 struct virtual_nci_dev *vdev = file->private_data; in virtual_ncidev_read() local
88 mutex_lock(&vdev->mtx); in virtual_ncidev_read()
89 while (!vdev->send_buff) { in virtual_ncidev_read()
90 mutex_unlock(&vdev->mtx); in virtual_ncidev_read()
91 if (wait_event_interruptible(vdev->wq, vdev->send_buff)) in virtual_ncidev_read()
93 mutex_lock(&vdev->mtx); in virtual_ncidev_read()
96 actual_len = min_t(size_t, count, vdev->send_buff->len); in virtual_ncidev_read()
98 if (copy_to_user(buf, vdev->send_buff->data, actual_len)) { in virtual_ncidev_read()
99 mutex_unlock(&vdev->mtx); in virtual_ncidev_read()
103 skb_pull(vdev->send_buff, actual_len); in virtual_ncidev_read()
104 if (vdev->send_buff->len == 0) { in virtual_ncidev_read()
105 consume_skb(vdev->send_buff); in virtual_ncidev_read()
106 vdev->send_buff = NULL; in virtual_ncidev_read()
108 mutex_unlock(&vdev->mtx); in virtual_ncidev_read()
117 struct virtual_nci_dev *vdev = file->private_data; in virtual_ncidev_write() local
129 nci_recv_frame(vdev->ndev, skb); in virtual_ncidev_write()
136 struct virtual_nci_dev *vdev; in virtual_ncidev_open() local
138 vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); in virtual_ncidev_open()
139 if (!vdev) in virtual_ncidev_open()
141 vdev->ndev = nci_allocate_device(&virtual_nci_ops, in virtual_ncidev_open()
143 if (!vdev->ndev) { in virtual_ncidev_open()
144 kfree(vdev); in virtual_ncidev_open()
148 mutex_init(&vdev->mtx); in virtual_ncidev_open()
149 init_waitqueue_head(&vdev->wq); in virtual_ncidev_open()
150 file->private_data = vdev; in virtual_ncidev_open()
151 nci_set_drvdata(vdev->ndev, vdev); in virtual_ncidev_open()
153 ret = nci_register_device(vdev->ndev); in virtual_ncidev_open()
155 nci_free_device(vdev->ndev); in virtual_ncidev_open()
156 mutex_destroy(&vdev->mtx); in virtual_ncidev_open()
157 kfree(vdev); in virtual_ncidev_open()
166 struct virtual_nci_dev *vdev = file->private_data; in virtual_ncidev_close() local
168 nci_unregister_device(vdev->ndev); in virtual_ncidev_close()
169 nci_free_device(vdev->ndev); in virtual_ncidev_close()
170 mutex_destroy(&vdev->mtx); in virtual_ncidev_close()
171 kfree(vdev); in virtual_ncidev_close()
179 struct virtual_nci_dev *vdev = file->private_data; in virtual_ncidev_ioctl() local
180 const struct nfc_dev *nfc_dev = vdev->ndev->nfc_dev; in virtual_ncidev_ioctl()