From e47f61e18396b6e5f61ee91b9f9f832976ee96cf Mon Sep 17 00:00:00 2001 From: phk Date: Sat, 2 Sep 2000 19:17:34 +0000 Subject: Avoid the modules madness I inadvertently introduced by making the cloning infrastructure standard in kern_conf. Modules are now the same with or without devfs support. If you need to detect if devfs is present, in modules or elsewhere, check the integer variable "devfs_present". This happily removes an ugly hack from kern/vfs_conf.c. This forces a rename of the eventhandler and the standard clone helper function. Include in : it's a helper #include like Remove all #includes of opt_devfs.h they no longer matter. --- sys/dev/bktr/bktr_core.c | 1 - sys/dev/bktr/bktr_os.c | 1 - sys/dev/ccd/ccd.c | 14 ++-------- sys/dev/fdc/fdc.c | 24 ++++------------- sys/dev/md/md.c | 22 ++++------------ sys/dev/sound/isa/emu8000.c | 3 --- sys/dev/sound/isa/mpu.c | 2 -- sys/dev/sound/isa/opl.c | 2 -- sys/dev/sound/isa/uartsio.c | 2 -- sys/dev/sound/midi/midi.c | 2 -- sys/dev/sound/midi/midibuf.c | 2 -- sys/dev/sound/midi/midisynth.c | 2 -- sys/dev/sound/midi/sequencer.c | 2 -- sys/dev/sound/pci/csamidi.c | 2 -- sys/fs/devfs/devfs.h | 5 ---- sys/fs/devfs/devfs_devs.c | 28 +++----------------- sys/fs/devfs/devfs_vnops.c | 2 +- sys/geom/geom_ccd.c | 14 ++-------- sys/i4b/driver/i4b_ctl.c | 9 ------- sys/i4b/driver/i4b_rbch.c | 9 ------- sys/i4b/driver/i4b_tel.c | 9 ------- sys/i4b/layer4/i4b_i4bdrv.c | 9 ------- sys/isa/fd.c | 24 ++++------------- sys/kern/init_main.c | 11 ++++---- sys/kern/kern_conf.c | 31 +++++++++++++++++++--- sys/kern/kern_descrip.c | 27 ++++++------------- sys/kern/subr_disk.c | 13 +--------- sys/kern/subr_diskslice.c | 10 +------ sys/kern/tty_pty.c | 33 +---------------------- sys/kern/vfs_conf.c | 59 +----------------------------------------- sys/kern/vfs_mount.c | 59 +----------------------------------------- sys/modules/bktr/Makefile | 2 +- sys/modules/ccd/Makefile | 2 +- sys/modules/coda/Makefile | 2 +- sys/modules/if_tap/Makefile | 2 +- sys/modules/if_tun/Makefile | 2 +- sys/modules/md/Makefile | 2 +- sys/modules/md/opt_devfs.h | 2 -- sys/modules/streams/Makefile | 2 +- sys/modules/vn/Makefile | 2 +- sys/net/bpf.c | 15 ++--------- sys/net/if_tun.c | 16 ++---------- sys/sys/conf.h | 15 ++++++++--- sys/sys/diskslice.h | 9 ------- sys/sys/linedisc.h | 15 ++++++++--- 45 files changed, 104 insertions(+), 417 deletions(-) delete mode 100644 sys/modules/md/opt_devfs.h diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c index 7d71019..3a50b03 100644 --- a/sys/dev/bktr/bktr_core.c +++ b/sys/dev/bktr/bktr_core.c @@ -98,7 +98,6 @@ #ifdef __FreeBSD__ #include "bktr.h" -#include "opt_devfs.h" #endif /* __FreeBSD__ */ #if ( \ diff --git a/sys/dev/bktr/bktr_os.c b/sys/dev/bktr/bktr_os.c index 6dd3ba9..7db3f83 100644 --- a/sys/dev/bktr/bktr_os.c +++ b/sys/dev/bktr/bktr_os.c @@ -50,7 +50,6 @@ #ifdef __FreeBSD__ #include "bktr.h" -#include "opt_devfs.h" #endif /* __FreeBSD__ */ #include "opt_bktr.h" /* include any kernel config options */ diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c index 0dd13fb..7b06a89 100644 --- a/sys/dev/ccd/ccd.c +++ b/sys/dev/ccd/ccd.c @@ -87,7 +87,6 @@ * Moffett Field, CA 94035 */ -#include "opt_devfs.h" #include "ccd.h" #include @@ -109,11 +108,6 @@ #include -#ifdef DEVFS -#include -#include -#endif - #if defined(CCDDEBUG) && !defined(DEBUG) #define DEBUG #endif @@ -289,7 +283,6 @@ putccdbuf(struct ccdbuf *cbp) #define CCD_OFFSET 16 #endif -#ifdef DEVFS static void ccd_clone(void *arg, char *name, int namelen, dev_t *dev) { @@ -298,7 +291,7 @@ ccd_clone(void *arg, char *name, int namelen, dev_t *dev) if (*dev != NODEV) return; - i = devfs_stdclone(name, &s, "ccd", &u); + i = dev_stdclone(name, &s, "ccd", &u); if (i != 2) return; if (u >= numccd) @@ -310,7 +303,6 @@ ccd_clone(void *arg, char *name, int namelen, dev_t *dev) *dev = make_dev(&ccd_cdevsw, u * 8 + *s - 'a', UID_ROOT, GID_OPERATOR, 0640, name); } -#endif DEVFS /* * Called by main() during pseudo-device attachment. All we need @@ -348,9 +340,7 @@ ccdattach() /* XXX: is this necessary? */ for (i = 0; i < numccd; ++i) ccddevs[i].ccd_dk = -1; -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, ccd_clone, 0, 1000); -#endif + EVENTHANDLER_REGISTER(dev_clone, ccd_clone, 0, 1000); } static int diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index dd513e9..c4b6a3c 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -52,7 +52,6 @@ */ #include "opt_fdc.h" -#include "opt_devfs.h" #include "card.h" #include @@ -84,12 +83,6 @@ #include #include -#ifdef DEVFS -#include -#include -#include -#endif - /* misuse a flag to identify format operation */ /* configuration flags */ @@ -952,7 +945,6 @@ DRIVER_MODULE(fdc, pccard, fdc_pccard_driver, fdc_devclass, 0, 0); #endif /* NCARD > 0 */ -#ifdef DEVFS static void fd_clone __P((void *arg, char *name, int namelen, dev_t *dev)); static struct { @@ -993,7 +985,7 @@ fd_clone(arg, name, namelen, dev) if (*dev != NODEV) return; - if (devfs_stdclone(name, &n, "fd", &u) != 2) + if (dev_stdclone(name, &n, "fd", &u) != 2) return; for (i = 0; ; i++) { if (fd_suffix[i].match == NULL) @@ -1011,7 +1003,6 @@ fd_clone(arg, name, namelen, dev) *dev = make_dev_alias(pdev, name); } } -#endif /******************************************************************/ /* @@ -1163,20 +1154,15 @@ static int fd_attach(device_t dev) { struct fd_data *fd; + static int cdevsw_add_done = 0; fd = device_get_softc(dev); -#ifndef DEVFS - { - static int cdevsw_add_done = 0; if (!cdevsw_add_done) { - cdevsw_add(&fd_cdevsw); /* XXX */ - cdevsw_add_done++; - } + cdevsw_add(&fd_cdevsw); /* XXX */ + cdevsw_add_done++; } -#else - EVENTHANDLER_REGISTER(devfs_clone, fd_clone, 0, 1000); -#endif + EVENTHANDLER_REGISTER(dev_clone, fd_clone, 0, 1000); make_dev(&fd_cdevsw, (fd->fdu << 6), UID_ROOT, GID_OPERATOR, 0640, "fd%d", fd->fdu); diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 423b713..9314af8 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -12,7 +12,6 @@ #include "opt_mfs.h" /* We have adopted some tasks from MFS */ #include "opt_md.h" -#include "opt_devfs.h" #include #include @@ -26,11 +25,6 @@ #include #include -#ifdef DEVFS -#include -#include -#endif - #ifndef MD_NSECT #define MD_NSECT (10000 * 2) #endif @@ -124,10 +118,8 @@ mdopen(dev_t dev, int flag, int fmt, struct proc *p) devtoname(dev), flag, fmt, p); sc = dev->si_drv1; -#ifndef DEVFS - if (sc->unit + 1 == mdunits) + if ((!devfs_present) && sc->unit + 1 == mdunits) mdcreate_malloc(-1); -#endif dl = &sc->disk.d_label; bzero(dl, sizeof(*dl)); @@ -411,7 +403,6 @@ mdcreate_malloc(int unit) printf("md%d: Malloc disk\n", sc->unit); } -#ifdef DEVFS static void md_clone (void *arg, char *name, int namelen, dev_t *dev) { @@ -419,7 +410,7 @@ md_clone (void *arg, char *name, int namelen, dev_t *dev) if (*dev != NODEV) return; - i = devfs_stdclone(name, NULL, "md", &u); + i = dev_stdclone(name, NULL, "md", &u); if (i == 0) return; /* XXX: should check that next char is [\0sa-h] */ @@ -431,7 +422,6 @@ md_clone (void *arg, char *name, int namelen, dev_t *dev) mdcreate_malloc(u); return; } -#endif static void md_drvinit(void *unused) @@ -463,11 +453,9 @@ md_drvinit(void *unused) mdunits, name, len, ptr); mdcreate_preload(ptr, len); } -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, md_clone, 0, 999); -#else - mdcreate_malloc(-1); -#endif + EVENTHANDLER_REGISTER(dev_clone, md_clone, 0, 999); + if (!devfs_present) + mdcreate_malloc(-1); } SYSINIT(mddev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR, md_drvinit,NULL) diff --git a/sys/dev/sound/isa/emu8000.c b/sys/dev/sound/isa/emu8000.c index d69d67c..65208ab 100644 --- a/sys/dev/sound/isa/emu8000.c +++ b/sys/dev/sound/isa/emu8000.c @@ -32,9 +32,6 @@ * */ - -#include "opt_devfs.h" - #include #include diff --git a/sys/dev/sound/isa/mpu.c b/sys/dev/sound/isa/mpu.c index 7fd89bb..2ed93c1 100644 --- a/sys/dev/sound/isa/mpu.c +++ b/sys/dev/sound/isa/mpu.c @@ -37,8 +37,6 @@ * */ -#include "opt_devfs.h" - #include #include #include diff --git a/sys/dev/sound/isa/opl.c b/sys/dev/sound/isa/opl.c index 3d2c9d6..3669e44 100644 --- a/sys/dev/sound/isa/opl.c +++ b/sys/dev/sound/isa/opl.c @@ -44,8 +44,6 @@ * */ -#include "opt_devfs.h" - #include #include diff --git a/sys/dev/sound/isa/uartsio.c b/sys/dev/sound/isa/uartsio.c index 9b43331..56b4e5d 100644 --- a/sys/dev/sound/isa/uartsio.c +++ b/sys/dev/sound/isa/uartsio.c @@ -46,8 +46,6 @@ * */ -#include "opt_devfs.h" - #include #include #include diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c index 83152cf..429a564 100644 --- a/sys/dev/sound/midi/midi.c +++ b/sys/dev/sound/midi/midi.c @@ -50,8 +50,6 @@ * */ -#include "opt_devfs.h" - #include static devclass_t midi_devclass; diff --git a/sys/dev/sound/midi/midibuf.c b/sys/dev/sound/midi/midibuf.c index 4e23800..5922a5b 100644 --- a/sys/dev/sound/midi/midibuf.c +++ b/sys/dev/sound/midi/midibuf.c @@ -35,8 +35,6 @@ * transmit to or received from a midi interface. */ -#include "opt_devfs.h" - #include /* Some macros to handle the queue. */ diff --git a/sys/dev/sound/midi/midisynth.c b/sys/dev/sound/midi/midisynth.c index 7d668fd..42a2a7e 100644 --- a/sys/dev/sound/midi/midisynth.c +++ b/sys/dev/sound/midi/midisynth.c @@ -34,8 +34,6 @@ * midi messages, and vice versa. */ -#include "opt_devfs.h" - #include #include diff --git a/sys/dev/sound/midi/sequencer.c b/sys/dev/sound/midi/sequencer.c index ba6a21d..9ba15a4 100644 --- a/sys/dev/sound/midi/sequencer.c +++ b/sys/dev/sound/midi/sequencer.c @@ -33,8 +33,6 @@ * to and from a midi device or synthesizer. */ -#include "opt_devfs.h" - #include #include diff --git a/sys/dev/sound/pci/csamidi.c b/sys/dev/sound/pci/csamidi.c index 39ecda6..74ebb6e 100644 --- a/sys/dev/sound/pci/csamidi.c +++ b/sys/dev/sound/pci/csamidi.c @@ -26,8 +26,6 @@ * $FreeBSD$ */ -#include "opt_devfs.h" - #include #include #include diff --git a/sys/fs/devfs/devfs.h b/sys/fs/devfs/devfs.h index c959e53..b00a913 100644 --- a/sys/fs/devfs/devfs.h +++ b/sys/fs/devfs/devfs.h @@ -96,9 +96,4 @@ void devfs_purge __P((struct devfs_dirent *dd)); struct devfs_dirent * devfs_vmkdir __P((char *name, int namelen, struct devfs_dirent *dotdot)); #endif /* DEVFS_INTERN */ - -typedef void (*devfs_clone_fn) __P((void *arg, char *name, int namelen, dev_t *result)); - -int devfs_stdclone __P((char *name, char **namep, char *stem, int *unit)); -EVENTHANDLER_DECLARE(devfs_clone, devfs_clone_fn); #endif /* _KERNEL */ diff --git a/sys/fs/devfs/devfs_devs.c b/sys/fs/devfs/devfs_devs.c index c3eb101..41a48c7 100644 --- a/sys/fs/devfs/devfs_devs.c +++ b/sys/fs/devfs/devfs_devs.c @@ -238,34 +238,12 @@ devfs_create(dev_t dev) } static void -devfs_remove(dev_t dev) +devfs_destroy(dev_t dev) { devfs_inot[dev->si_inode] = NULL; devfs_generation++; } devfs_create_t *devfs_create_hook = devfs_create; -devfs_remove_t *devfs_remove_hook = devfs_remove; - -int -devfs_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); -} +devfs_destroy_t *devfs_destroy_hook = devfs_destroy; +int devfs_present = 1; diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c index 0c81ded..e96dafb 100644 --- a/sys/fs/devfs/devfs_vnops.c +++ b/sys/fs/devfs/devfs_vnops.c @@ -300,7 +300,7 @@ devfs_lookup(ap) printf("Finished specname: %d \"%s\"\n", i, specname + i); #endif cdev = NODEV; - EVENTHANDLER_INVOKE(devfs_clone, specname + i, + EVENTHANDLER_INVOKE(dev_clone, specname + i, strlen(specname + i), &cdev); #if 0 printf("cloned %s -> %p %s\n", specname + i, cdev, diff --git a/sys/geom/geom_ccd.c b/sys/geom/geom_ccd.c index 0dd13fb..7b06a89 100644 --- a/sys/geom/geom_ccd.c +++ b/sys/geom/geom_ccd.c @@ -87,7 +87,6 @@ * Moffett Field, CA 94035 */ -#include "opt_devfs.h" #include "ccd.h" #include @@ -109,11 +108,6 @@ #include -#ifdef DEVFS -#include -#include -#endif - #if defined(CCDDEBUG) && !defined(DEBUG) #define DEBUG #endif @@ -289,7 +283,6 @@ putccdbuf(struct ccdbuf *cbp) #define CCD_OFFSET 16 #endif -#ifdef DEVFS static void ccd_clone(void *arg, char *name, int namelen, dev_t *dev) { @@ -298,7 +291,7 @@ ccd_clone(void *arg, char *name, int namelen, dev_t *dev) if (*dev != NODEV) return; - i = devfs_stdclone(name, &s, "ccd", &u); + i = dev_stdclone(name, &s, "ccd", &u); if (i != 2) return; if (u >= numccd) @@ -310,7 +303,6 @@ ccd_clone(void *arg, char *name, int namelen, dev_t *dev) *dev = make_dev(&ccd_cdevsw, u * 8 + *s - 'a', UID_ROOT, GID_OPERATOR, 0640, name); } -#endif DEVFS /* * Called by main() during pseudo-device attachment. All we need @@ -348,9 +340,7 @@ ccdattach() /* XXX: is this necessary? */ for (i = 0; i < numccd; ++i) ccddevs[i].ccd_dk = -1; -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, ccd_clone, 0, 1000); -#endif + EVENTHANDLER_REGISTER(dev_clone, ccd_clone, 0, 1000); } static int diff --git a/sys/i4b/driver/i4b_ctl.c b/sys/i4b/driver/i4b_ctl.c index c88b35e..c026fef 100644 --- a/sys/i4b/driver/i4b_ctl.c +++ b/sys/i4b/driver/i4b_ctl.c @@ -62,15 +62,6 @@ #include #ifdef __FreeBSD__ - -#if defined(__FreeBSD__) && __FreeBSD__ == 3 -#include "opt_devfs.h" -#endif - - -#endif /* __FreeBSD__ */ - -#ifdef __FreeBSD__ #include #include #elif defined(__bsdi__) diff --git a/sys/i4b/driver/i4b_rbch.c b/sys/i4b/driver/i4b_rbch.c index 0ab29d9..d4c9225 100644 --- a/sys/i4b/driver/i4b_rbch.c +++ b/sys/i4b/driver/i4b_rbch.c @@ -56,15 +56,6 @@ extern cc_t ttydefchars; #define termioschars(t) memcpy((t)->c_cc, &ttydefchars, sizeof((t)->c_cc)) #endif -#ifdef __FreeBSD__ - -#if defined(__FreeBSD__) && __FreeBSD__ == 3 -#include "opt_devfs.h" -#endif - - -#endif /* __FreeBSD__ */ - #ifdef __NetBSD__ #include #define bootverbose 0 diff --git a/sys/i4b/driver/i4b_tel.c b/sys/i4b/driver/i4b_tel.c index a9b2591..a236d37 100644 --- a/sys/i4b/driver/i4b_tel.c +++ b/sys/i4b/driver/i4b_tel.c @@ -61,15 +61,6 @@ #include #include -#ifdef __FreeBSD__ - -#if defined(__FreeBSD__) && __FreeBSD__ == 3 -#include "opt_devfs.h" -#endif - - -#endif /* __FreeBSD__ */ - #ifdef __bsdi__ #include #endif diff --git a/sys/i4b/layer4/i4b_i4bdrv.c b/sys/i4b/layer4/i4b_i4bdrv.c index 8bc866f..0821c2d 100644 --- a/sys/i4b/layer4/i4b_i4bdrv.c +++ b/sys/i4b/layer4/i4b_i4bdrv.c @@ -72,15 +72,6 @@ #include #ifdef __FreeBSD__ - -#if defined(__FreeBSD__) && __FreeBSD__ == 3 -#include "opt_devfs.h" -#endif - - -#endif /* __FreeBSD__*/ - -#ifdef __FreeBSD__ #include #include #include diff --git a/sys/isa/fd.c b/sys/isa/fd.c index dd513e9..c4b6a3c 100644 --- a/sys/isa/fd.c +++ b/sys/isa/fd.c @@ -52,7 +52,6 @@ */ #include "opt_fdc.h" -#include "opt_devfs.h" #include "card.h" #include @@ -84,12 +83,6 @@ #include #include -#ifdef DEVFS -#include -#include -#include -#endif - /* misuse a flag to identify format operation */ /* configuration flags */ @@ -952,7 +945,6 @@ DRIVER_MODULE(fdc, pccard, fdc_pccard_driver, fdc_devclass, 0, 0); #endif /* NCARD > 0 */ -#ifdef DEVFS static void fd_clone __P((void *arg, char *name, int namelen, dev_t *dev)); static struct { @@ -993,7 +985,7 @@ fd_clone(arg, name, namelen, dev) if (*dev != NODEV) return; - if (devfs_stdclone(name, &n, "fd", &u) != 2) + if (dev_stdclone(name, &n, "fd", &u) != 2) return; for (i = 0; ; i++) { if (fd_suffix[i].match == NULL) @@ -1011,7 +1003,6 @@ fd_clone(arg, name, namelen, dev) *dev = make_dev_alias(pdev, name); } } -#endif /******************************************************************/ /* @@ -1163,20 +1154,15 @@ static int fd_attach(device_t dev) { struct fd_data *fd; + static int cdevsw_add_done = 0; fd = device_get_softc(dev); -#ifndef DEVFS - { - static int cdevsw_add_done = 0; if (!cdevsw_add_done) { - cdevsw_add(&fd_cdevsw); /* XXX */ - cdevsw_add_done++; - } + cdevsw_add(&fd_cdevsw); /* XXX */ + cdevsw_add_done++; } -#else - EVENTHANDLER_REGISTER(devfs_clone, fd_clone, 0, 1000); -#endif + EVENTHANDLER_REGISTER(dev_clone, fd_clone, 0, 1000); make_dev(&fd_cdevsw, (fd->fdu << 6), UID_ROOT, GID_OPERATOR, 0640, "fd%d", fd->fdu); 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 #include @@ -62,6 +61,7 @@ #include #include #include +#include #include @@ -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 #include #include +#include #include #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 #include #include @@ -62,12 +61,6 @@ #include #include -#ifdef DEVFS -#include -#include -#include -#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 #include #include @@ -22,12 +20,7 @@ #include #include #include - -#ifdef DEVFS -#include -#include #include -#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 #include @@ -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 #include #if defined(COMPAT_43) || defined(COMPAT_SUNOS) @@ -55,11 +54,6 @@ #include #include -#ifdef DEVFS -#include -#include -#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 #include @@ -63,11 +62,6 @@ #include #endif -#ifdef DEVFS -#include -#include -#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 #include @@ -63,11 +62,6 @@ #include #endif -#ifdef DEVFS -#include -#include -#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/modules/bktr/Makefile b/sys/modules/bktr/Makefile index a341d6a..3c7e651 100644 --- a/sys/modules/bktr/Makefile +++ b/sys/modules/bktr/Makefile @@ -14,7 +14,7 @@ .PATH: ${.CURDIR}/../../dev/bktr KMOD= bktr SRCS= bktr_core.c bktr_os.c bktr_audio.c bktr_tuner.c bktr_card.c \ - bktr.h opt_devfs.h opt_bktr.h smbus.h bus_if.h device_if.h \ + bktr.h opt_bktr.h smbus.h bus_if.h device_if.h \ pci_if.h vnode_if.h CLEANFILES= bktr.h smbus.h diff --git a/sys/modules/ccd/Makefile b/sys/modules/ccd/Makefile index 1519c86..3235eae 100644 --- a/sys/modules/ccd/Makefile +++ b/sys/modules/ccd/Makefile @@ -2,7 +2,7 @@ .PATH: ${.CURDIR}/../../dev/ccd KMOD= ccd -SRCS= ccd.c ccd.h vnode_if.h opt_devfs.h +SRCS= ccd.c ccd.h vnode_if.h NOMAN= NCCD?= 4 diff --git a/sys/modules/coda/Makefile b/sys/modules/coda/Makefile index cc9614b..2c0e138 100644 --- a/sys/modules/coda/Makefile +++ b/sys/modules/coda/Makefile @@ -4,7 +4,7 @@ KMOD= coda SRCS= vnode_if.h \ coda_fbsd.c coda_namecache.c coda_psdev.c coda_subr.c \ - coda_venus.c coda_vfsops.c coda_vnops.c opt_devfs.h vcoda.h + coda_venus.c coda_vfsops.c coda_vnops.c vcoda.h NOMAN= CLEANFILES= vcoda.h diff --git a/sys/modules/if_tap/Makefile b/sys/modules/if_tap/Makefile index 6774484..8bc3758 100644 --- a/sys/modules/if_tap/Makefile +++ b/sys/modules/if_tap/Makefile @@ -4,7 +4,7 @@ .PATH: ${.CURDIR}/../../net KMOD= if_tap -SRCS= if_tap.c opt_devfs.h opt_inet.h vnode_if.h +SRCS= if_tap.c opt_inet.h vnode_if.h CLEANFILES+= opt_devfs.h opt_inet.h vnode_if.h diff --git a/sys/modules/if_tun/Makefile b/sys/modules/if_tun/Makefile index 019bc91..f3821db 100644 --- a/sys/modules/if_tun/Makefile +++ b/sys/modules/if_tun/Makefile @@ -2,7 +2,7 @@ .PATH: ${.CURDIR}/../../net KMOD= if_tun -SRCS= if_tun.c opt_devfs.h opt_inet.h vnode_if.h +SRCS= if_tun.c opt_inet.h vnode_if.h NOMAN= NBPF?= 1 diff --git a/sys/modules/md/Makefile b/sys/modules/md/Makefile index 823e236..bbbec99 100644 --- a/sys/modules/md/Makefile +++ b/sys/modules/md/Makefile @@ -2,7 +2,7 @@ .PATH: ${.CURDIR}/../../dev/md KMOD= md -SRCS= md.c opt_mfs.h opt_md.h opt_devfs.h +SRCS= md.c opt_mfs.h opt_md.h NOMAN= .include diff --git a/sys/modules/md/opt_devfs.h b/sys/modules/md/opt_devfs.h deleted file mode 100644 index 53bb6f3..0000000 --- a/sys/modules/md/opt_devfs.h +++ /dev/null @@ -1,2 +0,0 @@ -/* $FreeBSD$ */ - diff --git a/sys/modules/streams/Makefile b/sys/modules/streams/Makefile index beda735..04ed905 100644 --- a/sys/modules/streams/Makefile +++ b/sys/modules/streams/Makefile @@ -7,7 +7,7 @@ CFLAGS+= -DDEBUG_SVR4 .PATH: ${.CURDIR}/../../dev/streams KMOD= streams -SRCS= streams.c opt_streams.h opt_devfs.h +SRCS= streams.c opt_streams.h NOMAN= diff --git a/sys/modules/vn/Makefile b/sys/modules/vn/Makefile index 3a342f0..e9117dc 100644 --- a/sys/modules/vn/Makefile +++ b/sys/modules/vn/Makefile @@ -2,7 +2,7 @@ .PATH: ${.CURDIR}/../../dev/vn KMOD= vn -SRCS= vn.c vnode_if.h opt_devfs.h +SRCS= vn.c vnode_if.h NOMAN= .include diff --git a/sys/net/bpf.c b/sys/net/bpf.c index ecccbcf..0416b51 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -41,7 +41,6 @@ */ #include "bpf.h" -#include "opt_devfs.h" #ifndef __GNUC__ #define inline @@ -79,11 +78,6 @@ #include #include -#ifdef DEVFS -#include -#include -#endif - MALLOC_DEFINE(M_BPF, "BPF", "BPF data"); #if NBPF > 0 @@ -1363,7 +1357,6 @@ bpfdetach(ifp) static void bpf_drvinit __P((void *unused)); -#ifdef DEVFS static void bpf_clone __P((void *arg, char *name, int namelen, dev_t *dev)); static void @@ -1377,24 +1370,20 @@ bpf_clone(arg, name, namelen, dev) if (*dev != NODEV) return; - if (devfs_stdclone(name, NULL, "bpf", &u) != 1) + if (dev_stdclone(name, NULL, "bpf", &u) != 1) return; /* XXX: minor encoding if u > 255 */ *dev = make_dev(&bpf_cdevsw, u, 0, 0, 0600, "bpf%d", u); return; } -#endif static void bpf_drvinit(unused) void *unused; { -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, bpf_clone, 0, 1000); -#else + EVENTHANDLER_REGISTER(dev_clone, bpf_clone, 0, 1000); cdevsw_add(&bpf_cdevsw); -#endif } SYSINIT(bpfdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,bpf_drvinit,NULL) diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index da865f0..8079566 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -17,7 +17,6 @@ */ #include "opt_inet.h" -#include "opt_devfs.h" #include #include @@ -51,11 +50,6 @@ #include #include -#ifdef DEVFS -#include -#include -#endif - static MALLOC_DEFINE(M_TUN, "tun", "Tunnel Interface"); static void tunattach __P((void *)); @@ -97,7 +91,6 @@ static struct cdevsw tun_cdevsw = { /* bmaj */ -1 }; -#ifdef DEVFS static void tun_clone __P((void *arg, char *name, int namelen, dev_t *dev)); static void @@ -111,26 +104,21 @@ tun_clone(arg, name, namelen, dev) if (*dev != NODEV) return; - if (devfs_stdclone(name, NULL, "tun", &u) != 1) + if (dev_stdclone(name, NULL, "tun", &u) != 1) return; /* XXX: minor encoding if u > 255 */ *dev = make_dev(&tun_cdevsw, u, UID_UUCP, GID_DIALER, 0600, "tun%d", u); } -#endif - static void tunattach(dummy) void *dummy; { -#ifdef DEVFS - EVENTHANDLER_REGISTER(devfs_clone, tun_clone, 0, 1000); -#else + EVENTHANDLER_REGISTER(dev_clone, tun_clone, 0, 1000); cdevsw_add(&tun_cdevsw); -#endif } static void diff --git a/sys/sys/conf.h b/sys/sys/conf.h index e68c0ea..28fbf03 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -45,6 +45,7 @@ #define _SYS_CONF_H_ #include +#include #define SPECNAMELEN 15 @@ -135,10 +136,6 @@ typedef int l_rint_t __P((int c, struct tty *tp)); typedef int l_start_t __P((struct tty *tp)); typedef int l_modem_t __P((struct tty *tp, int flag)); -/* This is type of the function DEVFS uses to hook into the kernel with */ -typedef void devfs_create_t __P((dev_t dev)); -typedef void devfs_remove_t __P((dev_t dev)); - /* * XXX: The dummy argument can be used to do what strategy1() never * did anywhere: Create a per device flag to lock the device during @@ -299,7 +296,13 @@ int lminor __P((dev_t dev)); void setconf __P((void)); dev_t getdiskbyname(char *name); +/* This is type of the function DEVFS uses to hook into the kernel with */ +typedef void devfs_create_t __P((dev_t dev)); +typedef void devfs_destroy_t __P((dev_t dev)); + extern devfs_create_t *devfs_create_hook; +extern devfs_destroy_t *devfs_destroy_hook; +extern int devfs_present; /* * XXX: This included for when DEVFS resurfaces @@ -316,6 +319,10 @@ extern devfs_create_t *devfs_create_hook; #define GID_GAMES 13 #define GID_DIALER 68 +typedef void (*dev_clone_fn) __P((void *arg, char *name, int namelen, dev_t *result)); + +int dev_stdclone __P((char *name, char **namep, char *stem, int *unit)); +EVENTHANDLER_DECLARE(dev_clone, dev_clone_fn); #endif /* _KERNEL */ #endif /* !_SYS_CONF_H_ */ diff --git a/sys/sys/diskslice.h b/sys/sys/diskslice.h index 7eb3ca9..f4289ce 100644 --- a/sys/sys/diskslice.h +++ b/sys/sys/diskslice.h @@ -50,15 +50,6 @@ struct diskslice { u_char ds_name[16]; /* slice name */ #endif struct disklabel *ds_label; /* BSD label, if any */ - void *ds_dev; /* devfs token for raw whole slice */ -#ifdef MAXPARTITIONS /* XXX don't depend on disklabel.h */ -#if MAXPARTITIONS != 8 /* but check consistency if possible */ -#error "inconsistent MAXPARTITIONS" -#endif -#else -#define MAXPARTITIONS 8 -#endif - void *ds_devs[MAXPARTITIONS]; /* XXX s.b. in label */ u_char ds_openmask; /* devs open */ u_char ds_wlabel; /* nonzero if label is writable */ }; diff --git a/sys/sys/linedisc.h b/sys/sys/linedisc.h index e68c0ea..28fbf03 100644 --- a/sys/sys/linedisc.h +++ b/sys/sys/linedisc.h @@ -45,6 +45,7 @@ #define _SYS_CONF_H_ #include +#include #define SPECNAMELEN 15 @@ -135,10 +136,6 @@ typedef int l_rint_t __P((int c, struct tty *tp)); typedef int l_start_t __P((struct tty *tp)); typedef int l_modem_t __P((struct tty *tp, int flag)); -/* This is type of the function DEVFS uses to hook into the kernel with */ -typedef void devfs_create_t __P((dev_t dev)); -typedef void devfs_remove_t __P((dev_t dev)); - /* * XXX: The dummy argument can be used to do what strategy1() never * did anywhere: Create a per device flag to lock the device during @@ -299,7 +296,13 @@ int lminor __P((dev_t dev)); void setconf __P((void)); dev_t getdiskbyname(char *name); +/* This is type of the function DEVFS uses to hook into the kernel with */ +typedef void devfs_create_t __P((dev_t dev)); +typedef void devfs_destroy_t __P((dev_t dev)); + extern devfs_create_t *devfs_create_hook; +extern devfs_destroy_t *devfs_destroy_hook; +extern int devfs_present; /* * XXX: This included for when DEVFS resurfaces @@ -316,6 +319,10 @@ extern devfs_create_t *devfs_create_hook; #define GID_GAMES 13 #define GID_DIALER 68 +typedef void (*dev_clone_fn) __P((void *arg, char *name, int namelen, dev_t *result)); + +int dev_stdclone __P((char *name, char **namep, char *stem, int *unit)); +EVENTHANDLER_DECLARE(dev_clone, dev_clone_fn); #endif /* _KERNEL */ #endif /* !_SYS_CONF_H_ */ -- cgit v1.1