X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=exception.c;h=b2c5373b2f50a7eaeee780b57c52774e24b7123a;hb=0a6cd808a414dab189b1ffac82df6651dfb4ae34;hp=44055f119c13c0c07fe151506582472676b9f86f;hpb=3169c95c4ddd84c74a397760d617e840530c13e0;p=ppcskel.git diff --git a/exception.c b/exception.c index 44055f1..b2c5373 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,15 @@ 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; + } + // check if exception happened due to the decrementer + if (exception == 0x900) { + printf("\nDecrementer exception occured - who cares?\n"); return; }