Subject: More on that Hayes ESP I can't seem to get to work
To: None <current-users@NetBSD.ORG>
From: Gerald C. Simmons <darykon!simmons@nwnexus.wa.com>
List: current-users
Date: 05/15/1995 07:58:40
I dove in again this weekend having convinced myself I either had a hardware
problem or an IRQ conflict. The following is a core dump of what I observed:

Expt #1:  I reconfigured the card to use IRQ 5 instead of three. I did not
	  reconfigure my kernel. I wanted to see how it reacted. Interestingly
	  tip got all the way through the port initialization and said
          "connected." When I tried to ~. out, tip hung. I surmized this was
          due it trying to back out of the com port with no interrupt.
          Important to note here that my kernel DID NOT hang.

Expt #2:  I reconfigured my kernel to use IRQ5 on com1 (moved the interrupt.)
	  Had no effect on my cuurent problem, which is basically the machine'
	  hanging if com1 (ESP) is accessed.

At this point I put the card back to IRQ3 (having now conviced myself that the
IRQ's were straight,) put my old kernel back, and dove into the kernel
debugger. What I saw was that when comparam() got called to set up the port
baud rate, frame, etc, this generated an interrupt. It does this with a
standard com port as well. In this case, though, the second time comparam()
gets called and the interrupt arrives, the interrupt routine ends up in an
endless loop of character transfers. Upon entering comintr the routine reads
the Interrupt Service Register (IIR.) And finds that the interrupt was for
IRR_TXRDY, it calls comstart() then drops down to check if the interrupt has
gone away. It hasn't, and the next one received is IIR_RXRDY. Execution now
procedes to checking the LSR and subsequently ttyinput is called,
(*linesw[tp ...]) What happens now is a continuous loop of character fetches
and re-checking the interrupt status, machine hangs.

A couple other experiments I did, showed some other curious behavior:

Expt #3:  The ESP comes with a DOS program to set certain features of the
	  card. I.E. enabling the 1024 byte FIFOS and enabling RTSCTS flow
	  control. I used this program to enable the 1024 byte FIFO's. After
	  booting netbsd and running through the same kernel debugging
          exercize. The interrupt loop now occurs after the FIRST call to
          comparam().

Expt #4   When I enables RTS/CTS flow control on the card another odd thing
	  occured. While NetBSD was booting, it hung up cold at "setting tty
          flags" 

I know other people have gotten these ESP ports to work. I'm wondering if
Hayes has modified the board recently, and the one I purchased is different
from the ones other people have working. Any clues?

Gerry Simmons
simmons@darykon.wa.com