serial help ?

Alfred Perlstein alfred at freebsd.org
Thu Apr 19 21:39:30 UTC 2007


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?


-- 
- Alfred Perlstein


More information about the freebsd-hackers mailing list