diff options
Diffstat (limited to 'sys/arch/i386/isa')
-rw-r--r-- | sys/arch/i386/isa/pcvt/pcvt_drv.c | 34 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/pcvt_kbd.c | 14 |
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 } /*---------------------------------------------------------------------------* |