Subject: Re: Interrupt conflicts
To: None <mouse@Rodents.Montreal.QC.CA, port-sparc@netbsd.org>
From: None <eeh@netbsd.org>
List: port-sparc
Date: 01/30/2002 23:52:02
| The machine I've got the interface card in is a Classic.  The console
| tells me
|
| ok cd /iommu/sbus/SUNW,lpvi
| ok .attributes
| reg                      00000001  00300000  00000030 
| intr                     0000003d  00000000 
| model                    zebra
| name                     SUNW,lpvi
|
| When I try to boot with my nascent driver, though, I get this (full
| transcript at end of message):
|
| audioamd0 at sbus0 slot 4 offset 0x1300000 level 7 (ipl 13) softpri 4
| [...]
| lpvi0 at sbus0 slot 1 offset 0x300000 level 13: interface rev 6
| lpvi0: mapped at 0xfe02b000, nintr 1: <-2147483635/0>
| panic: intr_establish: level 13 interrupt tied to fast vector
| Stopped in swapper at   cpu_Debugger+0x4:       jmpl            [%o7 + 0x8], %g
| 0
| db> 

The fast vector stuff is for assembly language interrupt handlers that
are not shared.  Rather than the standard method of polling each handler
to find out which one is causing the interrupt, only one is registerd,
and it's carefully written in assembly so the full context need not be
saved.  

If you want to share that interrupt you will need to switch the
audio device to use a regular interrupt handler.  You also might want to
try profiling it to see if the fast handler really makes that much 
difference.  It certainly shouldn't on faster machines, and C code is
much easier to maintain than assembly.

Eduardo