Module Name:    src
Committed By:   mbalmer
Date:           Thu Aug 11 07:33:26 UTC 2011

Modified Files:
        src/distrib/sets/lists/man: mi
        src/distrib/sets/lists/modules: mi
        src/share/man/man4: Makefile
        src/sys/dev/pci: files.pci
        src/sys/modules: Makefile
Added Files:
        src/share/man/man4: pwdog.4
        src/sys/dev/pci: pwdog.c
        src/sys/modules/pwdog: Makefile pwdog.ioconf

Log Message:
pwdog(4) is a device driver for QUANCOM Electronic PWDOG1 PCI
attached watchdog timers.


To generate a diff of this commit:
cvs rdiff -u -r1.1330 -r1.1331 src/distrib/sets/lists/man/mi
cvs rdiff -u -r1.26 -r1.27 src/distrib/sets/lists/modules/mi
cvs rdiff -u -r1.562 -r1.563 src/share/man/man4/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man4/pwdog.4
cvs rdiff -u -r1.343 -r1.344 src/sys/dev/pci/files.pci
cvs rdiff -u -r0 -r1.1 src/sys/dev/pci/pwdog.c
cvs rdiff -u -r1.86 -r1.87 src/sys/modules/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/modules/pwdog/Makefile \
    src/sys/modules/pwdog/pwdog.ioconf

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/man/mi
diff -u src/distrib/sets/lists/man/mi:1.1330 src/distrib/sets/lists/man/mi:1.1331
--- src/distrib/sets/lists/man/mi:1.1330	Thu Aug  4 21:59:35 2011
+++ src/distrib/sets/lists/man/mi	Thu Aug 11 07:33:25 2011
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1330 2011/08/04 21:59:35 riz Exp $
+# $NetBSD: mi,v 1.1331 2011/08/11 07:33:25 mbalmer Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -1418,6 +1418,7 @@
 ./usr/share/man/cat4/puc.0			man-sys-catman		.cat
 ./usr/share/man/cat4/pud.0			man-sys-catman		.cat
 ./usr/share/man/cat4/puffs.0			man-puffs-catman	.cat
+./usr/share/man/cat4/pwdog.0			man-sys-catman		.cat
 ./usr/share/man/cat4/px.0			man-sys-catman		.cat
 ./usr/share/man/cat4/pxg.0			man-sys-catman		.cat
 ./usr/share/man/cat4/qe.0			man-sys-catman		.cat
@@ -4158,6 +4159,7 @@
 ./usr/share/man/html4/puc.html			man-sys-htmlman		html
 ./usr/share/man/html4/pud.html			man-sys-htmlman		html
 ./usr/share/man/html4/puffs.html		man-sys-htmlman		html
+./usr/share/man/html4/pwdog.html		man-sys-htmlman		html
 ./usr/share/man/html4/px.html			man-sys-htmlman		html
 ./usr/share/man/html4/pxg.html			man-sys-htmlman		html
 ./usr/share/man/html4/qe.html			man-sys-htmlman		html
@@ -6803,6 +6805,7 @@
 ./usr/share/man/man4/puc.4			man-sys-man		.man
 ./usr/share/man/man4/pud.4			man-sys-man		.man
 ./usr/share/man/man4/puffs.4			man-sys-man		.man
+./usr/share/man/man4/pwdog.4			man-sys-man		.man
 ./usr/share/man/man4/px.4			man-sys-man		.man
 ./usr/share/man/man4/pxg.4			man-sys-man		.man
 ./usr/share/man/man4/qe.4			man-sys-man		.man

Index: src/distrib/sets/lists/modules/mi
diff -u src/distrib/sets/lists/modules/mi:1.26 src/distrib/sets/lists/modules/mi:1.27
--- src/distrib/sets/lists/modules/mi:1.26	Tue Aug  9 01:42:57 2011
+++ src/distrib/sets/lists/modules/mi	Thu Aug 11 07:33:25 2011
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.26 2011/08/09 01:42:57 jmcneill Exp $
+# $NetBSD: mi,v 1.27 2011/08/11 07:33:25 mbalmer Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -110,6 +110,8 @@
 ./@MODULEDIR@/puffs/puffs.kmod			base-kernel-modules	kmod
 ./@MODULEDIR@/putter				base-kernel-modules	kmod
 ./@MODULEDIR@/putter/putter.kmod		base-kernel-modules	kmod
+./@MODULEDIR@/pwdog				base-kernel-modules	kmod
+./@MODULEDIR@/pwdog/pwdog.kmod			base-kernel-modules	kmod
 ./@MODULEDIR@/scsiverbose			base-kernel-modules	kmod
 ./@MODULEDIR@/scsiverbose/scsiverbose.kmod	base-kernel-modules	kmod
 ./@MODULEDIR@/sdt				base-kernel-modules	kmod,dtrace

Index: src/share/man/man4/Makefile
diff -u src/share/man/man4/Makefile:1.562 src/share/man/man4/Makefile:1.563
--- src/share/man/man4/Makefile:1.562	Wed Jul 20 20:51:12 2011
+++ src/share/man/man4/Makefile	Thu Aug 11 07:33:25 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.562 2011/07/20 20:51:12 jakllsch Exp $
+#	$NetBSD: Makefile,v 1.563 2011/08/11 07:33:25 mbalmer Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/18/93
 
 MAN=	aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
@@ -45,7 +45,7 @@
 	pad.4 pas.4 pcdisplay.4 pcf8563rtc.4 pciide.4 pckbc.4 pckbd.4 pcn.4 \
 	pcppi.4 pcscp.4 pcweasel.4 pdcide.4 pdcsata.4 piixide.4 piixpcib.4 \
 	piixpm.4 pim.4 plip.4 pms.4 pmu.4 pnaphy.4 ppbus.4 ppp.4 pppoe.4 \
-	pseye.4 ptm.4 pty.4 puc.4 pud.4 puffs.4 px.4 pxg.4 \
+	pseye.4 ptm.4 pty.4 puc.4 pud.4 puffs.4 pwdog.4 px.4 pxg.4 \
 	qe.4 qec.4 qsphy.4 \
 	raid.4 ral.4 ray.4 rcons.4 rdcphy.4 re.4 rgephy.4 rlphy.4 \
 	rnd.4 route.4 rs5c372rtc.4 rtk.4 rtw.4 rum.4 \

Index: src/sys/dev/pci/files.pci
diff -u src/sys/dev/pci/files.pci:1.343 src/sys/dev/pci/files.pci:1.344
--- src/sys/dev/pci/files.pci:1.343	Thu Aug  4 14:43:55 2011
+++ src/sys/dev/pci/files.pci	Thu Aug 11 07:33:24 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.pci,v 1.343 2011/08/04 14:43:55 jakllsch Exp $
+#	$NetBSD: files.pci,v 1.344 2011/08/11 07:33:24 mbalmer Exp $
 #
 # Config file and device description for machine-independent PCI code.
 # Included by ports that need it.  Requires that the SCSI files be
@@ -1058,3 +1058,9 @@
 device	coram: dtvbus, i2cbus, i2cexec, mt2131, cx24227
 attach	coram at pci
 file	dev/pci/coram.c		coram
+
+# QUANCOM Electronic GmbH PWDOG1
+device	pwdog: sysmon_envsys
+attach	pwdog at pci
+file	dev/pci/pwdog.c		pwdog
+

Index: src/sys/modules/Makefile
diff -u src/sys/modules/Makefile:1.86 src/sys/modules/Makefile:1.87
--- src/sys/modules/Makefile:1.86	Tue Aug  9 12:16:03 2011
+++ src/sys/modules/Makefile	Thu Aug 11 07:33:25 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.86 2011/08/09 12:16:03 jruoho Exp $
+#	$NetBSD: Makefile,v 1.87 2011/08/11 07:33:25 mbalmer Exp $
 
 .include <bsd.own.mk>
 
@@ -49,6 +49,7 @@
 SUBDIR+=	ptyfs
 SUBDIR+=	puffs
 SUBDIR+=	putter
+SUBDIR+=	pwdog
 SUBDIR+=	scsiverbose
 SUBDIR+=	secmodel_bsd44
 SUBDIR+=	secmodel_overlay

Added files:

Index: src/share/man/man4/pwdog.4
diff -u /dev/null src/share/man/man4/pwdog.4:1.1
--- /dev/null	Thu Aug 11 07:33:26 2011
+++ src/share/man/man4/pwdog.4	Thu Aug 11 07:33:25 2011
@@ -0,0 +1,55 @@
+.\"	$NetBSD: pwdog.4,v 1.1 2011/08/11 07:33:25 mbalmer Exp $
+.\"	$OpenBSD: pwdog.4,v 1.6 2007/12/23 22:16:39 jmc Exp $
+.\"
+.\" Copyright (c) 2011 Marc Balmer <mbal...@netbsd.org>
+.\" Copyright (c) 2006 Marc Balmer <mbal...@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd August 11, 2011
+.Dt PWDOG 4
+.Os
+.Sh NAME
+.Nm pwdog
+.Nd Quancom PWDOG1 watchdog timer device
+.Sh SYNOPSIS
+.Cd "pwdog0 at pci?"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for Quancom PWDOG1 boards.
+.Pp
+If the kernel crashes, the watchdog timer is not reset and the system will
+reboot (assuming a proper connection is made between the PWDOG1 and
+the motherboard).
+Alternatively, the watchdog can be reinitialized via a userland process which
+ensures that process scheduling, not just kernel timeout processing, is still
+taking place.
+.Pp
+The timeout period of the PWDOG1 card is set using DIP switches and cannot
+be changed by software.
+.Sh SEE ALSO
+.Xr intro 4 ,
+.Xr pci 4
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Ox 4.1
+and
+.Nx 6.0 .
+.Sh AUTHORS
+The
+.Nm
+driver was written by
+.An Marc Balmer Aq mbal...@netbsd.org .

Index: src/sys/dev/pci/pwdog.c
diff -u /dev/null src/sys/dev/pci/pwdog.c:1.1
--- /dev/null	Thu Aug 11 07:33:26 2011
+++ src/sys/dev/pci/pwdog.c	Thu Aug 11 07:33:24 2011
@@ -0,0 +1,206 @@
+/*	$$NetBSD: pwdog.c,v 1.1 2011/08/11 07:33:24 mbalmer Exp $ */
+/*	$OpenBSD: pwdog.c,v 1.7 2010/04/08 00:23:53 tedu Exp $ */
+
+/*
+ * Copyright (c) 2011 Marc Balmer <mbal...@netbsd.org>
+ * Copyright (c) 2006 Marc Balmer <mbal...@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/kernel.h>
+#ifdef _MODULE
+#include <sys/module.h>
+#endif
+#include <sys/systm.h>
+
+/* #include <machine/bus.h> */
+
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcidevs.h>
+
+#include <dev/sysmon/sysmonvar.h>
+
+struct pwdog_softc {
+	device_t		sc_dev;
+
+	bus_space_tag_t		sc_iot;
+	bus_space_handle_t	sc_ioh;
+	bus_size_t		sc_iosize;
+
+	struct sysmon_wdog	sc_smw;
+	bool			sc_smw_valid;
+};
+
+/* registers */
+#define PWDOG_ACTIVATE	0
+#define PWDOG_DISABLE	1
+
+/* maximum timeout period in seconds */
+#define PWDOG_MAX_PERIOD	(12*60)	/* 12 minutes */
+
+static int pwdog_match(device_t, cfdata_t, void *);
+static void pwdog_attach(device_t, device_t, void *);
+static int pwdog_detach(device_t, int);
+static bool pwdog_suspend(device_t, const pmf_qual_t *);
+static int pwdog_setmode(struct sysmon_wdog *smw);
+static int pwdog_tickle(struct sysmon_wdog *smw);
+
+CFATTACH_DECL_NEW(
+    pwdog,
+    sizeof(struct pwdog_softc),
+    pwdog_match,
+    pwdog_attach,
+    pwdog_detach,
+    NULL
+);
+
+static int
+pwdog_match(device_t parent, cfdata_t match, void *aux)
+{
+	struct pci_attach_args *pa = (struct pci_attach_args *)aux;
+
+	if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_QUANCOM &&
+	    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_QUANCOM_PWDOG1)
+		return 1;
+	return 0;
+}
+
+void
+pwdog_attach(device_t parent, device_t self, void *aux)
+{
+	struct pwdog_softc *sc = device_private(self);
+	struct pci_attach_args *const pa = (struct pci_attach_args *)aux;
+	pcireg_t memtype;
+
+	memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, PCI_MAPREG_START);
+	if (pci_mapreg_map(pa, PCI_MAPREG_START, memtype, 0, &sc->sc_iot,
+	    &sc->sc_ioh, NULL, &sc->sc_iosize)) {
+		aprint_error("\n");
+		aprint_error_dev(self, "PCI %s region not found\n",
+		    memtype == PCI_MAPREG_TYPE_IO ? "I/O" : "memory");
+		return;
+	}
+	printf("\n");
+
+	sc->sc_dev = self;
+
+	pmf_device_register(self, pwdog_suspend, NULL);
+	bus_space_write_1(sc->sc_iot, sc->sc_ioh, PWDOG_DISABLE, 0);
+
+	sc->sc_smw.smw_name = device_xname(self);
+	sc->sc_smw.smw_cookie = sc;
+	sc->sc_smw.smw_setmode = pwdog_setmode;
+	sc->sc_smw.smw_tickle = pwdog_tickle;
+	sc->sc_smw.smw_period = PWDOG_MAX_PERIOD;
+
+	if (sysmon_wdog_register(&sc->sc_smw))
+		aprint_error_dev(self, "couldn't register with sysmon\n");
+	else
+		sc->sc_smw_valid = true;
+}
+
+static int
+pwdog_detach(device_t self, int flags)
+{
+	struct pwdog_softc *sc = device_private(self);
+
+	if (sc->sc_smw_valid) {
+		if ((sc->sc_smw.smw_mode & WDOG_MODE_MASK)
+		    != WDOG_MODE_DISARMED)
+			return EBUSY;
+
+		sysmon_wdog_unregister(&sc->sc_smw);
+		sc->sc_smw_valid = false;
+	}
+
+	pmf_device_deregister(self);
+
+	if (sc->sc_iosize)
+		bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_iosize);
+	return 0;
+}
+
+static bool
+pwdog_suspend(device_t self, const pmf_qual_t *qual)
+{
+	struct pwdog_softc *sc = device_private(self);
+
+	if (sc->sc_smw_valid == false)
+		return true;
+
+	if ((sc->sc_smw.smw_mode & WDOG_MODE_MASK) != WDOG_MODE_DISARMED)
+		return false;
+
+	return true;
+}
+
+static int
+pwdog_setmode(struct sysmon_wdog *smw)
+{
+	struct pwdog_softc *sc = smw->smw_cookie;
+
+	switch (smw->smw_mode & WDOG_MODE_MASK) {
+	case WDOG_MODE_DISARMED:
+		bus_space_write_1(sc->sc_iot, sc->sc_ioh, PWDOG_DISABLE, 0);
+		break;
+	default:
+		/* NB:  the timer period set by the user is ignored */
+		bus_space_write_1(sc->sc_iot, sc->sc_ioh, PWDOG_ACTIVATE, 0);
+	}
+	return 0;
+}
+
+static int
+pwdog_tickle(struct sysmon_wdog *smw)
+{
+	struct pwdog_softc *sc = smw->smw_cookie;
+
+	bus_space_write_1(sc->sc_iot, sc->sc_ioh, PWDOG_ACTIVATE, 0);
+	return 0;
+}
+
+#ifdef _MODULE
+MODULE(MODULE_CLASS_DRIVER, pwdog, NULL);
+
+#include "ioconf.c"
+
+static int
+pwdog_modcmd(modcmd_t cmd, void *opaque)
+{
+	int error;
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		error = config_init_component(cfdriver_ioconf_pwdog,
+		    cfattach_ioconf_pwdog, cfdata_ioconf_pwdog);
+		if (error) {
+			aprint_error("%s: unable to init component\n",
+			    pwdog_cd.cd_name);
+			return error;
+		}
+		return 0;
+	case MODULE_CMD_FINI:
+		config_fini_component(cfdriver_ioconf_pwdog,
+		    cfattach_ioconf_pwdog, cfdata_ioconf_pwdog);
+		return 0;
+	default:
+		return ENOTTY;
+	}
+}
+
+#endif /* _MODULE */

Index: src/sys/modules/pwdog/Makefile
diff -u /dev/null src/sys/modules/pwdog/Makefile:1.1
--- /dev/null	Thu Aug 11 07:33:26 2011
+++ src/sys/modules/pwdog/Makefile	Thu Aug 11 07:33:25 2011
@@ -0,0 +1,14 @@
+#	$NetBSD: Makefile,v 1.1 2011/08/11 07:33:25 mbalmer Exp $
+
+.include "../Makefile.inc"
+
+.PATH:		${S}/dev/pci
+
+KMOD=		pwdog
+IOCONF=		pwdog.ioconf
+SRCS=		pwdog.c
+
+CPPFLAGS+=	-I${S}/pci
+
+.include <bsd.kmodule.mk>
+
Index: src/sys/modules/pwdog/pwdog.ioconf
diff -u /dev/null src/sys/modules/pwdog/pwdog.ioconf:1.1
--- /dev/null	Thu Aug 11 07:33:26 2011
+++ src/sys/modules/pwdog/pwdog.ioconf	Thu Aug 11 07:33:25 2011
@@ -0,0 +1,11 @@
+#	$NetBSD: pwdog.ioconf,v 1.1 2011/08/11 07:33:25 mbalmer Exp $
+
+ioconf		pwdog
+
+include		"conf/files"
+include		"dev/i2o/files.i2o"
+include		"dev/pci/files.pci"
+
+pseudo-root	pci*
+pwdog*		at pci?
+

Reply via email to