Subject: Interrupt types
To: None <tech-kern@netbsd.org>
From: Martin Husemann <martin@rumolt.teuto.de>
List: tech-kern
Date: 11/09/1998 18:40:04
While working on a device driver which is shared (at least right now) between 
NetBSD-atari, NetBSD-amiga and NetBSD-i386 we ran into a problem.

The hardware can be programmed to cope with edged triggered interrupts as 
well as level triggered interrupts - but it has to be programmed slightly
different.

Now the i386 isa bus only supports IST_EDGE. This is a restriction of the
bus's implementation on this plattform, which is not shared by isa bus 
implementations on the atari (and probably on the amiga). The atari isa
bus uses level triggered interrupts...

There currently seems no way to derive the supported interrupt types from
the bus framework. The comments on isa_intrestablish suggest to panic
on an unsupported interrupt type - so there is not even a way to fall back
to other interrupt types if the driver could handle that (which in our case
would be realy easy).

Fortunately the atari bus driver silently ignores the IST_EDGE (instead of
panic), but of course our driver never knows this, so the different
initialization of the hardware is not done correctly. We could #ifdef atari
this, but this doesn't scale and seem to be the wrong way.

What is the right way to handle this?


Martin