summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_ccd.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2000-08-29 16:29:02 +0000
committerphk <phk@FreeBSD.org>2000-08-29 16:29:02 +0000
commit8aa30a15ca53110e690d5194c42f6c92b8dae191 (patch)
tree4125b2af7d47f9d0d1028a1a243a63e88a496565 /sys/geom/geom_ccd.c
parentdb66cff047ea0c20d9b27c4e0511ee15a0fba551 (diff)
downloadFreeBSD-src-8aa30a15ca53110e690d5194c42f6c92b8dae191.zip
FreeBSD-src-8aa30a15ca53110e690d5194c42f6c92b8dae191.tar.gz
Give ccd a cloning function.
Diffstat (limited to 'sys/geom/geom_ccd.c')
-rw-r--r--sys/geom/geom_ccd.c40
1 files changed, 32 insertions, 8 deletions
diff --git a/sys/geom/geom_ccd.c b/sys/geom/geom_ccd.c
index 5a478f7..0dd13fb 100644
--- a/sys/geom/geom_ccd.c
+++ b/sys/geom/geom_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: */
OpenPOWER on IntegriCloud