irq.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef __irq_h
  2. #define __irq_h
  3. /*
  4.  * Please do not include this file in generic code.  There is currently
  5.  * no requirement for any architecture to implement anything held
  6.  * within this file.
  7.  *
  8.  * Thanks. --rmk
  9.  */
  10. #include <linux/config.h>
  11. #if !defined(CONFIG_ARCH_S390)
  12. #include <linux/cache.h>
  13. #include <linux/spinlock.h>
  14. #include <asm/irq.h>
  15. #include <asm/ptrace.h>
  16. /*
  17.  * IRQ line status.
  18.  */
  19. #define IRQ_INPROGRESS 1 /* IRQ handler active - do not enter! */
  20. #define IRQ_DISABLED 2 /* IRQ disabled - do not enter! */
  21. #define IRQ_PENDING 4 /* IRQ pending - replay on enable */
  22. #define IRQ_REPLAY 8 /* IRQ has been replayed but not acked yet */
  23. #define IRQ_AUTODETECT 16 /* IRQ is being autodetected */
  24. #define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */
  25. #define IRQ_LEVEL 64 /* IRQ level triggered */
  26. #define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */
  27. #define IRQ_PER_CPU 256 /* IRQ is per CPU */
  28. /*
  29.  * Interrupt controller descriptor. This is all we need
  30.  * to describe about the low-level hardware. 
  31.  */
  32. struct hw_interrupt_type {
  33. const char * typename;
  34. unsigned int (*startup)(unsigned int irq);
  35. void (*shutdown)(unsigned int irq);
  36. void (*enable)(unsigned int irq);
  37. void (*disable)(unsigned int irq);
  38. void (*ack)(unsigned int irq);
  39. void (*end)(unsigned int irq);
  40. void (*set_affinity)(unsigned int irq, unsigned long mask);
  41. };
  42. typedef struct hw_interrupt_type  hw_irq_controller;
  43. /*
  44.  * This is the "IRQ descriptor", which contains various information
  45.  * about the irq, including what kind of hardware handling it has,
  46.  * whether it is disabled etc etc.
  47.  *
  48.  * Pad this out to 32 bytes for cache and indexing reasons.
  49.  */
  50. typedef struct {
  51. unsigned int status; /* IRQ status */
  52. hw_irq_controller *handler;
  53. struct irqaction *action; /* IRQ action list */
  54. unsigned int depth; /* nested irq disables */
  55. spinlock_t lock;
  56. } ____cacheline_aligned irq_desc_t;
  57. extern irq_desc_t irq_desc [NR_IRQS];
  58. #include <asm/hw_irq.h> /* the arch dependent stuff */
  59. extern int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);
  60. extern int setup_irq(unsigned int , struct irqaction * );
  61. extern hw_irq_controller no_irq_type;  /* needed in every arch ? */
  62. extern void no_action(int cpl, void *dev_id, struct pt_regs *regs);
  63. #endif
  64. #endif /* __asm_h */