diff --git a/sys/alpha/alpha/promcons.c b/sys/alpha/alpha/promcons.c index 649df02f7e7..4a54311837d 100644 --- a/sys/alpha/alpha/promcons.c +++ b/sys/alpha/alpha/promcons.c @@ -242,6 +242,16 @@ promtimeout(v) promtimeouthandle = timeout(promtimeout, tp, polltime); } -DEV_MODULE(prom, CDEV_MAJOR, NOMAJ, prom_cdevsw, 0, 0); +static int +prom_modevent(module_t mod, int type, void *data) +{ + if (type == MOD_LOAD) { + cdevsw_add(&prom_cdevsw); + return(0); + } + return(EOPNOTSUPP); +} + +DEV_MODULE(prom, prom_modevent, 0); #endif /* _PMAP_MAY_USE_PROM_CONSOLE */ diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c index c4cc2bd10d9..75ee082fba2 100644 --- a/sys/dev/ccd/ccd.c +++ b/sys/dev/ccd/ccd.c @@ -322,6 +322,7 @@ ccdattach() bzero(ccd_softc, num * sizeof(struct ccd_softc)); bzero(ccddevs, num * sizeof(struct ccddevice)); + cdevsw_add(&ccd_cdevsw); /* XXX: is this necessary? */ for (i = 0; i < numccd; ++i) ccddevs[i].ccd_dk = -1; @@ -351,7 +352,7 @@ ccd_modevent(mod, type, data) return (error); } -DEV_MODULE(ccd, CDEV_MAJOR, BDEV_MAJOR, ccd_cdevsw, ccd_modevent, NULL); +DEV_MODULE(ccd, ccd_modevent, NULL); static int ccdinit(ccd, cpaths, p) diff --git a/sys/dev/vn/vn.c b/sys/dev/vn/vn.c index dab0ca16c34..0730696ad82 100644 --- a/sys/dev/vn/vn.c +++ b/sys/dev/vn/vn.c @@ -743,6 +743,7 @@ vn_modevent(module_t mod, int type, void *data) switch (type) { case MOD_LOAD: + cdevsw_add(&vn_cdevsw); break; case MOD_UNLOAD: @@ -764,4 +765,4 @@ vn_modevent(module_t mod, int type, void *data) return 0; } -DEV_MODULE(vn, CDEV_MAJOR, BDEV_MAJOR, vn_cdevsw, vn_modevent, 0); +DEV_MODULE(vn, vn_modevent, 0); diff --git a/sys/geom/geom_ccd.c b/sys/geom/geom_ccd.c index c4cc2bd10d9..75ee082fba2 100644 --- a/sys/geom/geom_ccd.c +++ b/sys/geom/geom_ccd.c @@ -322,6 +322,7 @@ ccdattach() bzero(ccd_softc, num * sizeof(struct ccd_softc)); bzero(ccddevs, num * sizeof(struct ccddevice)); + cdevsw_add(&ccd_cdevsw); /* XXX: is this necessary? */ for (i = 0; i < numccd; ++i) ccddevs[i].ccd_dk = -1; @@ -351,7 +352,7 @@ ccd_modevent(mod, type, data) return (error); } -DEV_MODULE(ccd, CDEV_MAJOR, BDEV_MAJOR, ccd_cdevsw, ccd_modevent, NULL); +DEV_MODULE(ccd, ccd_modevent, NULL); static int ccdinit(ccd, cpaths, p) diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index ed3a0b5960b..a5229ec7b49 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -178,23 +178,6 @@ devsw_module_handler(module_t mod, int what, void* arg) struct devsw_module_data* data = (struct devsw_module_data*) arg; int error = 0; - switch (what) { - case MOD_LOAD: - error = cdevsw_add(data->cdevsw); - if (!error && data->chainevh) - error = data->chainevh(mod, what, data->chainarg); - return error; - - case MOD_UNLOAD: - if (data->chainevh) { - error = data->chainevh(mod, what, data->chainarg); - if (error) - return error; - } - cdevsw_remove(data->cdevsw); - return error; - } - if (data->chainevh) return data->chainevh(mod, what, data->chainarg); else diff --git a/sys/sys/conf.h b/sys/sys/conf.h index 7c1485e2b6b..475f97b5a91 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -243,13 +243,12 @@ struct module; struct devsw_module_data { int (*chainevh)(struct module *, int, void *); /* next handler */ void *chainarg; /* arg for next event handler */ - struct cdevsw *cdevsw; /* device functions */ /* Do not initialize fields hereafter */ }; -#define DEV_MODULE(name, cmaj, bmaj, devsw, evh, arg) \ +#define DEV_MODULE(name, evh, arg) \ static struct devsw_module_data name##_devsw_mod = { \ - evh, arg, &devsw \ + evh, arg, \ }; \ \ static moduledata_t name##_mod = { \ @@ -257,7 +256,7 @@ static moduledata_t name##_mod = { \ devsw_module_handler, \ &name##_devsw_mod \ }; \ -DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+cmaj*256+bmaj) +DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE) int cdevsw_add __P((struct cdevsw *new)); diff --git a/sys/sys/linedisc.h b/sys/sys/linedisc.h index 7c1485e2b6b..475f97b5a91 100644 --- a/sys/sys/linedisc.h +++ b/sys/sys/linedisc.h @@ -243,13 +243,12 @@ struct module; struct devsw_module_data { int (*chainevh)(struct module *, int, void *); /* next handler */ void *chainarg; /* arg for next event handler */ - struct cdevsw *cdevsw; /* device functions */ /* Do not initialize fields hereafter */ }; -#define DEV_MODULE(name, cmaj, bmaj, devsw, evh, arg) \ +#define DEV_MODULE(name, evh, arg) \ static struct devsw_module_data name##_devsw_mod = { \ - evh, arg, &devsw \ + evh, arg, \ }; \ \ static moduledata_t name##_mod = { \ @@ -257,7 +256,7 @@ static moduledata_t name##_mod = { \ devsw_module_handler, \ &name##_devsw_mod \ }; \ -DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+cmaj*256+bmaj) +DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE) int cdevsw_add __P((struct cdevsw *new));