X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=ppcskel.git;a=blobdiff_plain;f=exception.c;h=f439b149428386c03b14ae53a388526cfe4fa377;hp=44055f119c13c0c07fe151506582472676b9f86f;hb=e256c484ff2f56a6a58547c88b3763e8f2ae2c13;hpb=3169c95c4ddd84c74a397760d617e840530c13e0 diff --git a/exception.c b/exception.c index 44055f1..f439b14 100644 --- a/exception.c +++ b/exception.c @@ -12,6 +12,7 @@ Copyright (C) 2008 Segher Boessenkool #include "string.h" #include "irq.h" +#include "hollywood.h" extern char exception_2200_start, exception_2200_end; @@ -19,24 +20,9 @@ void exception_handler(int exception) { // check if the exception was actually an interrupt if (exception == 0x500) { - u32 cookie; - - _CPU_ISR_Disable(cookie); - printf("\nInterrupt occured ;-) Which one? -> "); - u32 enabled = read32(BW_PI_IRQMASK); - u32 flags = read32(BW_PI_IRQFLAG); - flags = flags & enabled; - if (flags & (1<<1)) { // RESET - write32(BW_PI_IRQFLAG, 1<<1); - printf("RESET :)\n"); - } - if (flags & (1<<14)) { // Hollywood-PIC IRQ - write32(BW_PI_IRQFLAG, 1<<14); - write32(HW_PPCIRQFLAG, ~0); // dirty - printf("Hollywood-PIC :)\n"); - } - _CPU_ISR_Restore(cookie); - + u32 cookie = irq_kill(); + irq_handler(); + irq_restore(cookie); return; }