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_iter() local
178 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
181 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
184 if (skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_read_iter()
185 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
191 if (wait_event_interruptible(eptdev->readq, in rpmsg_eptdev_read_iter()
192 !skb_queue_empty(&eptdev->queue) || in rpmsg_eptdev_read_iter()
193 !eptdev->ept)) in rpmsg_eptdev_read_iter()
197 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
200 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
203 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_read_iter()
204 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
221 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_write_iter() local
233 if (mutex_lock_interruptible(&eptdev->ept_lock)) { in rpmsg_eptdev_write_iter()
238 if (!eptdev->ept) { in rpmsg_eptdev_write_iter()
244 ret = rpmsg_trysend(eptdev->ept, kbuf, len); in rpmsg_eptdev_write_iter()
246 ret = rpmsg_send(eptdev->ept, kbuf, len); in rpmsg_eptdev_write_iter()
249 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_write_iter()
258 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_poll() local
261 if (!eptdev->ept) in rpmsg_eptdev_poll()
264 poll_wait(filp, &eptdev->readq, wait); in rpmsg_eptdev_poll()
266 if (!skb_queue_empty(&eptdev->queue)) in rpmsg_eptdev_poll()
269 mask |= rpmsg_poll(eptdev->ept, filp, wait); in rpmsg_eptdev_poll()
277 struct rpmsg_eptdev *eptdev = fp->private_data; in rpmsg_eptdev_ioctl() local
282 return rpmsg_eptdev_destroy(&eptdev->dev, NULL); in rpmsg_eptdev_ioctl()
299 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in name_show() local
301 return sprintf(buf, "%s\n", eptdev->chinfo.name); in name_show()
308 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in src_show() local
310 return sprintf(buf, "%d\n", eptdev->chinfo.src); in src_show()
317 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in dst_show() local
319 return sprintf(buf, "%d\n", eptdev->chinfo.dst); in dst_show()
333 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_eptdev_release_device() local
336 ida_simple_remove(&rpmsg_minor_ida, MINOR(eptdev->dev.devt)); in rpmsg_eptdev_release_device()
337 cdev_del(&eptdev->cdev); in rpmsg_eptdev_release_device()
338 kfree(eptdev); in rpmsg_eptdev_release_device()
345 struct rpmsg_eptdev *eptdev; in rpmsg_eptdev_create() local
349 eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL); in rpmsg_eptdev_create()
350 if (!eptdev) in rpmsg_eptdev_create()
353 dev = &eptdev->dev; in rpmsg_eptdev_create()
354 eptdev->rpdev = rpdev; in rpmsg_eptdev_create()
355 eptdev->chinfo = chinfo; in rpmsg_eptdev_create()
357 mutex_init(&eptdev->ept_lock); in rpmsg_eptdev_create()
358 spin_lock_init(&eptdev->queue_lock); in rpmsg_eptdev_create()
359 skb_queue_head_init(&eptdev->queue); in rpmsg_eptdev_create()
360 init_waitqueue_head(&eptdev->readq); in rpmsg_eptdev_create()
366 dev_set_drvdata(dev, eptdev); in rpmsg_eptdev_create()
368 cdev_init(&eptdev->cdev, &rpmsg_eptdev_fops); in rpmsg_eptdev_create()
369 eptdev->cdev.owner = THIS_MODULE; in rpmsg_eptdev_create()
382 ret = cdev_add(&eptdev->cdev, dev->devt, 1); in rpmsg_eptdev_create()
403 kfree(eptdev); in rpmsg_eptdev_create()