summaryrefslogtreecommitdiff
path: root/sys/arch/i386/isa
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/i386/isa')
-rw-r--r--sys/arch/i386/isa/pcvt/pcvt_drv.c34
-rw-r--r--sys/arch/i386/isa/pcvt/pcvt_kbd.c14
2 files changed, 20 insertions, 28 deletions
diff --git a/sys/arch/i386/isa/pcvt/pcvt_drv.c b/sys/arch/i386/isa/pcvt/pcvt_drv.c
index d5bf32eb623..728da89bb66 100644
--- a/sys/arch/i386/isa/pcvt/pcvt_drv.c
+++ b/sys/arch/i386/isa/pcvt/pcvt_drv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcvt_drv.c,v 1.35 2000/10/07 03:12:45 aaron Exp $ */
+/* $OpenBSD: pcvt_drv.c,v 1.36 2000/10/16 02:25:21 aaron Exp $ */
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
*
@@ -97,6 +97,11 @@ void pccnpollc(Dev_t, int);
int pcprobe(struct device *, void *, void *);
void pcattach(struct device *, struct device *, void *);
+#if PCVT_KBD_FIFO
+struct timeout pcvt_to;
+void pcvt_timeout(void *);
+#endif
+
int
pcprobe(struct device *parent, void *match, void *aux)
{
@@ -179,6 +184,10 @@ pcattach(struct device *parent, struct device *self, void *aux)
async_update();
+#if PCVT_KBD_FIFO
+ timeout_set(&pcvt_to, pcvt_timeout, NULL);
+#endif
+
sc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE,
IPL_TTY, pcintr, (void *)0, sc->sc_dev.dv_xname);
@@ -397,16 +406,12 @@ u_char pcvt_kbd_fifo[PCVT_KBD_FIFO_SZ];
int pcvt_kbd_wptr = 0;
int pcvt_kbd_rptr = 0;
short pcvt_kbd_count= 0;
-static u_char pcvt_timeout_scheduled;
-static void
+void
pcvt_timeout(void *arg)
{
- int s;
u_char *cp;
- pcvt_timeout_scheduled = 0;
-
#if PCVT_SCREENSAVER
pcvt_scrnsv_reset();
#endif /* PCVT_SCREENSAVER */
@@ -425,13 +430,6 @@ pcvt_timeout(void *arg)
(*linesw[pcconsp->t_line].l_rint)(*cp++ & 0xff,
pcconsp);
}
-
- s = spltty();
-
- if (!pcvt_kbd_count)
- pcvt_timeout_scheduled = 0;
-
- splx(s);
}
return;
@@ -484,12 +482,8 @@ pcintr(void *arg)
}
if (ret == 1) { /* got data from keyboard ? */
- if (!pcvt_timeout_scheduled) { /* if not already active .. */
- s = spltty();
- pcvt_timeout_scheduled = 1; /* flag active */
- timeout((TIMEOUT_FUNC_T)pcvt_timeout, (caddr_t) 0, 1);
- splx(s);
- }
+ if (!timeout_pending(&pcvt_to)) /* if not already active .. */
+ timeout_add(&pcvt_to, 1);
}
return (ret);
@@ -562,7 +556,7 @@ pcstart(register struct tty *tp)
tp->t_state &= ~TS_BUSY;
tp->t_state |= TS_TIMEOUT;
- timeout(ttrstrt, tp, 1);
+ timeout_add(&tp->t_rstrt_to, 1);
if (tp->t_outq.c_cc <= tp->t_lowat) {
low:
diff --git a/sys/arch/i386/isa/pcvt/pcvt_kbd.c b/sys/arch/i386/isa/pcvt/pcvt_kbd.c
index 705928f2387..e3b7897a227 100644
--- a/sys/arch/i386/isa/pcvt/pcvt_kbd.c
+++ b/sys/arch/i386/isa/pcvt/pcvt_kbd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcvt_kbd.c,v 1.38 2000/10/11 21:24:28 aaron Exp $ */
+/* $OpenBSD: pcvt_kbd.c,v 1.39 2000/10/16 02:25:22 aaron Exp $ */
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
@@ -169,12 +169,11 @@ do_vgapage(int page)
* get lost other times as well.
*/
-static int lost_intr_timeout_queued = 0;
+struct timeout kbd_led_intr_to;
static void
check_for_lost_intr (void *arg)
{
- lost_intr_timeout_queued = 0;
if (inb(CONTROLLER_CTRL) & STATUS_OUTPBF) {
int opri = spltty();
(void)pcrint();
@@ -244,11 +243,7 @@ update_led(void)
}
#if PCVT_UPDLED_LOSES_INTR
- if (lost_intr_timeout_queued)
- untimeout(check_for_lost_intr, (void *)NULL);
-
- timeout(check_for_lost_intr, (void *)NULL, hz);
- lost_intr_timeout_queued = 1;
+ timeout_add(&kbd_led_intr_to, hz);
#endif /* PCVT_UPDLED_LOSES_INTR */
}
bail:
@@ -581,6 +576,9 @@ kbd_code_init(void)
doreset();
ovlinit(0);
keyboard_is_initialized = 1;
+#if !PCVT_NO_LED_UPDATE && PCVT_UPDLED_LOSES_INTR
+ timeout_set(&kbd_led_intr_to, check_for_lost_intr, NULL);
+#endif
}
/*---------------------------------------------------------------------------*