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 <[email protected]>
+ * Copyright (c) 2008, 2009, 2010, 2011 Marc Balmer <[email protected]>
* Copyright (c) 2004, 2006 Alexander Yurchenko <[email protected]>
*
* 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 <[email protected]>
+ * Copyright (c) 2007, 2008, 2009, 2010, 2011 Marc Balmer <[email protected]>
* 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>