[SPARC64]: Virtualize IRQ numbers.
authorDavid S. Miller <davem@davemloft.net>
Tue, 20 Jun 2006 08:22:35 +0000 (01:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Jun 2006 08:22:35 +0000 (01:22 -0700)
commit8047e247c899f80c33a23ad7e9e250224f0d26a5
tree253a7ba3c902730928214df5c2b5630d7875cc11
parent37cdcd9e82108f9b899f1631f66ade2e45738a6e
[SPARC64]: Virtualize IRQ numbers.

Inspired by PowerPC XICS interrupt support code.

All IRQs are virtualized in order to keep NR_IRQS from needing
to be too large.  Interrupts on sparc64 are arbitrary 11-bit
values, but we don't need to define NR_IRQS to 2048 if we
virtualize the IRQs.

As PCI and SBUS controller drivers build device IRQs, we divy
out virtual IRQ numbers incrementally starting at 1.  Zero is
a special virtual IRQ used for the timer interrupt.

So device drivers all see virtual IRQs, and all the normal
interfaces such as request_irq(), enable_irq(), etc. translate
that into a real IRQ number in order to configure the IRQ.

At this point knowledge of the struct ino_bucket is almost
entirely contained within arch/sparc64/kernel/irq.c  There are
a few small bits in the PCI controller drivers that need to
be swept away before we can remove ino_bucket's definition
out of asm-sparc64/irq.h and privately into kernel/irq.c

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/irq.c
arch/sparc64/kernel/pci_psycho.c
arch/sparc64/kernel/pci_sabre.c
arch/sparc64/kernel/pci_schizo.c
arch/sparc64/kernel/sbus.c
include/asm-sparc64/irq.h