Lines Matching refs:eptdev

83 	struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev);  in rpmsg_eptdev_destroy()  local
85 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_destroy()
86 if (eptdev->ept) { in rpmsg_eptdev_destroy()
87 rpmsg_destroy_ept(eptdev->ept); in rpmsg_eptdev_destroy()
88 eptdev->ept = NULL; in rpmsg_eptdev_destroy()
90 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_destroy()
93 wake_up_interruptible(&eptdev->readq); in rpmsg_eptdev_destroy()
95 device_del(&eptdev->dev); in rpmsg_eptdev_destroy()
96 put_device(&eptdev->dev); in rpmsg_eptdev_destroy()
104 struct rpmsg_eptdev *eptdev = priv; in rpmsg_ept_cb() local
113 spin_lock(&eptdev->queue_lock); in rpmsg_ept_cb()
114 skb_queue_tail(&eptdev->queue, skb); in rpmsg_ept_cb()
115 spin_unlock(&eptdev->queue_lock); in rpmsg_ept_cb()
118 wake_up_interruptible(&eptdev->readq); in rpmsg_ept_cb()
125 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_open() local
127 struct rpmsg_device *rpdev = eptdev->rpdev; in rpmsg_eptdev_open()
128 struct device *dev = &eptdev->dev; in rpmsg_eptdev_open()
130 if (eptdev->ept) in rpmsg_eptdev_open()
135 ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo); in rpmsg_eptdev_open()
137 dev_err(dev, "failed to open %s\n", eptdev->chinfo.name); in rpmsg_eptdev_open()
142 eptdev->ept = ept; in rpmsg_eptdev_open()
143 filp->private_data = eptdev; in rpmsg_eptdev_open()
150 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_release() local
151 struct device *dev = &eptdev->dev; in rpmsg_eptdev_release()
154 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_release()
155 if (eptdev->ept) { in rpmsg_eptdev_release()
156 rpmsg_destroy_ept(eptdev->ept); in rpmsg_eptdev_release()
157 eptdev->ept = NULL; in rpmsg_eptdev_release()
159 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_release()
162 skb_queue_purge(&eptdev->queue); in rpmsg_eptdev_release()
172 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_read_iter() local
177 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
180 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
183 if (skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_read_iter()
184 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
190 if (wait_event_interruptible(eptdev->readq, in rpmsg_eptdev_read_iter()
191 !skb_queue_empty(&eptdev->queue) || in rpmsg_eptdev_read_iter()
192 !eptdev->ept)) in rpmsg_eptdev_read_iter()
196 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
199 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
202 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_read_iter()
203 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
220 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_write_iter() local
234 if (mutex_lock_interruptible(&eptdev->ept_lock)) { in rpmsg_eptdev_write_iter()
239 if (!eptdev->ept) { in rpmsg_eptdev_write_iter()
245 ret = rpmsg_trysendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
247 ret = rpmsg_sendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
250 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_write_iter()
259 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_poll() local
262 if (!eptdev->ept) in rpmsg_eptdev_poll()
265 poll_wait(filp, &eptdev->readq, wait); in rpmsg_eptdev_poll()
267 if (!skb_queue_empty(&eptdev->queue)) in rpmsg_eptdev_poll()
270 mask |= rpmsg_poll(eptdev->ept, filp, wait); in rpmsg_eptdev_poll()
278 struct rpmsg_eptdev *eptdev = fp->private_data; in rpmsg_eptdev_ioctl() local
283 return rpmsg_eptdev_destroy(&eptdev->dev, NULL); in rpmsg_eptdev_ioctl()
300 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in name_show() local
302 return sprintf(buf, "%s\n", eptdev->chinfo.name); in name_show()
309 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in src_show() local
311 return sprintf(buf, "%d\n", eptdev->chinfo.src); in src_show()
318 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in dst_show() local
320 return sprintf(buf, "%d\n", eptdev->chinfo.dst); in dst_show()
334 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_eptdev_release_device() local
337 ida_simple_remove(&rpmsg_minor_ida, MINOR(eptdev->dev.devt)); in rpmsg_eptdev_release_device()
338 cdev_del(&eptdev->cdev); in rpmsg_eptdev_release_device()
339 kfree(eptdev); in rpmsg_eptdev_release_device()
346 struct rpmsg_eptdev *eptdev; in rpmsg_eptdev_create() local
350 eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL); in rpmsg_eptdev_create()
351 if (!eptdev) in rpmsg_eptdev_create()
354 dev = &eptdev->dev; in rpmsg_eptdev_create()
355 eptdev->rpdev = rpdev; in rpmsg_eptdev_create()
356 eptdev->chinfo = chinfo; in rpmsg_eptdev_create()
358 mutex_init(&eptdev->ept_lock); in rpmsg_eptdev_create()
359 spin_lock_init(&eptdev->queue_lock); in rpmsg_eptdev_create()
360 skb_queue_head_init(&eptdev->queue); in rpmsg_eptdev_create()
361 init_waitqueue_head(&eptdev->readq); in rpmsg_eptdev_create()
367 dev_set_drvdata(dev, eptdev); in rpmsg_eptdev_create()
369 cdev_init(&eptdev->cdev, &rpmsg_eptdev_fops); in rpmsg_eptdev_create()
370 eptdev->cdev.owner = THIS_MODULE; in rpmsg_eptdev_create()
383 ret = cdev_add(&eptdev->cdev, dev->devt, 1); in rpmsg_eptdev_create()
404 kfree(eptdev); in rpmsg_eptdev_create()