Alfred Perlstein
2007-04-19 21:10:21 UTC
I'm working on some custom hardware and I'm getting garbled console
output.
I noticed that siocntxwait looks like this:
static void
siocntxwait(iobase)
Port_t iobase;
{
int timo;
/*
* Wait for any pending transmission to finish. Required to avoid
* the UART lockup bug when the speed is changed, and for normal
* transmits.
*/
timo = 100000;
while ((inb(iobase + com_lsr) & (LSR_TSRE | LSR_TXRDY))
!= (LSR_TSRE | LSR_TXRDY) && --timo != 0)
;
}
Shouldn't there be some sort of DELAY in there?
My platform has an emulated serial device in hardware, so it
may be that the loop could run a LOT faster than transmit can
happen...
any ideas of what the DELAY should be?
output.
I noticed that siocntxwait looks like this:
static void
siocntxwait(iobase)
Port_t iobase;
{
int timo;
/*
* Wait for any pending transmission to finish. Required to avoid
* the UART lockup bug when the speed is changed, and for normal
* transmits.
*/
timo = 100000;
while ((inb(iobase + com_lsr) & (LSR_TSRE | LSR_TXRDY))
!= (LSR_TSRE | LSR_TXRDY) && --timo != 0)
;
}
Shouldn't there be some sort of DELAY in there?
My platform has an emulated serial device in hardware, so it
may be that the loop could run a LOT faster than transmit can
happen...
any ideas of what the DELAY should be?
--
- Alfred Perlstein
- Alfred Perlstein