Lines Matching refs:dev

490 	nsc_dev_t *dp, *dev;
495 for (dev = _nsc_dev_top; dev; dev = dev->nsc_next) {
496 if (path && !nsc_strmatch(dev->nsc_path, path))
499 if (!(rc = _nsc_reopen_dev(dev, flag | try)))
503 if (dp == dev)
522 * _nsc_reopen_dev (nsc_dev_t *dev, int flag)
537 _nsc_reopen_dev(dev, flag)
538 nsc_dev_t *dev;
546 mutex_enter(&dev->nsc_lock);
549 for (iodev = dev->nsc_list; iodev; iodev = iodev->si_next) {
557 if (!_nsc_relock_dev(dev, fd, iodev))
568 for (fd = dev->nsc_close; fd; fd = fd->sf_next) {
575 if (!_nsc_relock_dev(dev, fd, NULL))
584 mutex_exit(&dev->nsc_lock);
591 * _nsc_relock_dev (nsc_dev_t *dev, nsc_fd_t *fd, nsc_iodev_t *iodev)
603 _nsc_relock_dev(nsc_dev_t *dev, nsc_fd_t *fd, nsc_iodev_t *iodev)
610 if (dp == dev)
616 mutex_enter(&dev->nsc_lock);
619 for (iop = dev->nsc_list; iop; iop = iop->si_next)
624 fp = (iodev) ? iodev->si_open : dev->nsc_close;
632 mutex_exit(&dev->nsc_lock);
642 * _nsc_reopen_fd (nsc_fd_t *dev, int flag)
663 nsc_dev_t *dev = fd->sf_dev;
677 _nsc_find_io(dev->nsc_path, fd->sf_type, &changed)) &&
686 dev->nsc_reopen = 1;
690 dev->nsc_reopen = 0;
693 dev->nsc_drop = 1;
695 mutex_exit(&dev->nsc_lock);
786 nsc_dev_t *dev = fd->sf_dev;
790 return (_nsc_wait_dev(dev, flag));
800 mutex_exit(&dev->nsc_lock);
804 mutex_enter(&dev->nsc_lock);
810 if (dev->nsc_wait || dev->nsc_refcnt <= 0)
811 cv_broadcast(&dev->nsc_cv);
839 nsc_dev_t *dev = fd->sf_dev;
843 if ((rc = _nsc_alloc_iodev(dev, fd->sf_type, &iodev)) != 0)
846 mutex_enter(&dev->nsc_lock);
849 rc = _nsc_wait_dev(dev, flag);
850 mutex_exit(&dev->nsc_lock);
856 mutex_exit(&dev->nsc_lock);
858 rc = (*iodev->si_io->open)(dev->nsc_path,
869 rc = _nsc_setval(dev, NULL, NSC_DEVMAJ,
874 dev->nsc_path, (int)getmajor((dev_t)fd->sf_cd));
878 rc = _nsc_setval(dev, NULL, NSC_DEVMIN,
883 dev->nsc_path, (int)getminor((dev_t)fd->sf_cd));
889 _nsc_relink_fd(fd, &dev->nsc_close, &iodev->si_open, iodev);
960 nsc_dev_t *dev = fd->sf_dev;
965 if (fd->sf_pend == _NSC_CLOSE && dev->nsc_reopen != 0)
968 return (_nsc_wait_dev(dev, flag));
981 return (_nsc_wait_dev(dev, flag));
987 if (dev->nsc_list == iodev && !iodev->si_next)
988 if ((rc = _nsc_detach_dev(dev, NULL, flag)) != 0)
997 mutex_exit(&dev->nsc_lock);
1001 mutex_enter(&dev->nsc_lock);
1008 if (dev->nsc_wait || dev->nsc_refcnt <= 0)
1009 cv_broadcast(&dev->nsc_cv);
1040 nsc_dev_t *dev = fd->sf_dev;
1050 _nsc_relink_fd(fd, &iodev->si_open, &dev->nsc_close, iodev);
1121 _nsc_setval(nsc_dev_t *dev, char *path, char *name, int val, int do_ncall)
1131 ASSERT(dev != NULL || path != NULL);
1133 if (dev != NULL && path != NULL) {
1134 ASSERT(strcmp(dev->nsc_path, path) == 0);
1138 pp = (dev != NULL) ? dev->nsc_path : path;
1152 if (dev != NULL)
1153 dv = dev->nsc_values;
1175 if (dev != NULL)
1176 dev->nsc_values = dv;
1726 nsc_dev_t *dev;
1734 if ((rc = _nsc_alloc_dev(path, &dev)) != 0) {
1739 mutex_enter(&dev->nsc_lock);
1743 fd->sf_dev = dev;
1744 fd->sf_next = dev->nsc_close;
1745 dev->nsc_close = fd;
1747 mutex_exit(&dev->nsc_lock);
1767 nsc_dev_t *dev = fd->sf_dev;
1773 mutex_enter(&dev->nsc_lock);
1775 for (fdp = &dev->nsc_close; *fdp; fdp = &(*fdp)->sf_next)
1781 if (dev->nsc_wait || dev->nsc_refcnt <= 0)
1782 cv_broadcast(&dev->nsc_cv);
1785 (void) _nsc_wait_dev(dev, 0);
1787 mutex_exit(&dev->nsc_lock);
1789 _nsc_free_dev(dev);
1810 nsc_dev_t *dev = fd->sf_dev;
1813 mutex_enter(&dev->nsc_lock);
1816 (void) _nsc_wait_dev(dev, 0);
1827 mutex_exit(&dev->nsc_lock);
1833 * _nsc_alloc_iodev (nsc_dev_t *dev, int type, nsc_iodev_t **iodevp)
1852 _nsc_alloc_iodev(dev, type, iodevp)
1853 nsc_dev_t *dev;
1867 if (!(io = _nsc_reserve_io(dev->nsc_path, type))) {
1876 iodev->si_dev = dev;
1879 dev->nsc_refcnt++;
1882 mutex_enter(&dev->nsc_lock);
1884 for (ip = dev->nsc_list; ip; ip = ip->si_next)
1891 iodev->si_next = dev->nsc_list;
1892 dev->nsc_list = iodev;
1895 mutex_exit(&dev->nsc_lock);
1922 nsc_dev_t *dev;
1927 dev = iodev->si_dev;
1929 mutex_enter(&dev->nsc_lock);
1932 mutex_exit(&dev->nsc_lock);
1936 for (ipp = &dev->nsc_list; *ipp; ipp = &(*ipp)->si_next)
1942 if (dev->nsc_wait || dev->nsc_refcnt <= 0)
1943 cv_broadcast(&dev->nsc_cv);
1946 (void) _nsc_wait_dev(dev, 0);
1948 mutex_exit(&dev->nsc_lock);
1951 _nsc_free_dev(dev);
1985 nsc_dev_t *dev, *dp, **ddp;
1991 if (!(dev = (nsc_dev_t *)nsc_kmem_zalloc(
1992 sizeof (*dev), KM_SLEEP, _nsc_local_mem)))
1995 dev->nsc_refcnt++;
1997 mutex_init(&dev->nsc_lock, NULL, MUTEX_DRIVER, NULL);
1998 cv_init(&dev->nsc_cv, NULL, CV_DRIVER, NULL);
2000 dev->nsc_phash = nsc_strhash(path);
2001 dev->nsc_path = nsc_strdup(path);
2005 dev->nsc_next = _nsc_dev_pend;
2006 _nsc_dev_pend = dev;
2013 if (dp->nsc_phash == dev->nsc_phash &&
2014 strcmp(dp->nsc_path, dev->nsc_path) == 0) {
2021 if (*ddp == dev) {
2022 *ddp = dev->nsc_next;
2026 dev->nsc_next = _nsc_dev_top;
2027 _nsc_dev_top = dev;
2033 _nsc_free_dev(dev);
2034 dev = dp;
2044 if (dev->nsc_values == NULL) {
2046 if (dv->dv_phash == dev->nsc_phash &&
2047 strcmp(dv->dv_path, dev->nsc_path) == 0) {
2048 dev->nsc_values = dv;
2087 *devp = dev;
2094 * _nsc_free_dev (nsc_dev_t *dev)
2107 _nsc_free_dev(dev)
2108 nsc_dev_t *dev;
2112 if (!dev)
2117 if (--dev->nsc_refcnt > 0) {
2123 if (*ddp == dev) {
2124 *ddp = dev->nsc_next;
2125 dev->nsc_next = _nsc_dev_pend;
2126 _nsc_dev_pend = dev;
2132 mutex_enter(&dev->nsc_lock);
2134 while (dev->nsc_pend || dev->nsc_rpend || dev->nsc_wait) {
2135 cv_wait(&dev->nsc_cv, &dev->nsc_lock);
2138 mutex_exit(&dev->nsc_lock);
2143 if (*ddp == dev) {
2144 *ddp = dev->nsc_next;
2150 mutex_destroy(&dev->nsc_lock);
2151 cv_destroy(&dev->nsc_cv);
2152 nsc_strfree(dev->nsc_path);
2154 nsc_kmem_free(dev, sizeof (*dev));