diff options
author | shafeeq <shafeeq@FreeBSD.org> | 2001-06-05 19:45:16 +0000 |
---|---|---|
committer | shafeeq <shafeeq@FreeBSD.org> | 2001-06-05 19:45:16 +0000 |
commit | 8c780c8d9a2997c3bb4f2f77173b0af33cefeb75 (patch) | |
tree | 504087e00fc3f7480498bfa4dda482a3ea9ae5d3 /sys/fs/coda/coda_fbsd.c | |
parent | d49557ff78855fead024735de7e0815a7d22443d (diff) | |
download | FreeBSD-src-8c780c8d9a2997c3bb4f2f77173b0af33cefeb75.zip FreeBSD-src-8c780c8d9a2997c3bb4f2f77173b0af33cefeb75.tar.gz |
Now works again and as a module and with devfs.
Used the bpf & tun drivers as examples as to what is necessary for devfs.
Diffstat (limited to 'sys/fs/coda/coda_fbsd.c')
-rw-r--r-- | sys/fs/coda/coda_fbsd.c | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/sys/fs/coda/coda_fbsd.c b/sys/fs/coda/coda_fbsd.c index 629ead4..438260c 100644 --- a/sys/fs/coda/coda_fbsd.c +++ b/sys/fs/coda/coda_fbsd.c @@ -90,7 +90,6 @@ codadev_modevent(module_t mod, int type, void *data) switch (type) { case MOD_LOAD: - cdevsw_add(&codadevsw); break; case MOD_UNLOAD: break; @@ -173,3 +172,54 @@ printf("error = %d\n", error); } #endif } + + +/* for DEVFS, using bpf & tun drivers as examples*/ +static void coda_fbsd_drvinit __P((void *unused)); +static void coda_fbsd_drvuninit __P((void *unused)); +static void coda_fbsd_clone __P((void *arg, char *name, int namelen, dev_t *dev)); + +static void coda_fbsd_clone(arg, name, namelen, dev) + void *arg; + char *name; + int namelen; + dev_t *dev; +{ + int u; + + if (*dev != NODEV) + return; + if (dev_stdclone(name,NULL,"cfs",&u) != 1) + return; + + *dev = make_dev(&codadevsw,unit2minor(u),UID_ROOT,GID_WHEEL,0600,"cfs%d",u); + coda_mnttbl[unit2minor(u)].dev = *dev; + +} + +static void coda_fbsd_drvinit(unused) + void *unused; +{ + int i; + + EVENTHANDLER_REGISTER(dev_clone,coda_fbsd_clone,0,1000); + cdevsw_add(&codadevsw); + for(i=0;i<NVCODA;i++) + coda_mnttbl[i].dev = NULL; +} + +static void coda_fbsd_drvuninit(unused) + void *unused; +{ + int i; + + EVENTHANDLER_DEREGISTER(dev_clone,NULL); + for(i=0;i<NVCODA;i++) + if(coda_mnttbl[i].dev) + destroy_dev(coda_mnttbl[i].dev); + cdevsw_remove(&codadevsw); +} + +SYSINIT(coda_fbsd_dev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+VC_DEV_NO,coda_fbsd_drvinit,NULL); + +SYSUNINIT(coda_fbsd_dev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+VC_DEV_NO,coda_fbsd_drvuninit,NULL); |