114 lines
1.7 KiB
ArmAsm
114 lines
1.7 KiB
ArmAsm
|
/*
|
||
|
* int-handler.S
|
||
|
*
|
||
|
* Based on the cobalt handler.
|
||
|
*/
|
||
|
#include <asm/asm.h>
|
||
|
#include <asm/mipsregs.h>
|
||
|
#include <asm/addrspace.h>
|
||
|
#include <asm/regdef.h>
|
||
|
#include <asm/stackframe.h>
|
||
|
|
||
|
/*
|
||
|
* galileo_handle_int -
|
||
|
* We check for the timer first, then check PCI ints A and D.
|
||
|
* Then check for serial IRQ and fall through.
|
||
|
*/
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
.set noat
|
||
|
NESTED(galileo_handle_int, PT_SIZE, sp)
|
||
|
SAVE_ALL
|
||
|
CLI
|
||
|
.set at
|
||
|
mfc0 t0,CP0_CAUSE
|
||
|
mfc0 t2,CP0_STATUS
|
||
|
|
||
|
and t0,t2
|
||
|
|
||
|
andi t1,t0,STATUSF_IP4 /* int2 hardware line (timer) */
|
||
|
bnez t1,ll_gt64120_irq
|
||
|
andi t1,t0,STATUSF_IP2 /* int0 hardware line */
|
||
|
bnez t1,ll_pci_intA
|
||
|
andi t1,t0,STATUSF_IP5 /* int3 hardware line */
|
||
|
bnez t1,ll_pci_intD
|
||
|
andi t1,t0,STATUSF_IP6 /* int4 hardware line */
|
||
|
bnez t1,ll_serial_irq
|
||
|
andi t1,t0,STATUSF_IP7 /* compare int */
|
||
|
bnez t1,ll_compare_irq
|
||
|
nop
|
||
|
|
||
|
/* wrong alarm or masked ... */
|
||
|
j spurious_interrupt
|
||
|
nop
|
||
|
END(galileo_handle_int)
|
||
|
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_gt64120_irq:
|
||
|
li a0,4
|
||
|
move a1,sp
|
||
|
jal do_IRQ
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_compare_irq:
|
||
|
li a0,7
|
||
|
move a1,sp
|
||
|
jal do_IRQ
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_pci_intA:
|
||
|
move a0,sp
|
||
|
jal pci_intA
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
|
||
|
#if 0
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_pci_intB:
|
||
|
move a0,sp
|
||
|
jal pci_intB
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_pci_intC:
|
||
|
move a0,sp
|
||
|
jal pci_intC
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
#endif
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_pci_intD:
|
||
|
move a0,sp
|
||
|
jal pci_intD
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|
||
|
|
||
|
.align 5
|
||
|
.set reorder
|
||
|
ll_serial_irq:
|
||
|
li a0,6
|
||
|
move a1,sp
|
||
|
jal do_IRQ
|
||
|
nop
|
||
|
j ret_from_irq
|
||
|
nop
|