]> git.sur5r.net Git - u-boot/blobdiff - arch/microblaze/cpu/interrupts.c
Merge git://git.denx.de/u-boot
[u-boot] / arch / microblaze / cpu / interrupts.c
index ee67082188cf78094ea8c5e0a7847223c22eb6f6..7f2ee64ca0af1c8de5c3993fb224b7c232242998 100644 (file)
 
 #undef DEBUG_INT
 
-extern void microblaze_disable_interrupts (void);
-extern void microblaze_enable_interrupts (void);
-
-void enable_interrupts (void)
+void enable_interrupts(void)
 {
        MSRSET(0x2);
 }
 
-int disable_interrupts (void)
+int disable_interrupts(void)
 {
        unsigned int msr;
 
@@ -58,20 +55,21 @@ microblaze_intc_t *intc;
 /* default handler */
 static void def_hdlr(void)
 {
-       puts ("def_hdlr\n");
+       puts("def_hdlr\n");
 }
 
 static void enable_one_interrupt(int irq)
 {
        int mask;
        int offset = 1;
+
        offset <<= irq;
        mask = intc->ier;
        intc->ier = (mask | offset);
 #ifdef DEBUG_INT
-       printf ("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
+       printf("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
                intc->ier);
-       printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+       printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
                intc->iar, intc->mer);
 #endif
 }
@@ -80,25 +78,26 @@ static void disable_one_interrupt(int irq)
 {
        int mask;
        int offset = 1;
+
        offset <<= irq;
        mask = intc->ier;
        intc->ier = (mask & ~offset);
 #ifdef DEBUG_INT
-       printf ("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
+       printf("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
                intc->ier);
-       printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+       printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
                intc->iar, intc->mer);
 #endif
 }
 
-/* adding new handler for interrupt */
-void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
+int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
 {
        struct irq_action *act;
+
        /* irq out of range */
        if ((irq < 0) || (irq > irq_no)) {
-               puts ("IRQ out of range\n");
-               return;
+               puts("IRQ out of range\n");
+               return -1;
        }
        act = &vecs[irq];
        if (hdlr) {             /* enable */
@@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
                act->arg = arg;
                act->count = 0;
                enable_one_interrupt (irq);
-       } else {                /* disable */
-               act->handler = (interrupt_handler_t *) def_hdlr;
-               act->arg = (void *)irq;
-               disable_one_interrupt (irq);
+               return 0;
        }
+
+       /* Disable */
+       act->handler = (interrupt_handler_t *) def_hdlr;
+       act->arg = (void *)irq;
+       disable_one_interrupt(irq);
+       return 1;
 }
 
 /* initialization interrupt controller - hardware */
@@ -122,7 +124,7 @@ static void intc_init(void)
        /* XIntc_Start - hw_interrupt enable and all interrupt enable */
        intc->mer = 0x3;
 #ifdef DEBUG_INT
-       printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+       printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
                intc->iar, intc->mer);
 #endif
 }
@@ -157,7 +159,7 @@ int interrupts_init(void)
        return 0;
 }
 
-void interrupt_handler (void)
+void interrupt_handler(void)
 {
        int irqs = intc->ivr;   /* find active interrupt */
        int mask = 1;