Re: serial help ?
- From: "M. Warner Losh" <imp@xxxxxxxxxx>
- Date: Sat, 21 Apr 2007 23:42:53 -0600 (MDT)
In message: <20070419211021.GH69188@xxxxxxxxxxxx>
Alfred Perlstein <alfred@xxxxxxxxxxx> writes:
:
: 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?
The inb() is assumed to provide a delay of 1us, so this has a timeout
of 100ms. Even with newer PCI devices that run about 4-5 times
faster, the timeout is still on the order of 20ms, which is adequate
for most modern baudrates (9600 baud takes 1ms, 115200 takes 10us).
Warner
_______________________________________________
freebsd-hackers@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@xxxxxxxxxxx"
- References:
- serial help ?
- From: Alfred Perlstein
- serial help ?
- Prev by Date: Re: RFI: Ethernet driver ported from Linux
- Next by Date: Re: Multiple IP Jail's patch for FreeBSD 6.2
- Previous by thread: serial help ?
- Next by thread: Re: serial help ?
- Index(es):