diff options
Diffstat (limited to 'sys/isa')
-rw-r--r-- | sys/isa/atrtc.c | 6 | ||||
-rw-r--r-- | sys/isa/sio.c | 26 |
2 files changed, 16 insertions, 16 deletions
diff --git a/sys/isa/atrtc.c b/sys/isa/atrtc.c index 3971cf5..1ad7bf4 100644 --- a/sys/isa/atrtc.c +++ b/sys/isa/atrtc.c @@ -216,7 +216,6 @@ clkintr(struct clockframe frame) switch (timer0_state) { case RELEASED: - setdelayed(); break; case ACQUIRED: @@ -224,7 +223,6 @@ clkintr(struct clockframe frame) >= hardclock_max_count) { timer0_prescaler_count -= hardclock_max_count; hardclock(&frame); - setdelayed(); } break; @@ -239,7 +237,6 @@ clkintr(struct clockframe frame) mtx_exit(&clock_lock, MTX_SPIN); timer_func = new_function; timer0_state = ACQUIRED; - setdelayed(); break; case RELEASE_PENDING: @@ -258,7 +255,6 @@ clkintr(struct clockframe frame) timer_func = hardclock; timer0_state = RELEASED; hardclock(&frame); - setdelayed(); } break; } @@ -967,7 +963,7 @@ cpu_initclocks() int diag; #ifdef APIC_IO int apic_8254_trial; - struct intrec *clkdesc; + struct intrhand *clkdesc; #endif /* APIC_IO */ if (statclock_disable) { diff --git a/sys/isa/sio.c b/sys/isa/sio.c index 4c403d1..4dc22ea 100644 --- a/sys/isa/sio.c +++ b/sys/isa/sio.c @@ -300,7 +300,7 @@ static void siointr1 __P((struct com_s *com)); static void siointr __P((void *arg)); static int commctl __P((struct com_s *com, int bits, int how)); static int comparam __P((struct tty *tp, struct termios *t)); -static swihand_t siopoll; +static void siopoll __P((void *)); static int sioprobe __P((device_t dev, int xrid)); static int sio_isa_probe __P((device_t dev)); static void siosettimeout __P((void)); @@ -413,7 +413,8 @@ static int siocnunit; #endif static Port_t siogdbiobase; static int siogdbunit = -1; -static bool_t sio_registered; +static struct intrhand *sio_slow_ih; +static struct intrhand *sio_fast_ih; static int sio_timeout; static int sio_timeouts_until_log; static struct callout_handle sio_timeout_handle @@ -1322,9 +1323,11 @@ determined_type: ; printf(" with a bogus IIR_TXRDY register"); printf("\n"); - if (!sio_registered) { - register_swi(SWI_TTY, siopoll); - sio_registered = TRUE; + if (sio_fast_ih == NULL) { + sio_fast_ih = sinthand_add("tty:sio", &tty_ithd, siopoll, + NULL, SWI_TTY, 0); + sio_slow_ih = sinthand_add("tty:sio", &clk_ithd, siopoll, + NULL, SWI_TTY, 0); } com->devs[0] = make_dev(&sio_cdevsw, unit, UID_ROOT, GID_WHEEL, 0600, "ttyd%r", unit); @@ -1979,7 +1982,7 @@ siointr1(com) } ++com->bytes_in; if (com->hotchar != 0 && recv_data == com->hotchar) - setsofttty(); + sched_swi(sio_fast_ih, SWI_NOSWITCH); ioptr = com->iptr; if (ioptr >= com->ibufend) CE_RECORD(com, CE_INTERRUPT_BUF_OVERFLOW); @@ -1987,10 +1990,10 @@ siointr1(com) if (com->do_timestamp) microtime(&com->timestamp); ++com_events; - schedsofttty(); + sched_swi(sio_slow_ih, SWI_DELAY); #if 0 /* for testing input latency vs efficiency */ if (com->iptr - com->ibuf == 8) - setsofttty(); + sched_swi(sio_fast_ih, SWI_NOSWITCH); #endif ioptr[0] = recv_data; ioptr[com->ierroff] = line_status; @@ -2028,7 +2031,7 @@ cont: if (!(com->state & CS_CHECKMSR)) { com_events += LOTS_OF_EVENTS; com->state |= CS_CHECKMSR; - setsofttty(); + sched_swi(sio_fast_ih, SWI_NOSWITCH); } /* handle CTS change immediately for crisp flow ctl */ @@ -2082,7 +2085,8 @@ cont: if (!(com->state & CS_ODONE)) { com_events += LOTS_OF_EVENTS; com->state |= CS_ODONE; - setsofttty(); /* handle at high level ASAP */ + /* handle at high level ASAP */ + sched_swi(sio_fast_ih, SWI_NOSWITCH); } } if (COM_IIR_TXRDYBUG(com->flags) && (int_ctl != int_ctl_new)) { @@ -2257,7 +2261,7 @@ sioioctl(dev, cmd, data, flag, p) /* software interrupt handler for SWI_TTY */ static void -siopoll() +siopoll(void *dummy) { int unit; int intrsave; |