Subject: Interrupts - soft, hard, and missing
To: None <port-macppc@netbsd.org>
From: Donald Lee <donlee_ppc@icompute.com>
List: port-macppc
Date: 01/04/2001 00:33:02
Dear list,

My status:

	Running NetBSD 1.5 release with patches:

		sys/arch/macppc/macppc/extintr.c
			mod to change handling of ipending to not
			clear newly-set pending soft ints.
			(ftp://ftp.icompute.com/pub/donlee/extintr.c.ok)

			Problem fixed: PPP latency/delay

		sys/dev/ic/cy.c
			Mod to check the CD1400 status register
			in cy_poll() and call cy_intr() "manually"
			if interrupts should have happened but the
			interrupt handler did not get invoked.
			also, loop in cy_intr() for "clean" trip before exit.
			(ftp://ftp.icompute.com/pub/donlee/cy.c.ok)
			Also logs this event once for each 128 times it
			happens...

			Problem fixed: Cyclades 8Y driver does not
			work.

Note: The "fix" in the cyclades driver is actually a massive kludge.
I believe that there is still a problem in the interrupt code that is
dropping newly-occurring interrupts if they occur while interrupts are
masked/disabled.  Without the "manual" call to cy_intr(), the driver
locks up hard, with the interrupt status bits in the CD1400 chip set, and
the handler never gets called.  New interrupts generated by the card
are completely ignored.  It appears that the interrupt hardware is "edge
triggered, and once you miss one, that's it.

-dgl-