rt5350 中断处理分析

1.   arch/mips/kernel/genex.S

      j    plat_irq_dispatch

2.  arch/mips/rt2880/irq.c

     plat_irq_dispatch

                rt2880_irqdispatch

                           do_IRQ

     do_IRQ定义在   include/asm-mips/irq.h  这个头文件中,asm-mips这个目录链接到asm这里,所以在

    arch/mips/rt2880/irq.c这个文件中 #include <asm/irq.h>

    #define do_IRQ(irq)                            \
    do {                                                      \
            irq_enter();                                   \
            __DO_IRQ_SMTC_HOOK(irq);   \
            generic_handle_irq(irq);               \
            irq_exit();                                       \
    } while (0)

   

   generic_handle_irq定义在  include/linux/irq.h 中,arch/mips/rt2880/irq.c这个文件中  #include <linux/hardirq.h>

   在 include/linux/hardirq.h 中 #include <asm/hardirq.h>  ,在 include/asm_mips/hardirq.h 中 #include <linux/irq.h>

   至此, do_IRQ和 generic_handle_irq 都被包含进了arch/mips/rt2880/irq.c中了。

   

    static inline void generic_handle_irq(unsigned int irq)
    {
             struct irq_desc *desc = irq_desc + irq;

            #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
             desc->handle_irq(irq, desc);
             #else
            if (likely(desc->handle_irq)){
                    desc->handle_irq(irq, desc);
            }
            else{
                   __do_IRQ(irq);
            }
           #endif
    }

   最终调用到了我们熟悉的desc->handle_irq

             

你可能感兴趣的:(rt5350 中断处理分析)