Lines Matching refs:idev

217 	struct uio_device *idev = dev_get_drvdata(dev);  in name_show()  local
218 return sprintf(buf, "%s\n", idev->info->name); in name_show()
225 struct uio_device *idev = dev_get_drvdata(dev); in version_show() local
226 return sprintf(buf, "%s\n", idev->info->version); in version_show()
233 struct uio_device *idev = dev_get_drvdata(dev); in event_show() local
234 return sprintf(buf, "%u\n", (unsigned int)atomic_read(&idev->event)); in event_show()
255 static int uio_dev_add_attributes(struct uio_device *idev) in uio_dev_add_attributes() argument
267 mem = &idev->info->mem[mi]; in uio_dev_add_attributes()
272 idev->map_dir = kobject_create_and_add("maps", in uio_dev_add_attributes()
273 &idev->dev->kobj); in uio_dev_add_attributes()
274 if (!idev->map_dir) in uio_dev_add_attributes()
283 ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi); in uio_dev_add_attributes()
292 port = &idev->info->port[pi]; in uio_dev_add_attributes()
297 idev->portio_dir = kobject_create_and_add("portio", in uio_dev_add_attributes()
298 &idev->dev->kobj); in uio_dev_add_attributes()
299 if (!idev->portio_dir) in uio_dev_add_attributes()
308 ret = kobject_add(&portio->kobj, idev->portio_dir, in uio_dev_add_attributes()
323 port = &idev->info->port[pi]; in uio_dev_add_attributes()
327 kobject_put(idev->portio_dir); in uio_dev_add_attributes()
332 mem = &idev->info->mem[mi]; in uio_dev_add_attributes()
336 kobject_put(idev->map_dir); in uio_dev_add_attributes()
337 dev_err(idev->dev, "error creating sysfs files (%d)\n", ret); in uio_dev_add_attributes()
341 static void uio_dev_del_attributes(struct uio_device *idev) in uio_dev_del_attributes() argument
348 mem = &idev->info->mem[i]; in uio_dev_del_attributes()
353 kobject_put(idev->map_dir); in uio_dev_del_attributes()
356 port = &idev->info->port[i]; in uio_dev_del_attributes()
361 kobject_put(idev->portio_dir); in uio_dev_del_attributes()
364 static int uio_get_minor(struct uio_device *idev) in uio_get_minor() argument
369 retval = idr_alloc(&uio_idr, idev, 0, UIO_MAX_DEVICES, GFP_KERNEL); in uio_get_minor()
371 idev->minor = retval; in uio_get_minor()
374 dev_err(idev->dev, "too many uio devices\n"); in uio_get_minor()
381 static void uio_free_minor(struct uio_device *idev) in uio_free_minor() argument
384 idr_remove(&uio_idr, idev->minor); in uio_free_minor()
394 struct uio_device *idev = info->uio_dev; in uio_event_notify() local
396 atomic_inc(&idev->event); in uio_event_notify()
397 wake_up_interruptible(&idev->wait); in uio_event_notify()
398 kill_fasync(&idev->async_queue, SIGIO, POLL_IN); in uio_event_notify()
409 struct uio_device *idev = (struct uio_device *)dev_id; in uio_interrupt() local
410 irqreturn_t ret = idev->info->handler(irq, idev->info); in uio_interrupt()
413 uio_event_notify(idev->info); in uio_interrupt()
425 struct uio_device *idev; in uio_open() local
430 idev = idr_find(&uio_idr, iminor(inode)); in uio_open()
432 if (!idev) { in uio_open()
437 if (!try_module_get(idev->owner)) { in uio_open()
448 listener->dev = idev; in uio_open()
449 listener->event_count = atomic_read(&idev->event); in uio_open()
452 if (idev->info->open) { in uio_open()
453 ret = idev->info->open(idev->info, inode); in uio_open()
463 module_put(idev->owner); in uio_open()
472 struct uio_device *idev = listener->dev; in uio_fasync() local
474 return fasync_helper(fd, filep, on, &idev->async_queue); in uio_fasync()
481 struct uio_device *idev = listener->dev; in uio_release() local
483 if (idev->info->release) in uio_release()
484 ret = idev->info->release(idev->info, inode); in uio_release()
486 module_put(idev->owner); in uio_release()
494 struct uio_device *idev = listener->dev; in uio_poll() local
496 if (!idev->info->irq) in uio_poll()
499 poll_wait(filep, &idev->wait, wait); in uio_poll()
500 if (listener->event_count != atomic_read(&idev->event)) in uio_poll()
509 struct uio_device *idev = listener->dev; in uio_read() local
514 if (!idev->info->irq) in uio_read()
520 add_wait_queue(&idev->wait, &wait); in uio_read()
525 event_count = atomic_read(&idev->event); in uio_read()
549 remove_wait_queue(&idev->wait, &wait); in uio_read()
558 struct uio_device *idev = listener->dev; in uio_write() local
562 if (!idev->info->irq) in uio_write()
568 if (!idev->info->irqcontrol) in uio_write()
574 retval = idev->info->irqcontrol(idev->info, irq_on); in uio_write()
581 struct uio_device *idev = vma->vm_private_data; in uio_find_mem_index() local
584 if (idev->info->mem[vma->vm_pgoff].size == 0) in uio_find_mem_index()
593 struct uio_device *idev = vma->vm_private_data; in uio_vma_fault() local
608 addr = (void *)(unsigned long)idev->info->mem[mi].addr + offset; in uio_vma_fault()
609 if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL) in uio_vma_fault()
637 struct uio_device *idev = vma->vm_private_data; in uio_mmap_physical() local
642 mem = idev->info->mem + mi; in uio_mmap_physical()
671 struct uio_device *idev = listener->dev; in uio_mmap() local
679 vma->vm_private_data = idev; in uio_mmap()
686 actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK) in uio_mmap()
687 + idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT; in uio_mmap()
691 if (idev->info->mmap) { in uio_mmap()
692 ret = idev->info->mmap(idev->info, vma); in uio_mmap()
696 switch (idev->info->mem[mi].memtype) { in uio_mmap()
800 struct uio_device *idev; in __uio_register_device() local
808 idev = devm_kzalloc(parent, sizeof(*idev), GFP_KERNEL); in __uio_register_device()
809 if (!idev) { in __uio_register_device()
813 idev->owner = owner; in __uio_register_device()
814 idev->info = info; in __uio_register_device()
815 init_waitqueue_head(&idev->wait); in __uio_register_device()
816 atomic_set(&idev->event, 0); in __uio_register_device()
818 ret = uio_get_minor(idev); in __uio_register_device()
822 idev->dev = device_create(&uio_class, parent, in __uio_register_device()
823 MKDEV(uio_major, idev->minor), idev, in __uio_register_device()
824 "uio%d", idev->minor); in __uio_register_device()
825 if (IS_ERR(idev->dev)) { in __uio_register_device()
827 ret = PTR_ERR(idev->dev); in __uio_register_device()
831 ret = uio_dev_add_attributes(idev); in __uio_register_device()
835 info->uio_dev = idev; in __uio_register_device()
847 info->irq_flags, info->name, idev); in __uio_register_device()
855 uio_dev_del_attributes(idev); in __uio_register_device()
857 device_destroy(&uio_class, MKDEV(uio_major, idev->minor)); in __uio_register_device()
859 uio_free_minor(idev); in __uio_register_device()
871 struct uio_device *idev; in uio_unregister_device() local
876 idev = info->uio_dev; in uio_unregister_device()
878 uio_free_minor(idev); in uio_unregister_device()
880 uio_dev_del_attributes(idev); in uio_unregister_device()
882 free_irq(idev->info->irq, idev); in uio_unregister_device()
884 device_destroy(&uio_class, MKDEV(uio_major, idev->minor)); in uio_unregister_device()