diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/init_main.c | 11 | ||||
-rw-r--r-- | sys/kern/kern_conf.c | 31 | ||||
-rw-r--r-- | sys/kern/kern_descrip.c | 27 | ||||
-rw-r--r-- | sys/kern/subr_disk.c | 13 | ||||
-rw-r--r-- | sys/kern/subr_diskslice.c | 10 | ||||
-rw-r--r-- | sys/kern/tty_pty.c | 33 | ||||
-rw-r--r-- | sys/kern/vfs_conf.c | 59 | ||||
-rw-r--r-- | sys/kern/vfs_mount.c | 59 |
8 files changed, 47 insertions, 196 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 0229c56..1a2644b 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -43,7 +43,6 @@ */ #include "opt_init_path.h" -#include "opt_devfs.h" #include <sys/param.h> #include <sys/file.h> @@ -62,6 +61,7 @@ #include <sys/vmmeter.h> #include <sys/unistd.h> #include <sys/malloc.h> +#include <sys/conf.h> #include <machine/cpu.h> @@ -499,10 +499,11 @@ start_init(void *dummy) (void)subyte(--ucp, 'C'); options = 1; #endif -#ifdef DEVFS - (void)subyte(--ucp, 'd'); - options = 1; -#endif + if (devfs_present) { + (void)subyte(--ucp, 'd'); + options = 1; + } + if (options == 0) (void)subyte(--ucp, '-'); (void)subyte(--ucp, '-'); /* leading hyphen */ diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 1e344e3..fb15afd 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -42,6 +42,7 @@ #include <sys/conf.h> #include <sys/vnode.h> #include <sys/queue.h> +#include <sys/ctype.h> #include <machine/stdarg.h> #define cdevsw_ALLOCSTART (NUMCDEVSW/2) @@ -69,7 +70,8 @@ static LIST_HEAD(, specinfo) dev_hash[DEVT_HASH]; static LIST_HEAD(, specinfo) dev_free; devfs_create_t *devfs_create_hook; -devfs_remove_t *devfs_remove_hook; +devfs_destroy_t *devfs_destroy_hook; +int devfs_present; static int free_devt; SYSCTL_INT(_debug, OID_AUTO, free_devt, CTLFLAG_RW, &free_devt, 0, ""); @@ -352,8 +354,8 @@ make_dev_alias(dev_t pdev, char *fmt, ...) void destroy_dev(dev_t dev) { - if (devfs_remove_hook) - devfs_remove_hook(dev); + if (devfs_destroy_hook) + devfs_destroy_hook(dev); dev->si_drv1 = 0; dev->si_drv2 = 0; dev->si_devsw = 0; @@ -381,3 +383,26 @@ devtoname(dev_t dev) } return (dev->si_name); } + +int +dev_stdclone(char *name, char **namep, char *stem, int *unit) +{ + int u, i; + + if (bcmp(stem, name, strlen(stem)) != 0) + return (0); + i = strlen(stem); + if (!isdigit(name[i])) + return (0); + u = 0; + while (isdigit(name[i])) { + u *= 10; + u += name[i++] - '0'; + } + *unit = u; + if (namep) + *namep = &name[i]; + if (name[i]) + return (2); + return (1); +} diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index a7f917f..6648917 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -40,7 +40,6 @@ */ #include "opt_compat.h" -#include "opt_devfs.h" #include <sys/param.h> #include <sys/systm.h> #include <sys/sysproto.h> @@ -62,12 +61,6 @@ #include <vm/vm.h> #include <vm/vm_extern.h> -#ifdef DEVFS -#include <sys/ctype.h> -#include <sys/eventhandler.h> -#include <fs/devfs/devfs.h> -#endif - static MALLOC_DEFINE(M_FILEDESC, "file desc", "Open file descriptor table"); MALLOC_DEFINE(M_FILE, "file", "Open file structure"); static MALLOC_DEFINE(M_SIGIO, "sigio", "sigio structures"); @@ -1322,7 +1315,6 @@ SYSCTL_INT(_kern, KERN_MAXFILES, maxfiles, CTLFLAG_RW, SYSCTL_INT(_kern, OID_AUTO, openfiles, CTLFLAG_RD, &nfiles, 0, "System-wide number of open files"); -#ifdef DEVFS static void fildesc_clone(void *arg, char *name, int namelen, dev_t *dev) { @@ -1330,14 +1322,13 @@ fildesc_clone(void *arg, char *name, int namelen, dev_t *dev) if (*dev != NODEV) return; - if (devfs_stdclone(name, NULL, "fd/", &u) != 1) + if (dev_stdclone(name, NULL, "fd/", &u) != 1) return; if (u <= 2) return; *dev = make_dev(&fildesc_cdevsw, u, UID_BIN, GID_BIN, 0666, name); return; } -#endif static void fildesc_drvinit(void *unused) @@ -1350,16 +1341,14 @@ fildesc_drvinit(void *unused) make_dev_alias(dev, "stdout"); dev = make_dev(&fildesc_cdevsw, 2, UID_BIN, GID_BIN, 0666, "fd/2"); make_dev_alias(dev, "stderr"); -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, fildesc_clone, 0, 1000); -#else - { - int fd; - - for (fd = 3; fd < NUMFDESC; fd++) - make_dev(&fildesc_cdevsw, fd, UID_BIN, GID_BIN, 0666, "fd/%d", fd); + EVENTHANDLER_REGISTER(dev_clone, fildesc_clone, 0, 1000); + if (!devfs_present) { + int fd; + + for (fd = 3; fd < NUMFDESC; fd++) + make_dev(&fildesc_cdevsw, fd, UID_BIN, GID_BIN, 0666, + "fd/%d", fd); } -#endif } struct fileops badfileops = { diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index 77fc4ee..325038c 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -10,8 +10,6 @@ * */ -#include "opt_devfs.h" - #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> @@ -22,12 +20,7 @@ #include <sys/malloc.h> #include <sys/sysctl.h> #include <machine/md_var.h> - -#ifdef DEVFS -#include <sys/eventhandler.h> -#include <fs/devfs/devfs.h> #include <sys/ctype.h> -#endif MALLOC_DEFINE(M_DISK, "disk", "disk data"); @@ -39,7 +32,6 @@ static d_psize_t diskpsize; static LIST_HEAD(, disk) disklist = LIST_HEAD_INITIALIZER(&disklist); -#ifdef DEVFS static void disk_clone(void *arg, char *name, int namelen, dev_t *dev) { @@ -95,7 +87,6 @@ disk_clone(void *arg, char *name, int namelen, dev_t *dev) return; } } -#endif static void inherit_raw(dev_t pdev, dev_t dev) @@ -138,9 +129,7 @@ disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, struct dp->d_devsw = cdevsw; LIST_INSERT_HEAD(&disklist, dp, d_list); if (!once) { -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, disk_clone, 0, 1000); -#endif + EVENTHANDLER_REGISTER(dev_clone, disk_clone, 0, 1000); once++; } return (dev); diff --git a/sys/kern/subr_diskslice.c b/sys/kern/subr_diskslice.c index 8d5d4ab..eed211c 100644 --- a/sys/kern/subr_diskslice.c +++ b/sys/kern/subr_diskslice.c @@ -46,8 +46,6 @@ * $FreeBSD$ */ -#include "opt_devfs.h" - #include <stddef.h> #include <sys/param.h> @@ -465,16 +463,13 @@ dsioctl(dev, cmd, data, flags, sspp) S_IFCHR, ssp->dss_oflags, sspp, lp); if (error != 0) { - /* XXX should free devfs toks. */ free(lp, M_DEVBUF); - /* XXX should restore devfs toks. */ *sspp = ssp; return (EBUSY); } } } - /* XXX devfs tokens? */ free(lp, M_DEVBUF); dsgone(&ssp); return (0); @@ -693,10 +688,7 @@ dsopen(dev, mode, flags, sspp, lp) ssp->dss_slices[WHOLE_DISK_SLICE].ds_wlabel = TRUE; } - /* - * Initialize secondary info for all slices. It is needed for more - * than the current slice in the DEVFS case. - */ + /* Initialize secondary info for all slices. */ for (slice = 0; slice < ssp->dss_nslices; slice++) { sp = &ssp->dss_slices[slice]; if (sp->ds_label != NULL diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c index d4402cd..e8e7bbe 100644 --- a/sys/kern/tty_pty.c +++ b/sys/kern/tty_pty.c @@ -39,7 +39,6 @@ * (Actually two drivers, requiring two entries in 'cdevsw') */ #include "opt_compat.h" -#include "opt_devfs.h" #include <sys/param.h> #include <sys/systm.h> #if defined(COMPAT_43) || defined(COMPAT_SUNOS) @@ -55,11 +54,6 @@ #include <sys/signalvar.h> #include <sys/malloc.h> -#ifdef DEVFS -#include <sys/eventhandler.h> -#include <fs/devfs/devfs.h> -#endif - MALLOC_DEFINE(M_PTY, "ptys", "pty data structures"); static void ptsstart __P((struct tty *tp)); @@ -177,23 +171,8 @@ ptsopen(dev, flag, devtype, p) int error; struct pt_ioctl *pti; -#ifndef DEVFS - { - int minr = lminor(dev); - /* - * If we openned this device, ensure we have the - * next one too, so people can open it. - */ - if (minr < 255) { - dev_t nextdev = makedev(major(dev), minr + 1); - if (!nextdev->si_drv1) { - ptyinit(minr + 1); - } - } if (!dev->si_drv1) ptyinit(minor(dev)); - } -#endif if (!dev->si_drv1) return(ENXIO); pti = dev->si_drv1; @@ -355,10 +334,8 @@ ptcopen(dev, flag, devtype, p) register struct tty *tp; struct pt_ioctl *pti; -#ifndef DEVFS if (!dev->si_drv1) ptyinit(minor(dev)); -#endif if (!dev->si_drv1) return(ENXIO); tp = dev->si_tty; @@ -826,7 +803,6 @@ ptyioctl(dev, cmd, data, flag, p) static void ptc_drvinit __P((void *unused)); -#ifdef DEVFS static void pty_clone __P((void *arg, char *name, int namelen, dev_t *dev)); static void @@ -865,20 +841,13 @@ pty_clone(arg, name, namelen, dev) return; } - -#endif - static void ptc_drvinit(unused) void *unused; { -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, pty_clone, 0, 1000); -#else + EVENTHANDLER_REGISTER(dev_clone, pty_clone, 0, 1000); cdevsw_add(&pts_cdevsw); cdevsw_add(&ptc_cdevsw); - ptyinit(0); -#endif } SYSINIT(ptcdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR_C,ptc_drvinit,NULL) diff --git a/sys/kern/vfs_conf.c b/sys/kern/vfs_conf.c index c75ba40..34d4afb 100644 --- a/sys/kern/vfs_conf.c +++ b/sys/kern/vfs_conf.c @@ -43,7 +43,6 @@ */ #include "opt_rootdevname.h" -#include "opt_devfs.h" #include <sys/param.h> #include <sys/kernel.h> @@ -63,11 +62,6 @@ #include <ddb/ddb.h> #endif -#ifdef DEVFS -#include <sys/eventhandler.h> -#include <fs/devfs/devfs.h> -#endif - MALLOC_DEFINE(M_MOUNT, "mount", "vfs mount structure"); #define ROOTNAME "root_device" @@ -326,7 +320,6 @@ gets(char *cp) */ dev_t getdiskbyname(char *name) { -#ifdef DEVFS char *cp; dev_t dev; @@ -335,58 +328,8 @@ getdiskbyname(char *name) { cp += 5; dev = NODEV; - EVENTHANDLER_INVOKE(devfs_clone, cp, strlen(cp), &dev); + EVENTHANDLER_INVOKE(dev_clone, cp, strlen(cp), &dev); return (dev); - -#else - char *cp; - int cd, unit, slice, part; - dev_t dev; - - slice = 0; - part = 0; - cp = rindex(name, '/'); - if (cp != NULL) { - name = cp + 1; - } - cp = name; - while (cp != '\0' && (*cp < '0' || *cp > '9')) - cp++; - if (cp == name) { - printf("missing device name\n"); - return (NODEV); - } - if (*cp == '\0') { - printf("missing unit number\n"); - return (NODEV); - } - unit = *cp - '0'; - *cp++ = '\0'; - for (cd = 0; cd < NUMCDEVSW; cd++) { - dev = makedev(cd, 0); - if (devsw(dev) != NULL && - strcmp(devsw(dev)->d_name, name) == 0) - goto gotit; - } - printf("no such device '%s'\n", name); - return (NODEV); -gotit: - while (*cp >= '0' && *cp <= '9') - unit += 10 * unit + *cp++ - '0'; - if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') { - slice = cp[1] - '0' + 1; - cp += 2; - } - if (*cp >= 'a' && *cp <= 'h') { - part = *cp - 'a'; - cp++; - } - if (*cp != '\0') { - printf("junk after name\n"); - return (NODEV); - } - return (makedev(cd, dkmakeminor(unit, slice, part))); -#endif } /* diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index c75ba40..34d4afb 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -43,7 +43,6 @@ */ #include "opt_rootdevname.h" -#include "opt_devfs.h" #include <sys/param.h> #include <sys/kernel.h> @@ -63,11 +62,6 @@ #include <ddb/ddb.h> #endif -#ifdef DEVFS -#include <sys/eventhandler.h> -#include <fs/devfs/devfs.h> -#endif - MALLOC_DEFINE(M_MOUNT, "mount", "vfs mount structure"); #define ROOTNAME "root_device" @@ -326,7 +320,6 @@ gets(char *cp) */ dev_t getdiskbyname(char *name) { -#ifdef DEVFS char *cp; dev_t dev; @@ -335,58 +328,8 @@ getdiskbyname(char *name) { cp += 5; dev = NODEV; - EVENTHANDLER_INVOKE(devfs_clone, cp, strlen(cp), &dev); + EVENTHANDLER_INVOKE(dev_clone, cp, strlen(cp), &dev); return (dev); - -#else - char *cp; - int cd, unit, slice, part; - dev_t dev; - - slice = 0; - part = 0; - cp = rindex(name, '/'); - if (cp != NULL) { - name = cp + 1; - } - cp = name; - while (cp != '\0' && (*cp < '0' || *cp > '9')) - cp++; - if (cp == name) { - printf("missing device name\n"); - return (NODEV); - } - if (*cp == '\0') { - printf("missing unit number\n"); - return (NODEV); - } - unit = *cp - '0'; - *cp++ = '\0'; - for (cd = 0; cd < NUMCDEVSW; cd++) { - dev = makedev(cd, 0); - if (devsw(dev) != NULL && - strcmp(devsw(dev)->d_name, name) == 0) - goto gotit; - } - printf("no such device '%s'\n", name); - return (NODEV); -gotit: - while (*cp >= '0' && *cp <= '9') - unit += 10 * unit + *cp++ - '0'; - if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') { - slice = cp[1] - '0' + 1; - cp += 2; - } - if (*cp >= 'a' && *cp <= 'h') { - part = *cp - 'a'; - cp++; - } - if (*cp != '\0') { - printf("junk after name\n"); - return (NODEV); - } - return (makedev(cd, dkmakeminor(unit, slice, part))); -#endif } /* |