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().
This commit is contained in:
parent
7bd441a637
commit
85ad0d175c
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user