diff options
author | Marc Espie <espie@cvs.openbsd.org> | 1999-11-05 17:15:35 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 1999-11-05 17:15:35 +0000 |
commit | 2c5505dbf5abe059b149d7a319cb7542bce1ff84 (patch) | |
tree | 04562a47fbdd2274b82d142fe94bd2619f013e5b /sys/arch/amiga | |
parent | 2cddd548e9a652e181b02800b7f271c8bf7d5af9 (diff) |
ite screen blanker, set to 10 minutes by default.
(niklas@ finally looked at the code)
Diffstat (limited to 'sys/arch/amiga')
-rw-r--r-- | sys/arch/amiga/conf/files.amiga | 3 | ||||
-rw-r--r-- | sys/arch/amiga/dev/ite.c | 19 | ||||
-rw-r--r-- | sys/arch/amiga/dev/ite_blank.c | 121 | ||||
-rw-r--r-- | sys/arch/amiga/dev/ite_blank.h | 7 | ||||
-rw-r--r-- | sys/arch/amiga/dev/iteioctl.h | 4 |
5 files changed, 151 insertions, 3 deletions
diff --git a/sys/arch/amiga/conf/files.amiga b/sys/arch/amiga/conf/files.amiga index 50af3683c7a..1e5fc64df62 100644 --- a/sys/arch/amiga/conf/files.amiga +++ b/sys/arch/amiga/conf/files.amiga @@ -1,4 +1,4 @@ -# $OpenBSD: files.amiga,v 1.32 1999/09/09 21:27:36 espie Exp $ +# $OpenBSD: files.amiga,v 1.33 1999/11/05 17:15:34 espie Exp $ # $NetBSD: files.amiga,v 1.62 1997/08/27 19:32:47 is Exp $ @@ -80,6 +80,7 @@ device ite attach ite at grf file arch/amiga/dev/ite.c ite needs-flag file arch/amiga/dev/kbdmap.c ite +file arch/amiga/dev/ite_blank.c ite file arch/amiga/dev/kf_8x8.c ite file arch/amiga/dev/kf_8x11.c kfont_8x11 file arch/amiga/dev/kf_custom.c kfont_custom diff --git a/sys/arch/amiga/dev/ite.c b/sys/arch/amiga/dev/ite.c index 58e0d9634d4..dfdad95f9ed 100644 --- a/sys/arch/amiga/dev/ite.c +++ b/sys/arch/amiga/dev/ite.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ite.c,v 1.10 1997/09/18 13:39:58 niklas Exp $ */ +/* $OpenBSD: ite.c,v 1.11 1999/11/05 17:15:34 espie Exp $ */ /* $NetBSD: ite.c,v 1.47 1996/12/23 09:10:20 veego Exp $ */ /* @@ -76,6 +76,7 @@ #include "grfcc.h" #include "ite.h" +#include "ite_blank.h" /* * XXX go ask sys/kern/tty.c:ttselect() @@ -556,6 +557,7 @@ iteioctl(dev, cmd, addr, flag, p) struct ite_softc *ip; struct itebell *ib; struct tty *tp; + int *blank_arg; int error; ip = getitesp(dev); @@ -609,6 +611,17 @@ iteioctl(dev, cmd, addr, flag, p) start_repeat_timeo = irp->start; next_repeat_timeo = irp->next; return(0); + case ITEIOCSBLKTIME: + blank_arg = (int *)addr; + if (blank_time != *blank_arg) { + blank_time = *blank_arg; + ite_reset_blanker(ip); + } + return (0); + case ITEIOCGBLKTIME: + blank_arg = (int *)addr; + *blank_arg = blank_time; + return (0); } #if NGRFCC > 0 /* XXX */ @@ -680,6 +693,7 @@ ite_on(dev, flag) ip = getitesp(dev); + /* force ite active, overriding graphics mode */ if (flag & 1) { ip->flags |= ITE_ACTIVE; @@ -695,6 +709,7 @@ ite_on(dev, flag) if (ip->flags & ITE_INGRF) return (0); iteinit(dev); + ite_enable_blanker(ip); return (0); } @@ -710,6 +725,7 @@ ite_off(dev, flag) ip->flags |= ITE_INGRF; if ((ip->flags & ITE_ACTIVE) == 0) return; + ite_disable_blanker(ip); if ((flag & 1) || (ip->flags & (ITE_INGRF | ITE_ISCONS | ITE_INITED)) == ITE_INITED) SUBR_DEINIT(ip); @@ -898,6 +914,7 @@ ite_filter(c, caller) if (kbd_ite == NULL || kbd_ite->tp == NULL) return; + ite_restart_blanker(kbd_ite); kbd_tty = kbd_ite->tp; /* have to make sure we're at spltty in here */ diff --git a/sys/arch/amiga/dev/ite_blank.c b/sys/arch/amiga/dev/ite_blank.c new file mode 100644 index 00000000000..b1e1a64012b --- /dev/null +++ b/sys/arch/amiga/dev/ite_blank.c @@ -0,0 +1,121 @@ +/* $OpenBSD: ite_blank.c,v 1.1 1999/11/05 17:15:34 espie Exp $ */ +/*- + * Copyright (c) 1999 Marc Espie. + * + * 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 Marc Espie for the OpenBSD + * Project. + * + * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS + * ``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 OPENBSD + * PROJECT OR CONTRIBUTORS 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/kernel.h> +#include <sys/device.h> +#include <sys/systm.h> +#include <sys/ioctl.h> +#include <amiga/dev/grfioctl.h> +#include <amiga/dev/grfvar.h> +#include <amiga/dev/itevar.h> +#include <amiga/dev/ite_blank.h> + +#define SUBR_BLANK(ip, mode) ((ip)->grf->g_mode((ip)->grf, GM_GRFIOCTL, &(mode), GRFIOCBLANK, (ip)->grf->g_grfdev )) + +void ite_blank __P((void *)); +void ite_unblank __P((struct ite_softc *)); + +static int blanked_screen = 0; +static int blank_enabled = 0; +static long last_schedule = 0L; +int blank_time = 600; + +void +ite_blank(arg) + void *arg; +{ + struct ite_softc *kbd = arg; + int data = GRFIOCBLANK_DARK; + + SUBR_BLANK(kbd, data); + blanked_screen = 1; +} + +void +ite_unblank(kbd) + struct ite_softc *kbd; +{ + if (blanked_screen) { + int data = GRFIOCBLANK_LIVE; + + SUBR_BLANK(kbd, data); + blanked_screen = 0; + } +} + +void +ite_restart_blanker(kbd) + struct ite_softc *kbd; +{ + int x = spltty(); + + /* steal timing trick from pcvt */ + if (last_schedule != time.tv_sec) { + if (blank_enabled && !blanked_screen) + untimeout(ite_blank, kbd); + if (blank_enabled && blank_time) + timeout(ite_blank, kbd, blank_time * hz); + last_schedule = time.tv_sec; + } + ite_unblank(kbd); + + splx(x); +} + +void +ite_reset_blanker(kbd) + struct ite_softc *kbd; +{ + last_schedule = 0L; + ite_restart_blanker(kbd); +} + +void +ite_disable_blanker(kbd) + struct ite_softc *kbd; +{ + int x = spltty(); + + untimeout(ite_blank, kbd); + blank_enabled = 0; + ite_unblank(kbd); + + splx(x); +} + +void +ite_enable_blanker(kbd) + struct ite_softc *kbd; +{ + blank_enabled = 1; + ite_reset_blanker(kbd); +} + diff --git a/sys/arch/amiga/dev/ite_blank.h b/sys/arch/amiga/dev/ite_blank.h new file mode 100644 index 00000000000..34505dcba70 --- /dev/null +++ b/sys/arch/amiga/dev/ite_blank.h @@ -0,0 +1,7 @@ +/* $OpenBSD: ite_blank.h,v 1.1 1999/11/05 17:15:34 espie Exp $ */ +void ite_restart_blanker __P((struct ite_softc *)); +void ite_reset_blanker __P((struct ite_softc *)); +void ite_disable_blanker __P((struct ite_softc *)); +void ite_enable_blanker __P((struct ite_softc *)); + +extern int blank_time; diff --git a/sys/arch/amiga/dev/iteioctl.h b/sys/arch/amiga/dev/iteioctl.h index d9ffc98cdf3..a45d340b1ec 100644 --- a/sys/arch/amiga/dev/iteioctl.h +++ b/sys/arch/amiga/dev/iteioctl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: iteioctl.h,v 1.2 1997/01/16 09:24:53 niklas Exp $ */ +/* $OpenBSD: iteioctl.h,v 1.3 1999/11/05 17:15:34 espie Exp $ */ /* $NetBSD: iteioctl.h,v 1.9 1994/10/26 02:04:02 cgd Exp $ */ /* @@ -77,6 +77,8 @@ struct iterepeat { #define ITEIOCSBELL _IOW('Z', 0x77, struct itebell) #define ITEIOCGREPT _IOR('Z', 0x78, struct iterepeat) #define ITEIOCSREPT _IOW('Z', 0x79, struct iterepeat) +#define ITEIOCGBLKTIME _IOR('Z', 0x80, int) +#define ITEIOCSBLKTIME _IOW('Z', 0x80, int) #define ITESWITCH _IOW('Z',0x69, int) /* XXX */ |