IRQ Numbering

For the purpose of giving them a number, here are the irq channel assignments:
NOTE: these are software numbers only; the hardware is scattered
IRQ number meaning connected to notes reset by
0 977 
1 SWI 977.1 write 0 to IrqSoft/FiqSoft
2 UART_DEBUG FB.2 & FB.3
4 TIMER0 FB.timer0 10ms system tick FB.Timer0Clear
5 TIMER1 FB.timer FB.Timer1Clear
6 TIMER2 FB.timer FB.Timer2Clear
7 WATCHDOG FB.7
8 ETHER10 FB.8 ETHER10 chip, IRE register
9 ETHER100 FB.9
11 EXTERN_IRQ FB.11 chained from the PIC; never disable this!
15 PCI_PERR1 
PCI_PERR 
PCI_MABORT 
PCI_TABORT
FB.pci general parity error or pci error detected read FB.pci status
16 TIMER0 553.0 internal not used
17 KEYBOARD 553.1
18 PIC_HI conneted to the high PIC; never disable this!
19 UART_2 553.3 read UART.ISR
20 UART 553.4 read UART_CON.ISR
21 MOUSE 553.5
22 UART_IR 553.6
23 PRINTER 553.7
24 RTC alarm 553.8
26 USER_BUTTON actually, this is a button press by the user
27 MODEM 553.11
28 sound transfer finished 553.12
30 IDE 553 internal read IDE status
31 POWERLOW 553.15
 
 

Programming Interrupts

The VNC board has interrupts available from:
    footbridge
    553 chip
    977 chip
Many interrupts have subtle grades. For instance, the serial irq can be set to trigger on
    rx data ready
    tx buffer empty
    fifo's half full
    fifo's empty
    fifo's full
    parity error
    break detect
    etc, etc

To hide all of this from the OS, the include/asm/arch/irq.h and include/asm/arch/irqs.h presents the
OS with a short list of about 25 interrupts. Several of these irq's have multiple sources,
and multiple meanings. In general, however, an irq deals with all aspects of a certain
device, and the OS will probably want to turn irq's on or off, all together.

The irq.h file declares 4 bytes of static data, which keep a ghost of which irq's are on
and which are off. NOTE: when the OS calls:

    get_enabled_irqs()
it is going to get back the ghost of what it previously set, which may not reflect the
hardware condition.