Hello,so I sat down and ripped macppc's extintr.c apart and a few minutes ago my PowerBook went multiuser with the new interrupt code.
For macppc we need to support 4 different PICs: - GrandCentral - 32 IRQs, MP capable - ohare - 32 IRQs, might have a 2nd, identical PIC, no MP capability - Heathrow - 64 IRQs, might have a 2nd identical PIC, MP capable - and OpenPIC I only did ohare for now, because that's what the PowerBook uses.We need an additional method - pic_reenable_irq, which checks for lost interrupts and marks them as pending. Since the pending filed is in struct cpu we can't do that during setup, at least not on macppc. The spl* stuff in interrupts.c should probably go to powerpc/ so only the actual PIC setup stays there. Then, what's openpic_eoi() for? Just interrupt clearing? I added pic_ack_irq for it but that can probably go. Some of the stuff in pic/ is rather powerpc-ish ( mtmsr/mfmsr etc. ) - we should probably require macros for that in machine/intr.h, with that the code would be pretty much MI. Then we need to specify how PICs are supposed to signal IPIs, that seems to be rather different between GC and OpenPIC. And lastly - is there a good reason to let only CPU 0 take non-IPI interrupts? I think with a bunch of mutex_enter/mutex_exit we can let them all help.
have fun Michael
Attachment:
macppc.tar.gz
Description: GNU Zip compressed data
Attachment:
pic.tar.gz
Description: GNU Zip compressed data
Attachment:
PGP.sig
Description: This is a digitally signed message part