summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/pmax/conf/DS31002
-rw-r--r--sys/arch/pmax/conf/GENERIC2
-rw-r--r--sys/arch/pmax/conf/GENERIC.NFS2
-rw-r--r--sys/arch/pmax/conf/GENERIC.rz02
-rw-r--r--sys/arch/pmax/conf/files.pmax5
-rw-r--r--sys/arch/pmax/dev/led.c133
-rw-r--r--sys/arch/pmax/dev/led.h39
-rw-r--r--sys/arch/pmax/include/cpu.h6
-rw-r--r--sys/arch/pmax/pmax/machdep.c18
-rw-r--r--sys/arch/pmax/pmax/mainbus.c3
-rw-r--r--sys/arch/pmax/pmax/pmax_trap.c11
11 files changed, 219 insertions, 4 deletions
diff --git a/sys/arch/pmax/conf/DS3100 b/sys/arch/pmax/conf/DS3100
index 0f3f93c6548..d507349319e 100644
--- a/sys/arch/pmax/conf/DS3100
+++ b/sys/arch/pmax/conf/DS3100
@@ -91,6 +91,8 @@ rz6 at oldscsibus? target ? drive ?
tz0 at oldscsibus? target ? drive ?
tz1 at oldscsibus? target ? drive ?
+led0 at mainbus0 # [23]100 back panel leds
+
pseudo-device loop 1
pseudo-device sl 1 # serial-line ip ports
pseudo-device ppp 1 # point ot point ip ports
diff --git a/sys/arch/pmax/conf/GENERIC b/sys/arch/pmax/conf/GENERIC
index f7b8a8744e9..1a36aeefaf4 100644
--- a/sys/arch/pmax/conf/GENERIC
+++ b/sys/arch/pmax/conf/GENERIC
@@ -124,6 +124,8 @@ rz6 at oldscsibus? target ? drive ?
tz0 at oldscsibus? target ? drive ?
tz1 at oldscsibus? target ? drive ?
+led0 at mainbus0 # [23]100 back panel leds
+
pseudo-device loop 1
pseudo-device sl 1 # serial-line ip ports
pseudo-device ppp 1 # point ot point ip ports
diff --git a/sys/arch/pmax/conf/GENERIC.NFS b/sys/arch/pmax/conf/GENERIC.NFS
index fc3e5c63d15..9c7563a85e9 100644
--- a/sys/arch/pmax/conf/GENERIC.NFS
+++ b/sys/arch/pmax/conf/GENERIC.NFS
@@ -122,6 +122,8 @@ rz6 at oldscsibus? target ? drive ?
tz0 at oldscsibus? target ? drive ?
tz1 at oldscsibus? target ? drive ?
+led0 at mainbus0 # [23]100 back panel leds
+
pseudo-device loop 1
pseudo-device sl 1 # serial-line ip ports
pseudo-device ppp 1 # point ot point ip ports
diff --git a/sys/arch/pmax/conf/GENERIC.rz0 b/sys/arch/pmax/conf/GENERIC.rz0
index 3a6958750cd..c16494e3fc2 100644
--- a/sys/arch/pmax/conf/GENERIC.rz0
+++ b/sys/arch/pmax/conf/GENERIC.rz0
@@ -123,6 +123,8 @@ rz6 at oldscsibus? target ? drive ?
tz0 at oldscsibus? target ? drive ?
tz1 at oldscsibus? target ? drive ?
+led0 at mainbus0 # [23]100 back panel leds
+
pseudo-device loop 1
pseudo-device sl 1 # serial-line ip ports
pseudo-device ppp 1 # point ot point ip ports
diff --git a/sys/arch/pmax/conf/files.pmax b/sys/arch/pmax/conf/files.pmax
index b482eb9ec9a..bca52fcc1f8 100644
--- a/sys/arch/pmax/conf/files.pmax
+++ b/sys/arch/pmax/conf/files.pmax
@@ -101,6 +101,11 @@ file arch/pmax/dev/rz.c rz needs-count
# Optional device-drivers
#
+# Back panel LEDS on KN01 boxes
+device led
+attach led at mainbus
+file arch/pmax/dev/led.c led needs-count
+
# DC7085 (DZ-like four-port serial device) on mainbus on non-IOASIC machines.
# For the 3MAX (aka kn02 aka 5k/200) pretend that it's on an ASIC.
device dc
diff --git a/sys/arch/pmax/dev/led.c b/sys/arch/pmax/dev/led.c
new file mode 100644
index 00000000000..991a7dcb2fe
--- /dev/null
+++ b/sys/arch/pmax/dev/led.c
@@ -0,0 +1,133 @@
+/* $OpenBSD: led.c,v 1.1 1998/06/04 03:49:48 jason Exp $ */
+
+/*
+ * Copyright (c) 1998 Jason L. Wright (jason@thought.net)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Jason L. Wright
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <machine/autoconf.h>
+#include <pmax/pmax/kn01.h>
+#include <pmax/pmax/pmaxtype.h>
+#include <pmax/dev/led.h>
+
+/*
+ * This is the driver for the "led" register available on the kn01 machines.
+ */
+
+static int ledmatch __P((struct device *, void *, void *));
+static void ledattach __P((struct device *, struct device *, void *));
+
+struct cfattach led_ca = {
+ sizeof(struct device), ledmatch, ledattach
+};
+
+struct cfdriver led_cd = {
+ NULL, "led", DV_DULL
+};
+
+/* from machdep */
+extern int pmax_boardtype;
+
+static char led_attached = 0;
+static int led_index = 0;
+u_short led_current = 0xff;
+int pmax_led_blink;
+
+/*
+ * These led patterns produce a line that scrolls across the display, then
+ * back again. Note that a value of 0 for a particular bit lights the
+ * corresponding LED, and 1 leaves it dark.
+ */
+static char led_patterns[] =
+ { 0xff, 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe,
+ 0xff, 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, };
+
+static int
+ledmatch(parent, match, aux)
+ struct device *parent;
+ void *match;
+ void *aux;
+{
+ struct confargs *ca = aux;
+
+ if (pmax_boardtype == DS_PMAX) /* only handle [23]100 now */
+ return (strcmp("led", ca->ca_name) == 0);
+ return (0);
+}
+
+/* ARGSUSED */
+static void
+ledattach(parent, self, aux)
+ struct device *parent, *self;
+ void *aux;
+{
+ led_attached = 1;
+ printf("\n");
+
+ /* In case it's initialized to true... */
+ if (pmax_led_blink)
+ led_pmax_cycle((caddr_t)0);
+}
+
+/*
+ * Check to see whether we were configured and whether machdep.led_blink != 0.
+ * If so, put a new pattern into the register and schedule ourselves to
+ * be called again later. The timeout is set to: [(1/8) * loadavg] seconds.
+ */
+void
+led_pmax_cycle(zero)
+ void *zero;
+{
+ int s;
+ unsigned short csr;
+
+ if (!led_attached)
+ return;
+
+ if (!pmax_led_blink)
+ led_current = 0xff;
+ else {
+ led_index = (led_index + 1) % sizeof(led_patterns);
+ led_current = led_patterns[led_index] & KN01_CSR_LEDS_MASK;
+ }
+
+ csr = *((volatile u_short *) MIPS_PHYS_TO_KSEG1(KN01_SYS_CSR));
+ csr = (csr & ~KN01_CSR_LEDS_MASK) | led_current;
+ *((volatile u_short *) MIPS_PHYS_TO_KSEG1(KN01_SYS_CSR)) = csr;
+
+ if (pmax_led_blink) {
+ s = (((averunnable.ldavg[0] + FSCALE) * hz) >> (FSHIFT + 3));
+ timeout(led_pmax_cycle, (caddr_t)0, s);
+ }
+}
diff --git a/sys/arch/pmax/dev/led.h b/sys/arch/pmax/dev/led.h
new file mode 100644
index 00000000000..dceeb9f6843
--- /dev/null
+++ b/sys/arch/pmax/dev/led.h
@@ -0,0 +1,39 @@
+/* $OpenBSD: led.h,v 1.1 1998/06/04 03:49:48 jason Exp $ */
+
+/*
+ * Copyright (c) 1998 Jason L. Wright (jason@thought.net)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Jason L. Wright
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * pmax diag register on kn01 machines.
+ */
+
+extern int pmax_led_blink;
+void led_pmax_cycle __P((void *));
diff --git a/sys/arch/pmax/include/cpu.h b/sys/arch/pmax/include/cpu.h
index d1fec14aa49..75a88148245 100644
--- a/sys/arch/pmax/include/cpu.h
+++ b/sys/arch/pmax/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.7 1998/05/18 00:28:11 millert Exp $ */
+/* $OpenBSD: cpu.h,v 1.8 1998/06/04 03:49:48 jason Exp $ */
/* $NetBSD: cpu.h,v 1.15 1996/03/23 20:28:19 jonathan Exp $ */
/*-
@@ -152,11 +152,13 @@ union cpuprid {
* CTL_MACHDEP definitions.
*/
#define CPU_CONSDEV 1 /* dev_t: console terminal device */
-#define CPU_MAXID 2 /* number of valid machdep ids */
+#define CPU_LED_BLINK 2
+#define CPU_MAXID 3 /* number of valid machdep ids */
#define CTL_MACHDEP_NAMES { \
{ 0, 0 }, \
{ "console_device", CTLTYPE_STRUCT }, \
+ { "led_blink", CTLTYPE_INT }, \
}
diff --git a/sys/arch/pmax/pmax/machdep.c b/sys/arch/pmax/pmax/machdep.c
index a8e03ca072c..c104d16a6f5 100644
--- a/sys/arch/pmax/pmax/machdep.c
+++ b/sys/arch/pmax/pmax/machdep.c
@@ -87,6 +87,7 @@
#include <pmax/stand/dec_prom.h>
#include <pmax/dev/ascreg.h>
+#include <pmax/dev/led.h>
#include <machine/autoconf.h>
#include <machine/locore.h>
@@ -102,7 +103,6 @@
#include <pmax/pmax/pmaxtype.h>
#include <pmax/pmax/cons.h>
-
#include "pm.h"
#include "cfb.h"
#include "mfb.h"
@@ -112,6 +112,7 @@
#include "scc.h"
#include "le_ioasic.h"
#include "asc.h"
+#include "led.h"
extern void fbPutc();
@@ -898,6 +899,9 @@ cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
size_t newlen;
struct proc *p;
{
+#if (NLED > 0)
+ int ret, oldval;
+#endif
/* all sysctl names at this level are terminal */
if (namelen != 1)
@@ -907,6 +911,18 @@ cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
case CPU_CONSDEV:
return (sysctl_rdstruct(oldp, oldlenp, newp, &cn_tab->cn_dev,
sizeof cn_tab->cn_dev));
+ case CPU_LED_BLINK:
+#if (NLED > 0)
+ oldval = pmax_led_blink;
+ ret = sysctl_int(oldp, oldlenp, newp, newlen, &pmax_led_blink);
+
+ /*
+ * If we were false and are now true, call led_blink().
+ * led_blink() itself will catch the other case.
+ */
+ led_pmax_cycle((caddr_t *)0);
+ return (ret);
+#endif
default:
return (EOPNOTSUPP);
}
diff --git a/sys/arch/pmax/pmax/mainbus.c b/sys/arch/pmax/pmax/mainbus.c
index 2211578c06d..297a1a33a83 100644
--- a/sys/arch/pmax/pmax/mainbus.c
+++ b/sys/arch/pmax/pmax/mainbus.c
@@ -157,7 +157,7 @@ mbattach(parent, self, aux)
}
-#define KN01_MAXDEVS 8
+#define KN01_MAXDEVS 9
struct confargs kn01_devs[KN01_MAXDEVS] = {
/* name slot offset addr intpri */
{ "pm", 0, 0, (u_int)KV(KN01_PHYS_FBUF_START), 3, },
@@ -167,6 +167,7 @@ struct confargs kn01_devs[KN01_MAXDEVS] = {
{ "mc146818", 4, 0, (u_int)KV(KN01_SYS_CLOCK), 16, },
{ "dc", 5, 0, (u_int)KV(0x15000000), 4, },
{ "dc", 6, 0, (u_int)KV(0x15200000), 5, },
+ { "led", 6, 0, 0, -1, },
#ifdef notyet
/*
* XXX Ultrix configures at 0x86400400. the first 0x400 byte are
diff --git a/sys/arch/pmax/pmax/pmax_trap.c b/sys/arch/pmax/pmax/pmax_trap.c
index b33445dfd0c..7985d186b5c 100644
--- a/sys/arch/pmax/pmax/pmax_trap.c
+++ b/sys/arch/pmax/pmax/pmax_trap.c
@@ -91,6 +91,7 @@ struct ifnet; struct ethercom;
#include "sii.h"
#include "le_pmax.h"
#include "dc_ds.h"
+#include "led.h"
#include <sys/cdefs.h>
#include <sys/syslog.h>
@@ -777,6 +778,11 @@ kn03_intr(mask, pc, statusReg, causeReg)
*----------------------------------------------------------------------
*/
#ifdef DS3100
+
+#if (NLED > 0)
+extern unsigned short led_current;
+#endif
+
static void
pmax_errintr()
{
@@ -791,7 +797,12 @@ pmax_errintr()
*(unsigned *)MIPS_PHYS_TO_KSEG1(KN01_SYS_ERRADR));
panic("Mem error interrupt");
}
+#if (NLED > 0)
+ *sysCSRPtr = ((csr & ~KN01_CSR_MBZ) & ~(KN01_CSR_LEDS_MASK))
+ | led_current;
+#else
*sysCSRPtr = (csr & ~KN01_CSR_MBZ) | 0xff;
+#endif
}
#endif /* DS3100 */