diff options
author | phk <phk@FreeBSD.org> | 2000-08-29 16:29:02 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2000-08-29 16:29:02 +0000 |
commit | 8aa30a15ca53110e690d5194c42f6c92b8dae191 (patch) | |
tree | 4125b2af7d47f9d0d1028a1a243a63e88a496565 /sys/dev/ccd | |
parent | db66cff047ea0c20d9b27c4e0511ee15a0fba551 (diff) | |
download | FreeBSD-src-8aa30a15ca53110e690d5194c42f6c92b8dae191.zip FreeBSD-src-8aa30a15ca53110e690d5194c42f6c92b8dae191.tar.gz |
Give ccd a cloning function.
Diffstat (limited to 'sys/dev/ccd')
-rw-r--r-- | sys/dev/ccd/ccd.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c index 5a478f7..0dd13fb 100644 --- a/sys/dev/ccd/ccd.c +++ b/sys/dev/ccd/ccd.c @@ -87,6 +87,7 @@ * Moffett Field, CA 94035 */ +#include "opt_devfs.h" #include "ccd.h" #include <sys/param.h> @@ -108,6 +109,10 @@ #include <sys/ccdvar.h> +#ifdef DEVFS +#include <sys/eventhandler.h> +#include <fs/devfs/devfs.h> +#endif #if defined(CCDDEBUG) && !defined(DEBUG) #define DEBUG @@ -284,6 +289,29 @@ putccdbuf(struct ccdbuf *cbp) #define CCD_OFFSET 16 #endif +#ifdef DEVFS +static void +ccd_clone(void *arg, char *name, int namelen, dev_t *dev) +{ + int i, u; + char *s; + + if (*dev != NODEV) + return; + i = devfs_stdclone(name, &s, "ccd", &u); + if (i != 2) + return; + if (u >= numccd) + return; + if (*s <= 'a' || *s >= 'h') + return; + if (s[1] != '\0') + return; + *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 * to do is allocate enough space for devices to be configured later, and @@ -318,8 +346,11 @@ ccdattach() cdevsw_add(&ccd_cdevsw); /* XXX: is this necessary? */ - for (i = 0; i < numccd; ++i) + for (i = 0; i < numccd; ++i) ccddevs[i].ccd_dk = -1; +#ifdef DEVFS + EVENTHANDLER_REGISTER(devfs_clone, ccd_clone, 0, 1000); +#endif } static int @@ -1704,10 +1735,3 @@ printiinfo(ii) } } #endif - - -/* Local Variables: */ -/* c-argdecl-indent: 8 */ -/* c-continued-statement-offset: 8 */ -/* c-indent-level: 8 */ -/* End: */ |