Module Name: src Committed By: mbalmer Date: Fri Aug 12 08:00:53 UTC 2011
Modified Files: src/distrib/sets/lists/modules: md.evbppc mi src/sys/dev/gpio: gpio.c gpiosim.c gpiovar.h src/sys/modules: Makefile Added Files: src/sys/modules/gpio: Makefile gpio.ioconf src/sys/modules/gpiosim: Makefile Log Message: gpio(4) and gpiosim(4) can now be built and used as modules. While here, make some functions static. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/distrib/sets/lists/modules/md.evbppc cvs rdiff -u -r1.30 -r1.31 src/distrib/sets/lists/modules/mi cvs rdiff -u -r1.34 -r1.35 src/sys/dev/gpio/gpio.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/gpio/gpiosim.c cvs rdiff -u -r1.10 -r1.11 src/sys/dev/gpio/gpiovar.h cvs rdiff -u -r1.88 -r1.89 src/sys/modules/Makefile cvs rdiff -u -r0 -r1.1 src/sys/modules/gpio/Makefile \ src/sys/modules/gpio/gpio.ioconf cvs rdiff -u -r0 -r1.1 src/sys/modules/gpiosim/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/modules/md.evbppc diff -u src/distrib/sets/lists/modules/md.evbppc:1.8 src/distrib/sets/lists/modules/md.evbppc:1.9 --- src/distrib/sets/lists/modules/md.evbppc:1.8 Thu Aug 11 12:03:58 2011 +++ src/distrib/sets/lists/modules/md.evbppc Fri Aug 12 08:00:52 2011 @@ -1,4 +1,4 @@ -# $NetBSD: md.evbppc,v 1.8 2011/08/11 12:03:58 mbalmer Exp $ +# $NetBSD: md.evbppc,v 1.9 2011/08/12 08:00:52 mbalmer Exp $ ./stand/powerpc-4xx base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@ base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules base-kernel-modules kmod @@ -54,6 +54,10 @@ ./stand/powerpc-4xx/@OSRELEASE@/modules/flash/flash.kmod base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules/fss base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules/fss/fss.kmod base-kernel-modules kmod +./stand/powerpc-4xx/@OSRELEASE@/modules/gpio base-kernel-modules kmod +./stand/powerpc-4xx/@OSRELEASE@/modules/gpio/gpio.kmod base-kernel-modules kmod +./stand/powerpc-4xx/@OSRELEASE@/modules/gpiosim base-kernel-modules kmod +./stand/powerpc-4xx/@OSRELEASE@/modules/gpiosim/gpiosim.kmod base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules/hfs base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules/hfs/hfs.kmod base-kernel-modules kmod ./stand/powerpc-4xx/@OSRELEASE@/modules/kernfs base-kernel-modules kmod @@ -203,6 +207,10 @@ ./stand/powerpc-booke/@OSRELEASE@/modules/flash/flash.kmod base-kernel-modules kmod ./stand/powerpc-booke/@OSRELEASE@/modules/fss base-kernel-modules kmod ./stand/powerpc-booke/@OSRELEASE@/modules/fss/fss.kmod base-kernel-modules kmod +./stand/powerpc-booke/@OSRELEASE@/modules/gpio base-kernel-modules kmod +./stand/powerpc-booke/@OSRELEASE@/modules/gpio/gpio.kmod base-kernel-modules kmod +./stand/powerpc-booke/@OSRELEASE@/modules/gpiosim base-kernel-modules kmod +./stand/powerpc-booke/@OSRELEASE@/modules/gpiosim/gpiosim.kmod base-kernel-modules kmod ./stand/powerpc-booke/@OSRELEASE@/modules/hfs base-kernel-modules kmod ./stand/powerpc-booke/@OSRELEASE@/modules/hfs/hfs.kmod base-kernel-modules kmod ./stand/powerpc-booke/@OSRELEASE@/modules/kernfs base-kernel-modules kmod Index: src/distrib/sets/lists/modules/mi diff -u src/distrib/sets/lists/modules/mi:1.30 src/distrib/sets/lists/modules/mi:1.31 --- src/distrib/sets/lists/modules/mi:1.30 Thu Aug 11 12:03:58 2011 +++ src/distrib/sets/lists/modules/mi Fri Aug 12 08:00:52 2011 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.30 2011/08/11 12:03:58 mbalmer Exp $ +# $NetBSD: mi,v 1.31 2011/08/12 08:00:52 mbalmer Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -61,6 +61,10 @@ ./@MODULEDIR@/flash/flash.kmod base-kernel-modules kmod ./@MODULEDIR@/fss base-kernel-modules kmod ./@MODULEDIR@/fss/fss.kmod base-kernel-modules kmod +./@MODULEDIR@/gpio base-kernel-modules kmod +./@MODULEDIR@/gpio/gpio.kmod base-kernel-modules kmod +./@MODULEDIR@/gpiosim base-kernel-modules kmod +./@MODULEDIR@/gpiosim/gpiosim.kmod base-kernel-modules kmod ./@MODULEDIR@/hfs base-kernel-modules kmod ./@MODULEDIR@/hfs/hfs.kmod base-kernel-modules kmod ./@MODULEDIR@/kernfs base-kernel-modules kmod Index: src/sys/dev/gpio/gpio.c diff -u src/sys/dev/gpio/gpio.c:1.34 src/sys/dev/gpio/gpio.c:1.35 --- src/sys/dev/gpio/gpio.c:1.34 Thu Jun 9 14:46:06 2011 +++ src/sys/dev/gpio/gpio.c Fri Aug 12 08:00:52 2011 @@ -1,8 +1,8 @@ -/* $NetBSD: gpio.c,v 1.34 2011/06/09 14:46:06 joerg Exp $ */ +/* $NetBSD: gpio.c,v 1.35 2011/08/12 08:00:52 mbalmer Exp $ */ /* $OpenBSD: gpio.c,v 1.6 2006/01/14 12:33:49 grange Exp $ */ /* - * Copyright (c) 2008, 2009, 2010 Marc Balmer <m...@msys.ch> + * Copyright (c) 2008, 2009, 2010, 2011 Marc Balmer <m...@msys.ch> * Copyright (c) 2004, 2006 Alexander Yurchenko <gra...@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.34 2011/06/09 14:46:06 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.35 2011/08/12 08:00:52 mbalmer Exp $"); /* * General Purpose Input/Output framework. @@ -36,7 +36,9 @@ #include <sys/kmem.h> #include <sys/queue.h> #include <sys/kauth.h> - +#ifdef _MODULE +#include <sys/module.h> +#endif #include <dev/gpio/gpiovar.h> #include "locators.h" @@ -61,19 +63,20 @@ LIST_HEAD(, gpio_name) sc_names; /* named pins */ }; -int gpio_match(device_t, cfdata_t, void *); -int gpio_submatch(device_t, cfdata_t, const int *, void *); -void gpio_attach(device_t, device_t, void *); -int gpio_rescan(device_t, const char *, const int *); -void gpio_childdetached(device_t, device_t); -bool gpio_resume(device_t, const pmf_qual_t *); -int gpio_detach(device_t, int); -int gpio_search(device_t, cfdata_t, const int *, void *); -int gpio_print(void *, const char *); -int gpio_pinbyname(struct gpio_softc *, char *); +static int gpio_match(device_t, cfdata_t, void *); +int gpio_submatch(device_t, cfdata_t, const int *, void *); +static void gpio_attach(device_t, device_t, void *); +static int gpio_rescan(device_t, const char *, const int *); +static void gpio_childdetached(device_t, device_t); +static bool gpio_resume(device_t, const pmf_qual_t *); +static int gpio_detach(device_t, int); +static int gpio_search(device_t, cfdata_t, const int *, void *); +static int gpio_print(void *, const char *); +static int gpio_pinbyname(struct gpio_softc *, char *); /* Old API */ -int gpio_ioctl_oapi(struct gpio_softc *, u_long, void *, int, kauth_cred_t); +static int gpio_ioctl_oapi(struct gpio_softc *, u_long, void *, int, + kauth_cred_t); CFATTACH_DECL3_NEW(gpio, sizeof(struct gpio_softc), gpio_match, gpio_attach, gpio_detach, NULL, gpio_rescan, @@ -90,7 +93,7 @@ extern struct cfdriver gpio_cd; -int +static int gpio_match(device_t parent, cfdata_t cf, void *aux) { return 1; @@ -107,7 +110,7 @@ return strcmp(ga->ga_dvname, cf->cf_name) == 0; } -bool +static bool gpio_resume(device_t self, const pmf_qual_t *qual) { struct gpio_softc *sc = device_private(self); @@ -120,13 +123,13 @@ return true; } -void +static void gpio_childdetached(device_t self, device_t child) { /* gpio(4) keeps no references to its children, so do nothing. */ } -int +static int gpio_rescan(device_t self, const char *ifattr, const int *locators) { struct gpio_softc *sc = device_private(self); @@ -136,7 +139,7 @@ return 0; } -void +static void gpio_attach(device_t parent, device_t self, void *aux) { struct gpio_softc *sc = device_private(self); @@ -159,7 +162,7 @@ gpio_rescan(self, "gpio", NULL); } -int +static int gpio_detach(device_t self, int flags) { int rc; @@ -182,7 +185,7 @@ return 0; } -int +static int gpio_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux) { struct gpio_attach_args ga; @@ -368,7 +371,7 @@ return 0; } -int +static int gpio_pinbyname(struct gpio_softc *sc, char *gp_name) { struct gpio_name *nm; @@ -405,7 +408,7 @@ device_xname(sc->sc_dev))); return EBUSY; } - + cred = kauth_cred_get(); switch (cmd) { @@ -548,7 +551,7 @@ if (kauth_authorize_device(cred, KAUTH_DEVICE_GPIO_PINSET, NULL, NULL, NULL, NULL)) return EPERM; - + attach = (struct gpio_attach *)data; LIST_FOREACH(gdev, &sc->sc_devs, sc_next) { if (strcmp(device_xname(gdev->sc_dev), @@ -632,7 +635,7 @@ return EINVAL; } else pin = set->gp_pin; - + if (pin < 0 || pin >= sc->sc_npins) return EINVAL; if (sc->sc_pins[pin].pin_mapped) @@ -657,7 +660,7 @@ return 0; } -int +static int gpio_ioctl_oapi(struct gpio_softc *sc, u_long cmd, void *data, int flag, kauth_cred_t cred) { @@ -774,3 +777,43 @@ } return 0; } + +#ifdef _MODULE +MODULE(MODULE_CLASS_DRIVER, gpio, NULL); + +#include "ioconf.c" + +static int +gpio_modcmd(modcmd_t cmd, void *opaque) +{ + devmajor_t cmajor = NODEVMAJOR, bmajor = NODEVMAJOR; + int error; + + switch (cmd) { + case MODULE_CMD_INIT: + error = config_init_component(cfdriver_ioconf_gpio, + cfattach_ioconf_gpio, cfdata_ioconf_gpio); + if (error) { + aprint_error("%s: unable to init component\n", + gpio_cd.cd_name); + return error; + } + error = devsw_attach(gpio_cd.cd_name, NULL, &bmajor, + &gpio_cdevsw, &cmajor); + if (error) { + aprint_error("%s: unable to register devsw\n", + gpio_cd.cd_name); + return config_fini_component(cfdriver_ioconf_gpio, + cfattach_ioconf_gpio, cfdata_ioconf_gpio); + } + return 0; + case MODULE_CMD_FINI: + config_fini_component(cfdriver_ioconf_gpio, + cfattach_ioconf_gpio, cfdata_ioconf_gpio); + devsw_detach(NULL, &gpio_cdevsw); + return 0; + default: + return ENOTTY; + } +} +#endif Index: src/sys/dev/gpio/gpiosim.c diff -u src/sys/dev/gpio/gpiosim.c:1.7 src/sys/dev/gpio/gpiosim.c:1.8 --- src/sys/dev/gpio/gpiosim.c:1.7 Sun Dec 6 22:33:44 2009 +++ src/sys/dev/gpio/gpiosim.c Fri Aug 12 08:00:52 2011 @@ -1,8 +1,8 @@ -/* $NetBSD: gpiosim.c,v 1.7 2009/12/06 22:33:44 dyoung Exp $ */ +/* $NetBSD: gpiosim.c,v 1.8 2011/08/12 08:00:52 mbalmer Exp $ */ /* $OpenBSD: gpiosim.c,v 1.1 2008/11/23 18:46:49 mbalmer Exp $ */ /* - * Copyright (c) 2007, 2008, 2009 Marc Balmer <m...@msys.ch> + * Copyright (c) 2007, 2008, 2009, 2010, 2011 Marc Balmer <m...@msys.ch> * All rights reserved. * * Permission to use, copy, modify, and distribute this software for any @@ -24,9 +24,11 @@ #include <sys/device.h> #include <sys/gpio.h> #include <sys/malloc.h> +#ifdef _MODULE +#include <sys/module.h> +#endif #include <sys/sysctl.h> #include <sys/ioccom.h> - #include <dev/gpio/gpiovar.h> #define GPIOSIM_NPINS 32 @@ -41,22 +43,22 @@ struct sysctllog *sc_log; }; -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_sysctl(SYSCTLFN_PROTO); - -int gpiosim_pin_read(void *, int); -void gpiosim_pin_write(void *, int, int); -void gpiosim_pin_ctl(void *, int, int); +static int gpiosim_match(device_t, cfdata_t, void *); +void gpiosimattach(int); +static void gpiosim_attach(device_t, device_t, void *); +static int gpiosim_detach(device_t, int); +static int gpiosim_sysctl(SYSCTLFN_PROTO); + +static int gpiosim_pin_read(void *, int); +static void gpiosim_pin_write(void *, int, int); +static void gpiosim_pin_ctl(void *, int, int); CFATTACH_DECL_NEW(gpiosim, sizeof(struct gpiosim_softc), gpiosim_match, gpiosim_attach, gpiosim_detach, NULL); extern struct cfdriver gpiosim_cd; -int +static int gpiosim_match(device_t parent, cfdata_t match, void *aux) { return 1; @@ -82,7 +84,7 @@ } } -void +static void gpiosim_attach(device_t parent, device_t self, void *aux) { struct gpiosim_softc *sc = device_private(self); @@ -148,7 +150,7 @@ sc->sc_gdev = config_found_ia(self, "gpiobus", &gba, gpiobus_print); } -int +static int gpiosim_detach(device_t self, int flags) { struct gpiosim_softc *sc = device_private(self); @@ -165,7 +167,7 @@ return 0; } -int +static int gpiosim_sysctl(SYSCTLFN_ARGS) { struct sysctlnode node; @@ -186,7 +188,7 @@ return 0; } -int +static int gpiosim_pin_read(void *arg, int pin) { struct gpiosim_softc *sc = arg; @@ -197,7 +199,7 @@ return GPIO_PIN_LOW; } -void +static void gpiosim_pin_write(void *arg, int pin, int value) { struct gpiosim_softc *sc = arg; @@ -208,10 +210,87 @@ sc->sc_state |= (1 << pin); } -void +static void gpiosim_pin_ctl(void *arg, int pin, int flags) { struct gpiosim_softc *sc = arg; sc->sc_gpio_pins[pin].pin_flags = flags; } + +#ifdef _MODULE +MODULE(MODULE_CLASS_DRIVER, gpiosim, "gpio"); + +static const struct cfiattrdata gpiobus_iattrdata = { + "gpiobus", 0, { { NULL, NULL, 0 },} +}; +static const struct cfiattrdata *const gpiosim_attrs[] = { + &gpiobus_iattrdata, NULL +}; +CFDRIVER_DECL(gpiosim, DV_DULL, gpiosim_attrs); +extern struct cfattach gpiosim_ca; +static int gpiosimloc[] = { + -1, + -1, + -1 +}; +static struct cfdata gpiosim_cfdata[] = { + { + .cf_name = "gpiosim", + .cf_atname = "gpiosim", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = gpiosimloc, + .cf_flags = 0, + .cf_pspec = NULL, + }, + { NULL } +}; + +static int +gpiosim_modcmd(modcmd_t cmd, void *opaque) +{ + int error = 0; + + switch (cmd) { + case MODULE_CMD_INIT: + error = config_cfdriver_attach(&gpiosim_cd); + if (error) + return error; + + error = config_cfattach_attach(gpiosim_cd.cd_name, + &gpiosim_ca); + if (error) { + config_cfdriver_detach(&gpiosim_cd); + aprint_error("%s: unable to register cfattach\n", + gpiosim_cd.cd_name); + return error; + } + + error = config_cfdata_attach(gpiosim_cfdata, 1); + if (error) { + config_cfattach_detach(gpiosim_cd.cd_name, + &gpiosim_ca); + config_cfdriver_detach(&gpiosim_cd); + aprint_error("%s: unable to register cfdata\n", + gpiosim_cd.cd_name); + return error; + } + (void)config_attach_pseudo(gpiosim_cfdata); + return 0; + case MODULE_CMD_FINI: + error = config_cfdata_detach(gpiosim_cfdata); + if (error) + return error; + + config_cfattach_detach(gpiosim_cd.cd_name, &gpiosim_ca); + config_cfdriver_detach(&gpiosim_cd); + return 0; + case MODULE_CMD_AUTOUNLOAD: + /* no auto-unload */ + return EBUSY; + default: + return ENOTTY; + } +} +#endif Index: src/sys/dev/gpio/gpiovar.h diff -u src/sys/dev/gpio/gpiovar.h:1.10 src/sys/dev/gpio/gpiovar.h:1.11 --- src/sys/dev/gpio/gpiovar.h:1.10 Fri Aug 21 12:53:42 2009 +++ src/sys/dev/gpio/gpiovar.h Fri Aug 12 08:00:52 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: gpiovar.h,v 1.10 2009/08/21 12:53:42 mbalmer Exp $ */ +/* $NetBSD: gpiovar.h,v 1.11 2011/08/12 08:00:52 mbalmer Exp $ */ /* $OpenBSD: gpiovar.h,v 1.3 2006/01/14 12:33:49 grange Exp $ */ /* @@ -65,16 +65,16 @@ /* Attach devices connected to the GPIO pins */ struct gpio_attach_args { - void * ga_gpio; - int ga_offset; - u_int32_t ga_mask; - char *ga_dvname; + void *ga_gpio; + int ga_offset; + u_int32_t ga_mask; + char *ga_dvname; }; /* GPIO pin map */ struct gpio_pinmap { - int * pm_map; /* pin map */ - int pm_size; /* map size */ + int *pm_map; /* pin map */ + int pm_size; /* map size */ }; struct gpio_dev { @@ -95,7 +95,6 @@ void gpio_pin_write(void *, struct gpio_pinmap *, int, int); void gpio_pin_ctl(void *, struct gpio_pinmap *, int, int); int gpio_pin_caps(void *, struct gpio_pinmap *, int); - int gpio_npins(u_int32_t); #endif /* !_DEV_GPIO_GPIOVAR_H_ */ Index: src/sys/modules/Makefile diff -u src/sys/modules/Makefile:1.88 src/sys/modules/Makefile:1.89 --- src/sys/modules/Makefile:1.88 Thu Aug 11 12:03:06 2011 +++ src/sys/modules/Makefile Fri Aug 12 08:00:53 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.88 2011/08/11 12:03:06 mbalmer Exp $ +# $NetBSD: Makefile,v 1.89 2011/08/12 08:00:53 mbalmer Exp $ .include <bsd.own.mk> @@ -23,6 +23,8 @@ SUBDIR+= filecore SUBDIR+= flash SUBDIR+= fss +SUBDIR+= gpio +SUBDIR+= gpiosim SUBDIR+= hfs SUBDIR+= kernfs SUBDIR+= ksem Added files: Index: src/sys/modules/gpio/Makefile diff -u /dev/null src/sys/modules/gpio/Makefile:1.1 --- /dev/null Fri Aug 12 08:00:53 2011 +++ src/sys/modules/gpio/Makefile Fri Aug 12 08:00:53 2011 @@ -0,0 +1,13 @@ +# $NetBSD: Makefile,v 1.1 2011/08/12 08:00:53 mbalmer Exp $ + +.include "../Makefile.inc" + +.PATH: ${S}/dev/gpio + +KMOD= gpio +IOCONF= gpio.ioconf +SRCS= gpio.c + +CPPFLAGS+= -I${S}/gpio + +.include <bsd.kmodule.mk> Index: src/sys/modules/gpio/gpio.ioconf diff -u /dev/null src/sys/modules/gpio/gpio.ioconf:1.1 --- /dev/null Fri Aug 12 08:00:53 2011 +++ src/sys/modules/gpio/gpio.ioconf Fri Aug 12 08:00:53 2011 @@ -0,0 +1,8 @@ +# $NetBSD: gpio.ioconf,v 1.1 2011/08/12 08:00:53 mbalmer Exp $ + +ioconf gpio + +include "conf/files" + +pseudo-root gpiobus* +gpio* at gpiobus? Index: src/sys/modules/gpiosim/Makefile diff -u /dev/null src/sys/modules/gpiosim/Makefile:1.1 --- /dev/null Fri Aug 12 08:00:53 2011 +++ src/sys/modules/gpiosim/Makefile Fri Aug 12 08:00:53 2011 @@ -0,0 +1,12 @@ +# $NetBSD: Makefile,v 1.1 2011/08/12 08:00:53 mbalmer Exp $ + +.include "../Makefile.inc" + +.PATH: ${S}/dev/gpio + +KMOD= gpiosim +SRCS= gpiosim.c + +CPPFLAGS+= -I${S}/gpio + +.include <bsd.kmodule.mk>