home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm26 / irqchip.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.7 KB  |  102 lines

  1. /*
  2.  *  linux/include/asm-arm/mach/irq.h
  3.  *
  4.  *  Copyright (C) 1995-2000 Russell King.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #ifndef __ASM_ARM_MACH_IRQ_H
  11. #define __ASM_ARM_MACH_IRQ_H
  12.  
  13. struct irqdesc;
  14. struct pt_regs;
  15. struct seq_file;
  16.  
  17. typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *);
  18. typedef void (*irq_control_t)(unsigned int);
  19.  
  20. struct irqchip {
  21.     /*
  22.      * Acknowledge the IRQ.
  23.      * If this is a level-based IRQ, then it is expected to mask the IRQ
  24.      * as well.
  25.      */
  26.     void (*ack)(unsigned int);
  27.     /*
  28.      * Mask the IRQ in hardware.
  29.      */
  30.     void (*mask)(unsigned int);
  31.     /*
  32.      * Unmask the IRQ in hardware.
  33.      */
  34.     void (*unmask)(unsigned int);
  35.     /*
  36.      * Re-run the IRQ
  37.      */
  38.     void (*rerun)(unsigned int);
  39.     /*
  40.      * Set the type of the IRQ.
  41.      */
  42.     int (*type)(unsigned int, unsigned int);
  43. };
  44.  
  45. struct irqdesc {
  46.     irq_handler_t    handle;
  47.     struct irqchip    *chip;
  48.     struct irqaction *action;
  49.  
  50.     unsigned int    enabled  : 1;        /* IRQ is currently enabled   */
  51.     unsigned int    triggered: 1;        /* IRQ has occurred          */
  52.     unsigned int    running  : 1;        /* IRQ is running             */
  53.     unsigned int    pending  : 1;        /* IRQ is pending          */
  54.     unsigned int    probing  : 1;        /* IRQ in use for a probe     */
  55.     unsigned int    probe_ok : 1;        /* IRQ can be used for probe  */
  56.     unsigned int    valid    : 1;        /* IRQ claimable          */
  57.     unsigned int    noautoenable : 1;    /* don't automatically enable IRQ */
  58.     unsigned int    unused   :23;
  59.     unsigned int    depth;            /* disable depth          */
  60.  
  61.     /*
  62.      * IRQ lock detection
  63.      */
  64.     unsigned int    lck_cnt;
  65.     unsigned int    lck_pc;
  66.     unsigned int    lck_jif;
  67. };
  68.  
  69. extern struct irqdesc irq_desc[];
  70.  
  71. /*
  72.  * This is internal.  Do not use it.
  73.  */
  74. extern void (*init_arch_irq)(void);
  75. extern void init_FIQ(void);
  76. extern int show_fiq_list(struct seq_file *, void *);
  77. void __set_irq_handler(unsigned int irq, irq_handler_t, int);
  78.  
  79. /*
  80.  * External stuff.
  81.  */
  82. #define set_irq_handler(irq,handler)        __set_irq_handler(irq,handler,0)
  83. #define set_irq_chained_handler(irq,handler)    __set_irq_handler(irq,handler,1)
  84.  
  85. void set_irq_chip(unsigned int irq, struct irqchip *);
  86. void set_irq_flags(unsigned int irq, unsigned int flags);
  87.  
  88. #define IRQF_VALID    (1 << 0)
  89. #define IRQF_PROBE    (1 << 1)
  90. #define IRQF_NOAUTOEN    (1 << 2)
  91.  
  92. /*
  93.  * Built-in IRQ handlers.
  94.  */
  95. void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  96. void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  97. void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  98. void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs);
  99. void dummy_mask_unmask_irq(unsigned int irq);
  100.  
  101. #endif
  102.