On Wed, Jul 11, 2001 at 01:16:56PM +0100, Phil Thompson wrote: > Is there any documentation around that describes how to move from interrupt > code based on old-irq.c to the new code? Or any other hints or suggestions. First disable CONFIG_ROTTEN_IRQ if you were using that and enable CONFIG_NEW_IRQ. You'll probably have to hack arch/mips/config.in to do that. Next you have to rewrite your systems irq code. You'll have to provide an init_IRQ() function to initialize the interrupt system. As the absolute minimum it'll have to do something like: set_except_vector(0, myasmirqhandler); init_generic_irq(); and initialize the entries for all interrupts used by your system in the irq_desc array like: for (i = 0; i < NUM_MY_INTS; i++) { irq_desc[i].status = IRQ_DISABLED; irq_desc[i].action = 0; irq_desc[i].depth = 1; irq_desc[i].handler = handler; } where handler is a pointer to struct like this one: static struct hw_interrupt_type ip22_my_irq_type = { "My interrupt controller", startup_my_irq, shutdown_my_irq, enable_my_irq, disable_my_irq, mask_and_ack_my_irq, end_my_irq, NULL }; All that's left now is to write the function references in above struct initialization: static void enable_my_irq(unsigned int irq) { /* enable the interrupt in the controller */ } static unsigned int startup_my_irq(unsigned int irq) { enable_my_irq(irq); return 0; /* Never anything pending */ } static void disable_my_irq(unsigned int irq) { /* Disable function in the interrupt controller */ } static void shutdown_my_irq(unsigned int irq) { /* * Disable interrupt in the interrupt controller. Often this function * is identical to disable_my_irq. */ } static void mask_and_ack_my_irq(unsigned int irq) { /* * Mask and acknowledge interrupt. Often this function is identical * to disable_my_irq. Exception is for example the i8259 PICs. */ } static void end_my_irq (unsigned int irq) { if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) enable_my_irq(irq); } Take a look at arch/mips/sgi/indy_int.c but there are more examples. The plan is to nuke old-irq.c early in 2.5; at the same time also something like arch/{i386,mips}/kernel/irq.c will become kernel/irq.c. Ralf