Lines Matching defs:idev
216 struct uio_device *idev = dev_get_drvdata(dev);
219 mutex_lock(&idev->info_lock);
220 if (!idev->info) {
226 ret = sprintf(buf, "%s\n", idev->info->name);
229 mutex_unlock(&idev->info_lock);
237 struct uio_device *idev = dev_get_drvdata(dev);
240 mutex_lock(&idev->info_lock);
241 if (!idev->info) {
247 ret = sprintf(buf, "%s\n", idev->info->version);
250 mutex_unlock(&idev->info_lock);
258 struct uio_device *idev = dev_get_drvdata(dev);
259 return sprintf(buf, "%u\n", (unsigned int)atomic_read(&idev->event));
282 static int uio_dev_add_attributes(struct uio_device *idev)
294 mem = &idev->info->mem[mi];
299 idev->map_dir = kobject_create_and_add("maps",
300 &idev->dev.kobj);
301 if (!idev->map_dir) {
314 ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi);
323 port = &idev->info->port[pi];
328 idev->portio_dir = kobject_create_and_add("portio",
329 &idev->dev.kobj);
330 if (!idev->portio_dir) {
343 ret = kobject_add(&portio->kobj, idev->portio_dir,
358 port = &idev->info->port[pi];
362 kobject_put(idev->portio_dir);
367 mem = &idev->info->mem[mi];
371 kobject_put(idev->map_dir);
372 dev_err(&idev->dev, "error creating sysfs files (%d)\n", ret);
376 static void uio_dev_del_attributes(struct uio_device *idev)
383 mem = &idev->info->mem[i];
388 kobject_put(idev->map_dir);
391 port = &idev->info->port[i];
396 kobject_put(idev->portio_dir);
399 static int uio_get_minor(struct uio_device *idev)
404 retval = idr_alloc(&uio_idr, idev, 0, UIO_MAX_DEVICES, GFP_KERNEL);
406 idev->minor = retval;
409 dev_err(&idev->dev, "too many uio devices\n");
429 struct uio_device *idev = info->uio_dev;
431 atomic_inc(&idev->event);
432 wake_up_interruptible(&idev->wait);
433 kill_fasync(&idev->async_queue, SIGIO, POLL_IN);
444 struct uio_device *idev = (struct uio_device *)dev_id;
447 ret = idev->info->handler(irq, idev->info);
449 uio_event_notify(idev->info);
461 struct uio_device *idev;
466 idev = idr_find(&uio_idr, iminor(inode));
467 if (!idev) {
472 get_device(&idev->dev);
475 if (!try_module_get(idev->owner)) {
486 listener->dev = idev;
487 listener->event_count = atomic_read(&idev->event);
490 mutex_lock(&idev->info_lock);
491 if (!idev->info) {
492 mutex_unlock(&idev->info_lock);
497 if (idev->info->open)
498 ret = idev->info->open(idev->info, inode);
499 mutex_unlock(&idev->info_lock);
509 module_put(idev->owner);
512 put_device(&idev->dev);
521 struct uio_device *idev = listener->dev;
523 return fasync_helper(fd, filep, on, &idev->async_queue);
530 struct uio_device *idev = listener->dev;
532 mutex_lock(&idev->info_lock);
533 if (idev->info && idev->info->release)
534 ret = idev->info->release(idev->info, inode);
535 mutex_unlock(&idev->info_lock);
537 module_put(idev->owner);
539 put_device(&idev->dev);
546 struct uio_device *idev = listener->dev;
549 mutex_lock(&idev->info_lock);
550 if (!idev->info || !idev->info->irq)
552 mutex_unlock(&idev->info_lock);
557 poll_wait(filep, &idev->wait, wait);
558 if (listener->event_count != atomic_read(&idev->event))
567 struct uio_device *idev = listener->dev;
575 add_wait_queue(&idev->wait, &wait);
578 mutex_lock(&idev->info_lock);
579 if (!idev->info || !idev->info->irq) {
581 mutex_unlock(&idev->info_lock);
584 mutex_unlock(&idev->info_lock);
588 event_count = atomic_read(&idev->event);
613 remove_wait_queue(&idev->wait, &wait);
622 struct uio_device *idev = listener->dev;
632 mutex_lock(&idev->info_lock);
633 if (!idev->info) {
638 if (!idev->info->irq) {
643 if (!idev->info->irqcontrol) {
648 retval = idev->info->irqcontrol(idev->info, irq_on);
651 mutex_unlock(&idev->info_lock);
657 struct uio_device *idev = vma->vm_private_data;
660 if (idev->info->mem[vma->vm_pgoff].size == 0)
669 struct uio_device *idev = vmf->vma->vm_private_data;
676 mutex_lock(&idev->info_lock);
677 if (!idev->info) {
694 addr = (void *)(unsigned long)idev->info->mem[mi].addr + offset;
695 if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL)
703 mutex_unlock(&idev->info_lock);
727 struct uio_device *idev = vma->vm_private_data;
733 mem = idev->info->mem + mi;
741 if (idev->info->mem[mi].memtype == UIO_MEM_PHYS)
763 struct uio_device *idev = listener->dev;
771 vma->vm_private_data = idev;
773 mutex_lock(&idev->info_lock);
774 if (!idev->info) {
786 actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
787 + idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT;
793 if (idev->info->mmap) {
794 ret = idev->info->mmap(idev->info, vma);
798 switch (idev->info->mem[mi].memtype) {
812 mutex_unlock(&idev->info_lock);
903 struct uio_device *idev = dev_get_drvdata(dev);
905 kfree(idev);
920 struct uio_device *idev;
931 idev = kzalloc(sizeof(*idev), GFP_KERNEL);
932 if (!idev) {
936 idev->owner = owner;
937 idev->info = info;
938 mutex_init(&idev->info_lock);
939 init_waitqueue_head(&idev->wait);
940 atomic_set(&idev->event, 0);
942 ret = uio_get_minor(idev);
944 kfree(idev);
948 device_initialize(&idev->dev);
949 idev->dev.devt = MKDEV(uio_major, idev->minor);
950 idev->dev.class = &uio_class;
951 idev->dev.parent = parent;
952 idev->dev.release = uio_device_release;
953 dev_set_drvdata(&idev->dev, idev);
955 ret = dev_set_name(&idev->dev, "uio%d", idev->minor);
959 ret = device_add(&idev->dev);
963 ret = uio_dev_add_attributes(idev);
967 info->uio_dev = idev;
979 info->irq_flags, info->name, idev);
989 uio_dev_del_attributes(idev);
991 device_del(&idev->dev);
993 uio_free_minor(idev->minor);
994 put_device(&idev->dev);
1044 struct uio_device *idev;
1050 idev = info->uio_dev;
1051 minor = idev->minor;
1053 mutex_lock(&idev->info_lock);
1054 uio_dev_del_attributes(idev);
1057 free_irq(info->irq, idev);
1059 idev->info = NULL;
1060 mutex_unlock(&idev->info_lock);
1062 wake_up_interruptible(&idev->wait);
1063 kill_fasync(&idev->async_queue, SIGIO, POLL_HUP);
1066 device_unregister(&idev->dev);