From 9d8b69b23a642eea39e8297ff152c1649e142a1e Mon Sep 17 00:00:00 2001 From: mbalmer Date: Mon, 27 Jul 2009 17:40:57 +0000 Subject: [PATCH] Do not attach gpiosim(4) at root, but make it a pseudo device. With help from Matthias Drochner, thanks! --- sys/dev/gpio/files.gpio | 7 +++---- sys/dev/gpio/gpiosim.c | 27 +++++++++++++++++++++++++-- sys/kern/init_main.c | 8 ++------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/sys/dev/gpio/files.gpio b/sys/dev/gpio/files.gpio index 3c7cd20d7e7c..4f055757fca8 100644 --- a/sys/dev/gpio/files.gpio +++ b/sys/dev/gpio/files.gpio @@ -1,4 +1,4 @@ -# $NetBSD: files.gpio,v 1.5 2009/07/25 16:17:10 mbalmer Exp $ +# $NetBSD: files.gpio,v 1.6 2009/07/27 17:40:57 mbalmer Exp $ define gpio {[offset = -1], [mask = 0]} @@ -7,9 +7,8 @@ attach gpio at gpiobus file dev/gpio/gpio.c gpio needs-flag # GPIO simulator -device gpiosim: gpiobus -attach gpiosim at root -file dev/gpio/gpiosim.c gpiosim needs-flag +defpseudodev gpiosim: gpiobus +file dev/gpio/gpiosim.c gpiosim # 1-Wire bus bit-banging device gpioow: onewirebus, onewire_bitbang diff --git a/sys/dev/gpio/gpiosim.c b/sys/dev/gpio/gpiosim.c index e354c77f37c1..0706795331f6 100644 --- a/sys/dev/gpio/gpiosim.c +++ b/sys/dev/gpio/gpiosim.c @@ -1,4 +1,4 @@ -/* $NetBSD: gpiosim.c,v 1.2 2009/07/26 13:45:20 mbalmer Exp $ */ +/* $NetBSD: gpiosim.c,v 1.3 2009/07/27 17:40:58 mbalmer Exp $ */ /* $OpenBSD: gpiosim.c,v 1.1 2008/11/23 18:46:49 mbalmer Exp $ */ /* @@ -41,6 +41,7 @@ struct gpiosim_softc { }; int gpiosim_match(device_t, cfdata_t, void *); +void gpiosimattach(int); void gpiosim_attach(device_t, device_t, void *); int gpiosim_detach(device_t, int); int gpiosim_activate(device_t, enum devact); @@ -61,6 +62,26 @@ gpiosim_match(device_t parent, cfdata_t match, void *aux) return 1; } +void +gpiosimattach(int num) +{ + cfdata_t cf; + int n, err; + + err = config_cfattach_attach(gpiosim_cd.cd_name, &gpiosim_ca); + if (err) + printf("%s: unable to register cfattach\n", gpiosim_cd.cd_name); + + for (n = 0; n < num; n++) { + cf = malloc(sizeof(*cf), M_DEVBUF, M_WAITOK); + cf->cf_name = "gpiosim"; + cf->cf_atname = "gpiosim"; + cf->cf_unit = n; + cf->cf_fstate = FSTATE_NOTFOUND; + config_attach_pseudo(cf); + } +} + void gpiosim_attach(device_t parent, device_t self, void *aux) { @@ -70,6 +91,8 @@ gpiosim_attach(device_t parent, device_t self, void *aux) sc->sc_dev = self; + printf("%s", device_xname(sc->sc_dev)); + /* initialize pin array */ for (i = 0; i < GPIOSIM_NPINS; i++) { sc->sc_gpio_pins[i].pin_num = i; @@ -118,7 +141,7 @@ gpiosim_attach(device_t parent, device_t self, void *aux) gpiosim_sysctl, 0, sc, 0, CTL_CREATE, CTL_EOL); - printf("\n"); + printf(": simulating %d pins\n", GPIOSIM_NPINS); config_found_ia(self, "gpiobus", &gba, gpiobus_print); } diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 6ed9d45ee9dc..aa97eada9572 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -1,4 +1,4 @@ -/* $NetBSD: init_main.c,v 1.395 2009/07/25 16:23:39 mbalmer Exp $ */ +/* $NetBSD: init_main.c,v 1.396 2009/07/27 17:40:57 mbalmer Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.395 2009/07/25 16:23:39 mbalmer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.396 2009/07/27 17:40:57 mbalmer Exp $"); #include "opt_ddb.h" #include "opt_ipsec.h" @@ -119,7 +119,6 @@ __KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.395 2009/07/25 16:23:39 mbalmer Exp #include "sysmon_taskq.h" #include "sysmon_wdog.h" #include "veriexec.h" -#include "gpiosim.h" #include #include @@ -473,9 +472,6 @@ main(void) ssp_init(); configure2(); -#if NGPIOSIM > 0 - config_rootfound("gpiosim", NULL); -#endif /* Now timer is working. Enable preemption. */ kpreempt_enable();