From 85ad0d175ce118820617b6847783eda9fb368297 Mon Sep 17 00:00:00 2001 From: mycroft Date: Mon, 29 Mar 1999 13:21:15 +0000 Subject: [PATCH] Fix bogons in previous change: * The fact that IIR_NOPEND was not set on entry does *not* mean that no transmission was in progress. Besides, we don't want to throw away receive interrupts either. * In the !clearirq case, we didn't splx(). --- sys/dev/ic/com.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/sys/dev/ic/com.c b/sys/dev/ic/com.c index 48c971030e52..dc80a2fe7ec8 100644 --- a/sys/dev/ic/com.c +++ b/sys/dev/ic/com.c @@ -1,4 +1,4 @@ -/* $NetBSD: com.c,v 1.156 1999/03/29 10:01:39 ross Exp $ */ +/* $NetBSD: com.c,v 1.157 1999/03/29 13:21:15 mycroft Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -2174,32 +2174,25 @@ com_common_putc(iot, ioh, c) int c; { int s = splserial(); - int clearirq; u_char stat; int timo; /* wait for any pending transmission to finish */ - timo = 500; + timo = 1500; while (!ISSET(stat = bus_space_read_1(iot, ioh, com_lsr), LSR_TXRDY) && --timo) delay(100); - clearirq = ISSET(bus_space_read_1(iot, ioh, com_iir), IIR_NOPEND); - COM_BARRIER(iot, ioh, BR | BW); bus_space_write_1(iot, ioh, com_data, c); COM_BARRIER(iot, ioh, BR | BW); + /* wait for this transmission to complete */ timo = 15000; while (!ISSET(stat = bus_space_read_1(iot, ioh, com_lsr), LSR_TXRDY) && --timo) delay(100); - if(clearirq != 0) { - /* clear any interrupts generated by this transmission */ - (void)bus_space_read_1(iot, ioh, com_iir); - COM_BARRIER(iot, ioh, BR | BW); - splx(s); - } + splx(s); } /*