Lines Matching defs:idev

218 	struct uio_device *idev = dev_get_drvdata(dev);
221 mutex_lock(&idev->info_lock);
222 if (!idev->info) {
228 ret = sprintf(buf, "%s\n", idev->info->name);
231 mutex_unlock(&idev->info_lock);
239 struct uio_device *idev = dev_get_drvdata(dev);
242 mutex_lock(&idev->info_lock);
243 if (!idev->info) {
249 ret = sprintf(buf, "%s\n", idev->info->version);
252 mutex_unlock(&idev->info_lock);
260 struct uio_device *idev = dev_get_drvdata(dev);
261 return sprintf(buf, "%u\n", (unsigned int)atomic_read(&idev->event));
284 static int uio_dev_add_attributes(struct uio_device *idev)
296 mem = &idev->info->mem[mi];
301 idev->map_dir = kobject_create_and_add("maps",
302 &idev->dev.kobj);
303 if (!idev->map_dir) {
316 ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi);
325 port = &idev->info->port[pi];
330 idev->portio_dir = kobject_create_and_add("portio",
331 &idev->dev.kobj);
332 if (!idev->portio_dir) {
345 ret = kobject_add(&portio->kobj, idev->portio_dir,
360 port = &idev->info->port[pi];
364 kobject_put(idev->portio_dir);
369 mem = &idev->info->mem[mi];
373 kobject_put(idev->map_dir);
374 dev_err(&idev->dev, "error creating sysfs files (%d)\n", ret);
378 static void uio_dev_del_attributes(struct uio_device *idev)
385 mem = &idev->info->mem[i];
390 kobject_put(idev->map_dir);
393 port = &idev->info->port[i];
398 kobject_put(idev->portio_dir);
401 static int uio_get_minor(struct uio_device *idev)
406 retval = idr_alloc(&uio_idr, idev, 0, UIO_MAX_DEVICES, GFP_KERNEL);
408 idev->minor = retval;
411 dev_err(&idev->dev, "too many uio devices\n");
431 struct uio_device *idev = info->uio_dev;
433 atomic_inc(&idev->event);
434 wake_up_interruptible(&idev->wait);
435 kill_fasync(&idev->async_queue, SIGIO, POLL_IN);
446 struct uio_device *idev = (struct uio_device *)dev_id;
449 ret = idev->info->handler(irq, idev->info);
451 uio_event_notify(idev->info);
463 struct uio_device *idev;
468 idev = idr_find(&uio_idr, iminor(inode));
469 if (!idev) {
474 get_device(&idev->dev);
477 if (!try_module_get(idev->owner)) {
488 listener->dev = idev;
489 listener->event_count = atomic_read(&idev->event);
492 mutex_lock(&idev->info_lock);
493 if (!idev->info) {
494 mutex_unlock(&idev->info_lock);
499 if (idev->info->open)
500 ret = idev->info->open(idev->info, inode);
501 mutex_unlock(&idev->info_lock);
511 module_put(idev->owner);
514 put_device(&idev->dev);
523 struct uio_device *idev = listener->dev;
525 return fasync_helper(fd, filep, on, &idev->async_queue);
532 struct uio_device *idev = listener->dev;
534 mutex_lock(&idev->info_lock);
535 if (idev->info && idev->info->release)
536 ret = idev->info->release(idev->info, inode);
537 mutex_unlock(&idev->info_lock);
539 module_put(idev->owner);
541 put_device(&idev->dev);
548 struct uio_device *idev = listener->dev;
551 mutex_lock(&idev->info_lock);
552 if (!idev->info || !idev->info->irq)
554 mutex_unlock(&idev->info_lock);
559 poll_wait(filep, &idev->wait, wait);
560 if (listener->event_count != atomic_read(&idev->event))
569 struct uio_device *idev = listener->dev;
577 add_wait_queue(&idev->wait, &wait);
580 mutex_lock(&idev->info_lock);
581 if (!idev->info || !idev->info->irq) {
583 mutex_unlock(&idev->info_lock);
586 mutex_unlock(&idev->info_lock);
590 event_count = atomic_read(&idev->event);
615 remove_wait_queue(&idev->wait, &wait);
624 struct uio_device *idev = listener->dev;
634 mutex_lock(&idev->info_lock);
635 if (!idev->info) {
640 if (!idev->info->irq) {
645 if (!idev->info->irqcontrol) {
650 retval = idev->info->irqcontrol(idev->info, irq_on);
653 mutex_unlock(&idev->info_lock);
659 struct uio_device *idev = vma->vm_private_data;
662 if (idev->info->mem[vma->vm_pgoff].size == 0)
671 struct uio_device *idev = vmf->vma->vm_private_data;
678 mutex_lock(&idev->info_lock);
679 if (!idev->info) {
696 addr = (void *)(unsigned long)idev->info->mem[mi].addr + offset;
697 if (idev->info->mem[mi].memtype == UIO_MEM_LOGICAL)
705 mutex_unlock(&idev->info_lock);
729 struct uio_device *idev = vma->vm_private_data;
735 mem = idev->info->mem + mi;
743 if (idev->info->mem[mi].memtype == UIO_MEM_PHYS)
765 struct uio_device *idev = listener->dev;
773 vma->vm_private_data = idev;
775 mutex_lock(&idev->info_lock);
776 if (!idev->info) {
788 actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
789 + idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT;
795 if (idev->info->mmap) {
796 ret = idev->info->mmap(idev->info, vma);
800 switch (idev->info->mem[mi].memtype) {
814 mutex_unlock(&idev->info_lock);
905 struct uio_device *idev = dev_get_drvdata(dev);
907 kfree(idev);
922 struct uio_device *idev;
933 idev = kzalloc(sizeof(*idev), GFP_KERNEL);
934 if (!idev) {
938 idev->owner = owner;
939 idev->info = info;
940 mutex_init(&idev->info_lock);
941 init_waitqueue_head(&idev->wait);
942 atomic_set(&idev->event, 0);
944 ret = uio_get_minor(idev);
946 kfree(idev);
950 device_initialize(&idev->dev);
951 idev->dev.devt = MKDEV(uio_major, idev->minor);
952 idev->dev.class = &uio_class;
953 idev->dev.parent = parent;
954 idev->dev.release = uio_device_release;
955 dev_set_drvdata(&idev->dev, idev);
957 ret = dev_set_name(&idev->dev, "uio%d", idev->minor);
961 ret = device_add(&idev->dev);
965 ret = uio_dev_add_attributes(idev);
969 info->uio_dev = idev;
981 info->irq_flags, info->name, idev);
991 uio_dev_del_attributes(idev);
993 device_del(&idev->dev);
995 uio_free_minor(idev->minor);
996 put_device(&idev->dev);
1046 struct uio_device *idev;
1052 idev = info->uio_dev;
1053 minor = idev->minor;
1055 mutex_lock(&idev->info_lock);
1056 uio_dev_del_attributes(idev);
1059 free_irq(info->irq, idev);
1061 idev->info = NULL;
1062 mutex_unlock(&idev->info_lock);
1064 wake_up_interruptible(&idev->wait);
1065 kill_fasync(&idev->async_queue, SIGIO, POLL_HUP);
1068 device_unregister(&idev->dev);