freebsd-dev/sys/dev/sio
Bruce Evans c0952034c3 Tweaked the siointr1() so that it works better at 921600 bps, especially
with multiple ports on a shared interrupt demultiplexed by the puc_intr()
handler.

siointr1() first read as much input as possible and then checked all
possibly-relevant status registers, partly for robustness and partly
for historical reasons.  This is very bad if it is called for every
port sharing an interrupt like puc_intr() does.  It can spend too long
reading all the input for some ports when the interrupt is for a more
urgent event on another, or just too long checking all the status
registers when there are lots of ports.  The inter-character time is
too long for reading all the input even when the interrupt is for a
transmitter interrupt on the same port, and at 921600 bps the inter-char
time is 10.85 usec and was often exceeded with just 2 ports, leaving
the transmitters idle for about 6% of the time.

The tweak is to break out of the read loop after reading 1 char if
output can be done.  This avoids most of the idle transmitter time for
2 active ports at 921600 bps bidirectional on the test system.  It
also reduces overhead by about 20%.  More complete fixes use the
programmable tx low watermark on 16950's and reduce overhead by another
65%.
2003-11-17 07:21:19 +00:00
..
sio_ebus.c s=include <ofw/=include <dev/ofw/= to reflect removal of -I$S/dev 2003-08-23 00:11:16 +00:00
sio_isa.c Fix copyright comment & FBSDID style nits. 2003-08-25 09:48:48 +00:00
sio_pccard.c Include pccard/pccard_cis.h here too 2003-10-07 04:26:14 +00:00
sio_pci.c Remove explicit cardbus attachments from drivers where this is identical 2003-11-03 09:22:18 +00:00
sio_puc.c Use __FBSDID(). 2003-08-24 18:03:45 +00:00
sio.c Tweaked the siointr1() so that it works better at 921600 bps, especially 2003-11-17 07:21:19 +00:00
sioreg.h Moved the definitions of the bits in the ns*50 registers from sioreg.h 2003-09-16 08:08:08 +00:00
siovar.h Remove __P. 2002-03-20 02:08:01 +00:00