diff options
author | Jason Wright <jason@cvs.openbsd.org> | 1998-06-04 03:49:53 +0000 |
---|---|---|
committer | Jason Wright <jason@cvs.openbsd.org> | 1998-06-04 03:49:53 +0000 |
commit | 0acba8ce22bbe3733ce30319925ed1c9e82ef28d (patch) | |
tree | af09288ca7e6d056416b8a9473598d49a31e1a8b /sys/arch/pmax/dev | |
parent | 308fec6f79d51d402ad9909290686cee89312a18 (diff) |
LED blinker for the back panel leds on the 2100/3100.
Diffstat (limited to 'sys/arch/pmax/dev')
-rw-r--r-- | sys/arch/pmax/dev/led.c | 133 | ||||
-rw-r--r-- | sys/arch/pmax/dev/led.h | 39 |
2 files changed, 172 insertions, 0 deletions
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 *)); |