Lines Matching refs:eptdev
79 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_chrdev_eptdev_destroy() local
81 mutex_lock(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_destroy()
82 eptdev->rpdev = NULL; in rpmsg_chrdev_eptdev_destroy()
83 if (eptdev->ept) { in rpmsg_chrdev_eptdev_destroy()
85 if (!eptdev->default_ept) in rpmsg_chrdev_eptdev_destroy()
86 rpmsg_destroy_ept(eptdev->ept); in rpmsg_chrdev_eptdev_destroy()
87 eptdev->ept = NULL; in rpmsg_chrdev_eptdev_destroy()
89 mutex_unlock(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_destroy()
92 wake_up_interruptible(&eptdev->readq); in rpmsg_chrdev_eptdev_destroy()
94 cdev_device_del(&eptdev->cdev, &eptdev->dev); in rpmsg_chrdev_eptdev_destroy()
95 put_device(&eptdev->dev); in rpmsg_chrdev_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 = priv; in rpmsg_ept_flow_cb() local
127 eptdev->remote_flow_restricted = enable; in rpmsg_ept_flow_cb()
128 eptdev->remote_flow_updated = true; in rpmsg_ept_flow_cb()
130 wake_up_interruptible(&eptdev->readq); in rpmsg_ept_flow_cb()
137 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_open() local
139 struct rpmsg_device *rpdev = eptdev->rpdev; in rpmsg_eptdev_open()
140 struct device *dev = &eptdev->dev; in rpmsg_eptdev_open()
142 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_open()
143 if (eptdev->ept) { in rpmsg_eptdev_open()
144 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
148 if (!eptdev->rpdev) { in rpmsg_eptdev_open()
149 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
159 if (eptdev->default_ept) in rpmsg_eptdev_open()
160 ept = eptdev->default_ept; in rpmsg_eptdev_open()
162 ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo); in rpmsg_eptdev_open()
165 dev_err(dev, "failed to open %s\n", eptdev->chinfo.name); in rpmsg_eptdev_open()
167 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
172 eptdev->ept = ept; in rpmsg_eptdev_open()
173 filp->private_data = eptdev; in rpmsg_eptdev_open()
174 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_open()
181 struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev); in rpmsg_eptdev_release() local
182 struct device *dev = &eptdev->dev; in rpmsg_eptdev_release()
185 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_release()
186 if (eptdev->ept) { in rpmsg_eptdev_release()
187 if (!eptdev->default_ept) in rpmsg_eptdev_release()
188 rpmsg_destroy_ept(eptdev->ept); in rpmsg_eptdev_release()
189 eptdev->ept = NULL; in rpmsg_eptdev_release()
191 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_release()
192 eptdev->remote_flow_updated = false; in rpmsg_eptdev_release()
195 skb_queue_purge(&eptdev->queue); in rpmsg_eptdev_release()
205 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_read_iter() local
210 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
213 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
216 if (skb_queue_empty(&eptdev->queue)) { in rpmsg_eptdev_read_iter()
217 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
223 if (wait_event_interruptible(eptdev->readq, in rpmsg_eptdev_read_iter()
224 !skb_queue_empty(&eptdev->queue) || in rpmsg_eptdev_read_iter()
225 !eptdev->ept)) in rpmsg_eptdev_read_iter()
229 if (!eptdev->ept) in rpmsg_eptdev_read_iter()
232 spin_lock_irqsave(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
235 skb = skb_dequeue(&eptdev->queue); in rpmsg_eptdev_read_iter()
236 spin_unlock_irqrestore(&eptdev->queue_lock, flags); in rpmsg_eptdev_read_iter()
253 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_write_iter() local
267 if (mutex_lock_interruptible(&eptdev->ept_lock)) { in rpmsg_eptdev_write_iter()
272 if (!eptdev->ept) { in rpmsg_eptdev_write_iter()
278 ret = rpmsg_trysendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
282 ret = rpmsg_sendto(eptdev->ept, kbuf, len, eptdev->chinfo.dst); in rpmsg_eptdev_write_iter()
286 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_write_iter()
295 struct rpmsg_eptdev *eptdev = filp->private_data; in rpmsg_eptdev_poll() local
298 if (!eptdev->ept) in rpmsg_eptdev_poll()
301 poll_wait(filp, &eptdev->readq, wait); in rpmsg_eptdev_poll()
303 if (!skb_queue_empty(&eptdev->queue)) in rpmsg_eptdev_poll()
306 if (eptdev->remote_flow_updated) in rpmsg_eptdev_poll()
309 mutex_lock(&eptdev->ept_lock); in rpmsg_eptdev_poll()
310 mask |= rpmsg_poll(eptdev->ept, filp, wait); in rpmsg_eptdev_poll()
311 mutex_unlock(&eptdev->ept_lock); in rpmsg_eptdev_poll()
319 struct rpmsg_eptdev *eptdev = fp->private_data; in rpmsg_eptdev_ioctl() local
326 eptdev->remote_flow_updated = false; in rpmsg_eptdev_ioctl()
327 ret = put_user(eptdev->remote_flow_restricted, (int __user *)arg); in rpmsg_eptdev_ioctl()
335 ret = rpmsg_set_flow_control(eptdev->ept, set, eptdev->chinfo.dst); in rpmsg_eptdev_ioctl()
339 if (eptdev->default_ept) { in rpmsg_eptdev_ioctl()
343 ret = rpmsg_chrdev_eptdev_destroy(&eptdev->dev, NULL); in rpmsg_eptdev_ioctl()
366 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in name_show() local
368 return sprintf(buf, "%s\n", eptdev->chinfo.name); in name_show()
375 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in src_show() local
377 return sprintf(buf, "%d\n", eptdev->chinfo.src); in src_show()
384 struct rpmsg_eptdev *eptdev = dev_get_drvdata(dev); in dst_show() local
386 return sprintf(buf, "%d\n", eptdev->chinfo.dst); in dst_show()
400 struct rpmsg_eptdev *eptdev = dev_to_eptdev(dev); in rpmsg_eptdev_release_device() local
403 ida_simple_remove(&rpmsg_minor_ida, MINOR(eptdev->dev.devt)); in rpmsg_eptdev_release_device()
404 kfree(eptdev); in rpmsg_eptdev_release_device()
410 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_eptdev_alloc() local
413 eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL); in rpmsg_chrdev_eptdev_alloc()
414 if (!eptdev) in rpmsg_chrdev_eptdev_alloc()
417 dev = &eptdev->dev; in rpmsg_chrdev_eptdev_alloc()
418 eptdev->rpdev = rpdev; in rpmsg_chrdev_eptdev_alloc()
420 mutex_init(&eptdev->ept_lock); in rpmsg_chrdev_eptdev_alloc()
421 spin_lock_init(&eptdev->queue_lock); in rpmsg_chrdev_eptdev_alloc()
422 skb_queue_head_init(&eptdev->queue); in rpmsg_chrdev_eptdev_alloc()
423 init_waitqueue_head(&eptdev->readq); in rpmsg_chrdev_eptdev_alloc()
429 dev_set_drvdata(dev, eptdev); in rpmsg_chrdev_eptdev_alloc()
431 cdev_init(&eptdev->cdev, &rpmsg_eptdev_fops); in rpmsg_chrdev_eptdev_alloc()
432 eptdev->cdev.owner = THIS_MODULE; in rpmsg_chrdev_eptdev_alloc()
434 return eptdev; in rpmsg_chrdev_eptdev_alloc()
437 static int rpmsg_chrdev_eptdev_add(struct rpmsg_eptdev *eptdev, struct rpmsg_channel_info chinfo) in rpmsg_chrdev_eptdev_add() argument
439 struct device *dev = &eptdev->dev; in rpmsg_chrdev_eptdev_add()
442 eptdev->chinfo = chinfo; in rpmsg_chrdev_eptdev_add()
455 ret = cdev_device_add(&eptdev->cdev, &eptdev->dev); in rpmsg_chrdev_eptdev_add()
470 kfree(eptdev); in rpmsg_chrdev_eptdev_add()
478 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_eptdev_create() local
480 eptdev = rpmsg_chrdev_eptdev_alloc(rpdev, parent); in rpmsg_chrdev_eptdev_create()
481 if (IS_ERR(eptdev)) in rpmsg_chrdev_eptdev_create()
482 return PTR_ERR(eptdev); in rpmsg_chrdev_eptdev_create()
484 return rpmsg_chrdev_eptdev_add(eptdev, chinfo); in rpmsg_chrdev_eptdev_create()
491 struct rpmsg_eptdev *eptdev; in rpmsg_chrdev_probe() local
498 eptdev = rpmsg_chrdev_eptdev_alloc(rpdev, dev); in rpmsg_chrdev_probe()
499 if (IS_ERR(eptdev)) in rpmsg_chrdev_probe()
500 return PTR_ERR(eptdev); in rpmsg_chrdev_probe()
503 eptdev->default_ept = rpdev->ept; in rpmsg_chrdev_probe()
509 eptdev->default_ept->priv = eptdev; in rpmsg_chrdev_probe()
511 return rpmsg_chrdev_eptdev_add(eptdev, chinfo); in rpmsg_chrdev_probe()