irq.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/include/asm-parisc/irq.h
  3.  *
  4.  * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar,
  5.  * Copyright 1999 SuSE GmbH
  6.  *
  7.  * IRQ/IPI changes taken from work by Thomas Radke
  8.  * <tomsoft@informatik.tu-chemnitz.de>
  9.  */
  10. #ifndef _ASM_PARISC_IRQ_H
  11. #define _ASM_PARISC_IRQ_H
  12. #include <asm/ptrace.h>
  13. #include <asm/types.h>
  14. #include <linux/string.h>
  15. #include <linux/interrupt.h>
  16. #define CPU_IRQ_REGION 1
  17. #define TIMER_IRQ (IRQ_FROM_REGION(CPU_IRQ_REGION) | 0)
  18. #define IPI_IRQ (IRQ_FROM_REGION(CPU_IRQ_REGION) | 1)
  19. /* This should be 31 for PA1.1 binaries and 63 for PA-2.0 wide mode */
  20. #define MAX_CPU_IRQ (BITS_PER_LONG - 1)
  21. #if BITS_PER_LONG == 32
  22. #  define IRQ_REGION_SHIFT  5
  23. #else
  24. #  define IRQ_REGION_SHIFT  6
  25. #endif
  26. #define IRQ_PER_REGION (1 << IRQ_REGION_SHIFT)
  27. #define NR_IRQ_REGS 16
  28. #define NR_IRQS (NR_IRQ_REGS * IRQ_PER_REGION)
  29. #define IRQ_REGION(irq)  ((irq) >> IRQ_REGION_SHIFT)
  30. #define IRQ_OFFSET(irq) ((irq) & ((1<<IRQ_REGION_SHIFT)-1))
  31. #define IRQ_FROM_REGION(reg) ((reg) << IRQ_REGION_SHIFT)
  32. #define EISA_IRQ_REGION 0 /* region 0 needs to be reserved for EISA */
  33. #define EISA_MAX_IRQS 16 /* max. (E)ISA irq line */
  34. struct irq_region_ops {
  35. void (*disable_irq)(void *dev, int irq);
  36. void (* enable_irq)(void *dev, int irq);
  37. void (*   mask_irq)(void *dev, int irq);
  38. void (* unmask_irq)(void *dev, int irq);
  39. };
  40. struct irq_region_data {
  41. void *dev;
  42. const char *name;
  43. int irqbase;
  44. unsigned int status[IRQ_PER_REGION]; /* IRQ status */
  45. };
  46. struct irq_region {
  47. struct irq_region_ops ops;
  48. struct irq_region_data data;
  49. struct irqaction *action;
  50. };
  51. extern struct irq_region *irq_region[NR_IRQ_REGS];
  52. static __inline__ int irq_cannonicalize(int irq)
  53. {
  54. #ifdef CONFIG_EISA
  55. return (irq == (IRQ_FROM_REGION(EISA_IRQ_REGION)+2) 
  56. ? (IRQ_FROM_REGION(EISA_IRQ_REGION)+9) : irq);
  57. #else
  58. return irq;
  59. #endif
  60. }
  61. extern void disable_irq(int);
  62. #define disable_irq_nosync(i) disable_irq(i)
  63. extern void enable_irq(int);
  64. extern void do_irq(struct irqaction *a, int i, struct pt_regs *p);
  65. extern void do_irq_mask(unsigned long mask, struct irq_region *region,
  66. struct pt_regs *regs);
  67. extern struct irq_region *alloc_irq_region(int count, struct irq_region_ops *ops,
  68. const char *name, void *dev);
  69. extern int txn_alloc_irq(void);
  70. extern int txn_claim_irq(int);
  71. extern unsigned int txn_alloc_data(int, unsigned int);
  72. extern unsigned long txn_alloc_addr(int);
  73. /* soft power switch support (power.c) */
  74. extern struct tasklet_struct power_tasklet;
  75. #endif /* _ASM_PARISC_IRQ_H */