Lines Matching refs:ldev
148 static void linux_cdev_deref(struct linux_cdev *ldev);
692 struct linux_cdev *ldev; in linux_get_fop() local
695 ldev = filp->f_cdev; in linux_get_fop()
697 if (ldev != NULL) { in linux_get_fop()
698 if (ldev->kobj.ktype == &linux_cdev_static_ktype) { in linux_get_fop()
699 refcount_acquire(&ldev->refs); in linux_get_fop()
701 for (siref = ldev->siref;;) { in linux_get_fop()
703 ldev = &dummy_ldev; in linux_get_fop()
704 *fop = ldev->ops; in linux_get_fop()
705 siref = ldev->siref; in linux_get_fop()
706 MPASS((ldev->siref & LDEV_SI_DTR) == 0); in linux_get_fop()
707 } else if (atomic_fcmpset_int(&ldev->siref, in linux_get_fop()
714 *dev = ldev; in linux_get_fop()
718 linux_drop_fop(struct linux_cdev *ldev) in linux_drop_fop() argument
721 if (ldev == NULL) in linux_drop_fop()
723 if (ldev->kobj.ktype == &linux_cdev_static_ktype) { in linux_drop_fop()
724 linux_cdev_deref(ldev); in linux_drop_fop()
726 MPASS(ldev->kobj.ktype == &linux_cdev_ktype); in linux_drop_fop()
727 MPASS((ldev->siref & ~LDEV_SI_DTR) != 0); in linux_drop_fop()
728 atomic_subtract_int(&ldev->siref, LDEV_SI_REF); in linux_drop_fop()
747 struct linux_cdev *ldev; in linux_dev_fdopen() local
752 ldev = dev->si_drv1; in linux_dev_fdopen()
756 filp->f_op = ldev->ops; in linux_dev_fdopen()
761 refcount_acquire(&ldev->refs); in linux_dev_fdopen()
762 filp->f_cdev = ldev; in linux_dev_fdopen()
765 linux_get_fop(filp, &fop, &ldev); in linux_dev_fdopen()
770 linux_drop_fop(ldev); in linux_dev_fdopen()
782 linux_drop_fop(ldev); in linux_dev_fdopen()
1187 struct linux_cdev *ldev; in linux_file_kqfilter_poll() local
1195 linux_get_fop(filp, &fop, &ldev); in linux_file_kqfilter_poll()
1198 linux_drop_fop(ldev); in linux_file_kqfilter_poll()
1429 struct linux_cdev *ldev; in linux_file_read() local
1442 linux_get_fop(filp, &fop, &ldev); in linux_file_read()
1460 linux_drop_fop(ldev); in linux_file_read()
1471 struct linux_cdev *ldev; in linux_file_write() local
1483 linux_get_fop(filp, &fop, &ldev); in linux_file_write()
1503 linux_drop_fop(ldev); in linux_file_write()
1514 struct linux_cdev *ldev; in linux_file_poll() local
1520 linux_get_fop(filp, &fop, &ldev); in linux_file_poll()
1527 linux_drop_fop(ldev); in linux_file_poll()
1537 struct linux_cdev *ldev; in linux_file_close() local
1552 linux_get_fop(filp, &fop, &ldev); in linux_file_close()
1563 linux_drop_fop(ldev); in linux_file_close()
1564 ldev = filp->f_cdev; in linux_file_close()
1565 if (ldev != NULL) in linux_file_close()
1566 linux_cdev_deref(ldev); in linux_file_close()
1579 struct linux_cdev *ldev; in linux_file_ioctl() local
1587 linux_get_fop(filp, &fop, &ldev); in linux_file_ioctl()
1631 linux_drop_fop(ldev); in linux_file_ioctl()
1661 struct linux_cdev *ldev; in linux_file_mmap() local
1708 linux_get_fop(filp, &fop, &ldev); in linux_file_mmap()
1719 linux_drop_fop(ldev); in linux_file_mmap()
1770 struct linux_cdev *ldev; in linux_iminor() local
1775 ldev = inode->v_rdev->si_drv1; in linux_iminor()
1776 if (ldev == NULL) in linux_iminor()
1779 return (minor(ldev->dev)); in linux_iminor()
2364 linux_cdev_deref(struct linux_cdev *ldev) in linux_cdev_deref() argument
2366 if (refcount_release(&ldev->refs) && in linux_cdev_deref()
2367 ldev->kobj.ktype == &linux_cdev_ktype) in linux_cdev_deref()
2368 kfree(ldev); in linux_cdev_deref()
2388 struct linux_cdev *ldev; in linux_cdev_static_release() local
2390 ldev = container_of(kobj, struct linux_cdev, kobj); in linux_cdev_static_release()
2391 cdev = ldev->cdev; in linux_cdev_static_release()
2394 ldev->cdev = NULL; in linux_cdev_static_release()
2400 linux_cdev_device_add(struct linux_cdev *ldev, struct device *dev) in linux_cdev_device_add() argument
2406 ldev->kobj.parent = &dev->kobj; in linux_cdev_device_add()
2413 if (ldev->kobj.name == NULL) in linux_cdev_device_add()
2416 ret = cdev_add(ldev, dev->devt, 1); in linux_cdev_device_add()
2422 cdev_del(ldev); in linux_cdev_device_add()
2427 linux_cdev_device_del(struct linux_cdev *ldev, struct device *dev) in linux_cdev_device_del() argument
2432 cdev_del(ldev); in linux_cdev_device_del()
2436 linux_destroy_dev(struct linux_cdev *ldev) in linux_destroy_dev() argument
2439 if (ldev->cdev == NULL) in linux_destroy_dev()
2442 MPASS((ldev->siref & LDEV_SI_DTR) == 0); in linux_destroy_dev()
2443 MPASS(ldev->kobj.ktype == &linux_cdev_ktype); in linux_destroy_dev()
2445 atomic_set_int(&ldev->siref, LDEV_SI_DTR); in linux_destroy_dev()
2446 while ((atomic_load_int(&ldev->siref) & ~LDEV_SI_DTR) != 0) in linux_destroy_dev()
2449 destroy_dev(ldev->cdev); in linux_destroy_dev()
2450 ldev->cdev = NULL; in linux_destroy_dev()
2650 struct linux_cdev *ldev = cdev->si_drv1; in linux_find_cdev() local
2651 if (ldev->dev == dev && in linux_find_cdev()
2652 strcmp(kobject_name(&ldev->kobj), name) == 0) { in linux_find_cdev()