Subject: Hayes ESP boards
To: None <port-i386@NetBSD.ORG>
From: Robert Dobbs <banshee@gabriella.resort.com>
List: port-i386
Date: 01/23/1995 11:36:20
If you have a hayes ESP board, could you mail me back? I'd
like to compare notes about slip stability and etc.
The ESP acts like a 16550 but with a 1024 byte buffer, one thing I've
recently tried is upping the output from 16 bytes to 512 bytes (on
output I see a max of 500 bytes in the ring). This increases the
output speed of highly compressible things (text) somewhat (28.8 slip
line @ 26.4 or there abouts).
In comstart() in com.c
> if (sc->sc_hwflags & COM_HW_FIFO) {
>/* JMV: try big FIFO ESP has 1024? */
> u_char buffer[512], *cp = buffer;
> int n;
>
> n = q_to_b(&tp->t_outq, cp, sizeof buffer);
> do {
> outb(iobase + com_data, *cp++);
> } while (--n);
> } else
> outb(iobase + com_data, getc(&tp->t_outq));
This will of course NOT WORK AT ALL on any machine with a REAL 16550.
Am I correct in my reading that i386 com.c writes a bulk of data
(1 char normally, 16 with a 16550, up to 512 with my mod above), but
only reads one character at a time from the port?
How does one tell if there is data pending? I assume with the 16550,
we recieve an interrupt (8 characters in the buffer), and the chain
is like this:
INTERRUPT ->
comintr()
while (read code)
if (code & LSR_RXRDY)
comeint()
comeint() actually reads the data and passes it out AS READ via:
(*linesw[tp->t_line].l_rint)(c, tp);
which in the case of a slip line calls slinput?
-john