Linux IRQ

Linux IRQ have 3 important structures, they are :
1.
include/linux/irq.h
struct irq_desc{
    unsigned int       irq;
    struct irq_chip    *chip;
    struct irqaction   *action;
    ......
};
2.
include/linux/irq.h
struct irq_chip{
    const char      *name;
    unsigned int   (*startup)(unsigned int irq);
    unsigned int   (*shutdown)(unsigned int irq);
    ......
};
3.
include/linux/interrupt.h
struct irqaction{
    irq_handler_t    handler; //user define function
    void                  *dev_id;
    struct irqaction *next;
    ......;
};
------------------------------

------------------------------
The follow is Linux IRQ initailization process:

1).init/main.c
   start_kernel()           ---->      setup_arch()
   start_kernel()           ---->       Init_IRQ()

2).arch/arm/kernel/irq.c
   init_IRQ()                 ---->       init_arch_irq()

3).arch/arm/kernel/setup.c
  setup_arch()             ---->      init_arch_irq = mdesc->init_irq;

4).arch/arm/mach-tcc8900/board-tcc8900.c
   MACHINE_START
       init_irq = tcc8900_init_irq;
   MACHEND

   tcc8900_init_irq()     ---->     tcc8900_irq_init()

5).arch/arm/mach-tcc8900/irq.c

    tcc8900_irq_init()     ---->   set_irq_chip(irqno,&chip),set_irq_handler(irqno,&handle_level_irq),set_irq_flags(irqno, IRQF_VALID)


chip was defined in arch/arm/mach-tcc8900/board-tcc8900.c
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章