@ -141,8 +141,8 @@ int interrupts_init (void)
void interrupt_handler ( void )
{
int irqs = ( intc - > isr & intc - > ier ) ; /* find active interrupt */
int i = 1 ;
int irqs = intc - > ivr ; /* find active interrupt */
int mask = 1 ;
# ifdef DEBUG_INT
int value ;
printf ( " INTC isr %x, ier %x, iar %x, mer %x \n " , intc - > isr , intc - > ier ,
@ -150,23 +150,17 @@ void interrupt_handler (void)
R14 ( value ) ;
printf ( " Interrupt handler on %x line, r14 %x \n " , irqs , value ) ;
# endif
struct irq_action * act = vecs ;
while ( irqs ) {
if ( irqs & 1 ) {
struct irq_action * act = vecs + irqs ;
intc - > iar = mask < < irqs ;
# ifdef DEBUG_INT
printf
( " Jumping to interrupt handler rutine addr %x,count %x,arg %x \n " ,
act - > handler , act - > count , act - > arg ) ;
printf
( " Jumping to interrupt handler rutine addr %x,count %x,arg %x \n " ,
act - > handler , act - > count , act - > arg ) ;
# endif
act - > handler ( act - > arg ) ;
act - > count + + ;
intc - > iar = i ;
return ;
}
irqs > > = 1 ;
act + + ;
i < < = 1 ;
}
act - > handler ( act - > arg ) ;
act - > count + + ;
# ifdef DEBUG_INT
printf ( " Dump INTC reg, isr %x, ier %x, iar %x, mer %x \n " , intc - > isr ,