Lines Matching refs:eptdev
75 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_chrdev_eptdev_destroy() local
77 mutex_lock(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_destroy()
78 if (eptdev->ept) { in rpmsg_chrdev_eptdev_destroy()
80 if (!eptdev->default_ept) in rpmsg_chrdev_eptdev_destroy()
81 rpmsg_destroy_ept(eptdev->ept); in rpmsg_chrdev_eptdev_destroy()
82 eptdev->ept = NULL; in rpmsg_chrdev_eptdev_destroy()
84 mutex_unlock(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_destroy()
87 wake_up_interruptible(&eptdev->readq); in rpmsg_chrdev_eptdev_destroy()
89 cdev_device_del(&eptdev->cdev, &eptdev->dev); in rpmsg_chrdev_eptdev_destroy()
90 put_device(&eptdev->dev); in rpmsg_chrdev_eptdev_destroy()
99 struct rpmsg_eptdev *eptdev = priv; in rpmsg_ept_cb() local
108 spin_lock(&eptdev->queue_lock); in rpmsg_ept_cb()
109 skb_queue_tail(&eptdev->queue, skb); in rpmsg_ept_cb()
110 spin_unlock(&eptdev->queue_lock); in rpmsg_ept_cb()
113 wake_up_interruptible(&eptdev->readq); in rpmsg_ept_cb()
120 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_open() local
122 struct rpmsg_device *rpdev = eptdev->rpdev; in rpmsg_eptdev_open()
123 struct device *dev = &eptdev->dev; in rpmsg_eptdev_open()
125 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_open()
126 if (eptdev->ept) { in rpmsg_eptdev_open()
127 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
137 if (eptdev->default_ept) in rpmsg_eptdev_open()
138 ept = eptdev->default_ept; in rpmsg_eptdev_open()
140 ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo); in rpmsg_eptdev_open()
143 dev_err(dev, "failed to open %s\n", eptdev->chinfo.name); in rpmsg_eptdev_open()
145 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
149 eptdev->ept = ept; in rpmsg_eptdev_open()
150 filp->private_data = eptdev; in rpmsg_eptdev_open()
151 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
158 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_release() local
159 struct device *dev = &eptdev->dev; in rpmsg_eptdev_release()
162 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_release()
163 if (eptdev->ept) { in rpmsg_eptdev_release()
164 if (!eptdev->default_ept) in rpmsg_eptdev_release()
165 rpmsg_destroy_ept(eptdev->ept); in rpmsg_eptdev_release()
166 eptdev->ept = NULL; in rpmsg_eptdev_release()
168 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_release()
171 skb_queue_purge(&eptdev->queue); in rpmsg_eptdev_release()
181 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_read_iter() local
186 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
189 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
192 if (skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_read_iter()
193 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
199 if (wait_event_interruptible(eptdev->readq, in rpmsg_eptdev_read_iter()
200 !skb_queue_empty(&eptdev->queue) || in rpmsg_eptdev_read_iter()
201 !eptdev->ept)) in rpmsg_eptdev_read_iter()
205 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
208 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
211 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_read_iter()
212 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
229 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_write_iter() local
243 if (mutex_lock_interruptible(&eptdev->ept_lock)) { in rpmsg_eptdev_write_iter()
248 if (!eptdev->ept) { in rpmsg_eptdev_write_iter()
254 ret = rpmsg_trysendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
258 ret = rpmsg_sendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
262 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_write_iter()
271 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_poll() local
274 if (!eptdev->ept) in rpmsg_eptdev_poll()
277 poll_wait(filp, &eptdev->readq, wait); in rpmsg_eptdev_poll()
279 if (!skb_queue_empty(&eptdev->queue)) in rpmsg_eptdev_poll()
282 mask |= rpmsg_poll(eptdev->ept, filp, wait); in rpmsg_eptdev_poll()
290 struct rpmsg_eptdev *eptdev = fp->private_data; in rpmsg_eptdev_ioctl() local
296 if (eptdev->default_ept) in rpmsg_eptdev_ioctl()
299 return rpmsg_chrdev_eptdev_destroy(&eptdev->dev, NULL); in rpmsg_eptdev_ioctl()
316 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in name_show() local
318 return sprintf(buf, "%s\n", eptdev->chinfo.name); in name_show()
325 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in src_show() local
327 return sprintf(buf, "%d\n", eptdev->chinfo.src); in src_show()
334 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in dst_show() local
336 return sprintf(buf, "%d\n", eptdev->chinfo.dst); in dst_show()
350 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_eptdev_release_device() local
353 ida_simple_remove(&rpmsg_minor_ida, MINOR(eptdev->dev.devt)); in rpmsg_eptdev_release_device()
354 kfree(eptdev); in rpmsg_eptdev_release_device()
360 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_eptdev_alloc() local
363 eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL); in rpmsg_chrdev_eptdev_alloc()
364 if (!eptdev) in rpmsg_chrdev_eptdev_alloc()
367 dev = &eptdev->dev; in rpmsg_chrdev_eptdev_alloc()
368 eptdev->rpdev = rpdev; in rpmsg_chrdev_eptdev_alloc()
370 mutex_init(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_alloc()
371 spin_lock_init(&eptdev->queue_lock); in rpmsg_chrdev_eptdev_alloc()
372 skb_queue_head_init(&eptdev->queue); in rpmsg_chrdev_eptdev_alloc()
373 init_waitqueue_head(&eptdev->readq); in rpmsg_chrdev_eptdev_alloc()
379 dev_set_drvdata(dev, eptdev); in rpmsg_chrdev_eptdev_alloc()
381 cdev_init(&eptdev->cdev, &rpmsg_eptdev_fops); in rpmsg_chrdev_eptdev_alloc()
382 eptdev->cdev.owner = THIS_MODULE; in rpmsg_chrdev_eptdev_alloc()
384 return eptdev; in rpmsg_chrdev_eptdev_alloc()
387 static int rpmsg_chrdev_eptdev_add(struct rpmsg_eptdev *eptdev, struct rpmsg_channel_info chinfo) in rpmsg_chrdev_eptdev_add() argument
389 struct device *dev = &eptdev->dev; in rpmsg_chrdev_eptdev_add()
392 eptdev->chinfo = chinfo; in rpmsg_chrdev_eptdev_add()
405 ret = cdev_device_add(&eptdev->cdev, &eptdev->dev); in rpmsg_chrdev_eptdev_add()
420 kfree(eptdev); in rpmsg_chrdev_eptdev_add()
428 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_eptdev_create() local
430 eptdev = rpmsg_chrdev_eptdev_alloc(rpdev, parent); in rpmsg_chrdev_eptdev_create()
431 if (IS_ERR(eptdev)) in rpmsg_chrdev_eptdev_create()
432 return PTR_ERR(eptdev); in rpmsg_chrdev_eptdev_create()
434 return rpmsg_chrdev_eptdev_add(eptdev, chinfo); in rpmsg_chrdev_eptdev_create()
441 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_probe() local
448 eptdev = rpmsg_chrdev_eptdev_alloc(rpdev, dev); in rpmsg_chrdev_probe()
449 if (IS_ERR(eptdev)) in rpmsg_chrdev_probe()
450 return PTR_ERR(eptdev); in rpmsg_chrdev_probe()
453 eptdev->default_ept = rpdev->ept; in rpmsg_chrdev_probe()
459 eptdev->default_ept->priv = eptdev; in rpmsg_chrdev_probe()
461 return rpmsg_chrdev_eptdev_add(eptdev, chinfo); in rpmsg_chrdev_probe()