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