• David S. Miller's avatar
    [SPARC64]: Virtualize IRQ numbers. · 8047e247
    David S. Miller authored
    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: default avatarDavid S. Miller <davem@davemloft.net>
    8047e247
sbus.c 34.1 KB