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()
132 ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo); in rpmsg_eptdev_open()
134 dev_err(dev, "failed to open %s\n", eptdev->chinfo.name); in rpmsg_eptdev_open()
139 eptdev->ept = ept; in rpmsg_eptdev_open()
140 filp->private_data = eptdev; in rpmsg_eptdev_open()
147 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_release() local
148 struct device *dev = &eptdev->dev; in rpmsg_eptdev_release()
152 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_release()
153 if (eptdev->ept) { in rpmsg_eptdev_release()
154 rpmsg_destroy_ept(eptdev->ept); in rpmsg_eptdev_release()
155 eptdev->ept = NULL; in rpmsg_eptdev_release()
157 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_release()
160 while (!skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_release()
161 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_release()
173 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_read() local
178 if (!eptdev->ept) in rpmsg_eptdev_read()
181 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read()
184 if (skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_read()
185 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read()
191 if (wait_event_interruptible(eptdev->readq, in rpmsg_eptdev_read()
192 !skb_queue_empty(&eptdev->queue) || in rpmsg_eptdev_read()
193 !eptdev->ept)) in rpmsg_eptdev_read()
197 if (!eptdev->ept) in rpmsg_eptdev_read()
200 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read()
203 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_read()
204 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read()
220 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_write() local
228 if (mutex_lock_interruptible(&eptdev->ept_lock)) { in rpmsg_eptdev_write()
233 if (!eptdev->ept) { in rpmsg_eptdev_write()
239 ret = rpmsg_trysend(eptdev->ept, kbuf, len); in rpmsg_eptdev_write()
241 ret = rpmsg_send(eptdev->ept, kbuf, len); in rpmsg_eptdev_write()
244 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_write()
253 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_poll() local
256 if (!eptdev->ept) in rpmsg_eptdev_poll()
259 poll_wait(filp, &eptdev->readq, wait); in rpmsg_eptdev_poll()
261 if (!skb_queue_empty(&eptdev->queue)) in rpmsg_eptdev_poll()
264 mask |= rpmsg_poll(eptdev->ept, filp, wait); in rpmsg_eptdev_poll()
272 struct rpmsg_eptdev *eptdev = fp->private_data; in rpmsg_eptdev_ioctl() local
277 return rpmsg_eptdev_destroy(&eptdev->dev, NULL); in rpmsg_eptdev_ioctl()
294 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in name_show() local
296 return sprintf(buf, "%s\n", eptdev->chinfo.name); in name_show()
303 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in src_show() local
305 return sprintf(buf, "%d\n", eptdev->chinfo.src); in src_show()
312 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in dst_show() local
314 return sprintf(buf, "%d\n", eptdev->chinfo.dst); in dst_show()
328 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_eptdev_release_device() local
331 ida_simple_remove(&rpmsg_minor_ida, MINOR(eptdev->dev.devt)); in rpmsg_eptdev_release_device()
332 cdev_del(&eptdev->cdev); in rpmsg_eptdev_release_device()
333 kfree(eptdev); in rpmsg_eptdev_release_device()
340 struct rpmsg_eptdev *eptdev; in rpmsg_eptdev_create() local
344 eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL); in rpmsg_eptdev_create()
345 if (!eptdev) in rpmsg_eptdev_create()
348 dev = &eptdev->dev; in rpmsg_eptdev_create()
349 eptdev->rpdev = rpdev; in rpmsg_eptdev_create()
350 eptdev->chinfo = chinfo; in rpmsg_eptdev_create()
352 mutex_init(&eptdev->ept_lock); in rpmsg_eptdev_create()
353 spin_lock_init(&eptdev->queue_lock); in rpmsg_eptdev_create()
354 skb_queue_head_init(&eptdev->queue); in rpmsg_eptdev_create()
355 init_waitqueue_head(&eptdev->readq); in rpmsg_eptdev_create()
361 dev_set_drvdata(dev, eptdev); in rpmsg_eptdev_create()
363 cdev_init(&eptdev->cdev, &rpmsg_eptdev_fops); in rpmsg_eptdev_create()
364 eptdev->cdev.owner = THIS_MODULE; in rpmsg_eptdev_create()
377 ret = cdev_add(&eptdev->cdev, dev->devt, 1); in rpmsg_eptdev_create()
398 kfree(eptdev); in rpmsg_eptdev_create()