#include "hollywood.h"
#include "ipc.h"
#include "bootmii_ppc.h"
-//debug only
-#include "printf.h"
+#include "usb/host/host.h"
+
+void show_frame_no(void);
void irq_initialize(void)
{
- // enable hollywood-pic for ppc
- write32(HW_PPCIRQMASK, 0);
- write32(HW_PPCIRQFLAG, 0xffffffff);
-
- // enable RESET and PIC (#14) interrupts on processor interface
+ // clear flipper-pic (processor interface)
write32(BW_PI_IRQMASK, 0);
write32(BW_PI_IRQFLAG, 0xffffffff);
- //??? -- needed?!
- /*
- write32(HW_PPCIRQMASK+0x04, 0);
- write32(HW_PPCIRQMASK+0x20, 0);
- */
+ // clear hollywood-pic
+ write32(HW_PPCIRQMASK, 0);
+ write32(HW_PPCIRQFLAG, 0xffffffff);
+
+ /* ??? -- needed?!
+ * in mini they do
+ *
+ * write32(HW_ARMIRQMASK+0x04, 0);
+ * write32(HW_ARMIRQMASK+0x20, 0);
+ *
+ *
+ * may it's here following; on the other
+ * hand it's already done by mini...
+ *
+ * write32(HW_PPCIRQMASK+0x04+0x08, 0);
+ * write32(HW_PPCIRQMASK+0x20+0x08, 0);
+ */
_CPU_ISR_Enable()
}
{
u32 enabled = read32(BW_PI_IRQMASK);
u32 flags = read32(BW_PI_IRQFLAG);
- printf("flags1: 0x%08X\n", flags);
flags = flags & enabled;
- if (flags & (1<<1)) { //RESET
+ if (flags & (1<<BW_PI_IRQ_RESET)) {
write32(BW_PI_IRQFLAG, 1<<BW_PI_IRQ_RESET);
- printf("IRQ RESET\n");
+ show_frame_no();
+ printf("IRQ-BW RESET\n");
}
- if (flags & (1<<14)) { //HW-PIC IRQ
+ if (flags & (1<<BW_PI_IRQ_HW)) { //HW-PIC IRQ
u32 hw_enabled = read32(HW_PPCIRQMASK);
u32 hw_flags = read32(HW_PPCIRQFLAG);
- printf("In IRQ handler: 0x%08x 0x%08x 0x%08x\n", hw_enabled, hw_flags, hw_flags & hw_enabled);
+ //printf("In IRQ handler: 0x%08x 0x%08x 0x%08x\n", hw_enabled, hw_flags, hw_flags & hw_enabled);
hw_flags = hw_flags & hw_enabled;
if(hw_flags & IRQF_TIMER) {
- // done by mini already?
- /*
- if (_alarm_frequency) {
- // currently we use the alarm timer only for lame usbgecko polling
- gecko_timer();
- write32(HW_ALARM, read32(HW_TIMER) + _alarm_frequency);
- }
- */
write32(HW_PPCIRQFLAG, IRQF_TIMER);
}
if(hw_flags & IRQF_NAND) {
//sdhc_irq();
}
if (hw_flags & IRQF_OHCI0) {
- printf("IRQ: OHCI0\n");
+ hcdi_irq();
write32(HW_PPCIRQFLAG, IRQF_OHCI0);
- //TODO: ohci0_irq();
}
if (hw_flags & IRQF_OHCI1) {
- printf("IRQ: OHCI1\n");
- write32(HW_PPCIRQFLAG, IRQF_OHCI1);
//TODO: ohci1_irq();
+ write32(HW_PPCIRQFLAG, IRQF_OHCI1);
}
hw_flags &= ~IRQF_ALL;
printf("IRQ: unknown 0x%08x\n", hw_flags);
write32(HW_PPCIRQFLAG, hw_flags);
}
+
+ // not necessary here, but "cleaner"?
write32(BW_PI_IRQFLAG, 1<<BW_PI_IRQ_HW);
- u32 flags2 = read32(BW_PI_IRQFLAG);
- printf("flags2: 0x%08X\n", flags2);
}
-
-// flags &=
}
void irq_bw_enable(u32 irq)
void irq_restore(u32 cookie) {
_CPU_ISR_Restore(cookie);
+ _CPU_ISR_Enable(); //wtf :/
}