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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: %F% %I% %G% %U% %#%
  3.  */
  4. /*
  5. ** amigaints.h -- Amiga Linux interrupt handling structs and prototypes
  6. **
  7. ** Copyright 1992 by Greg Harp
  8. **
  9. ** This file is subject to the terms and conditions of the GNU General Public
  10. ** License.  See the file COPYING in the main directory of this archive
  11. ** for more details.
  12. **
  13. ** Created 10/2/92 by Greg Harp
  14. */
  15. #ifdef __KERNEL__
  16. #ifndef _ASMm68k_AMIGAINTS_H_
  17. #define _ASMm68k_AMIGAINTS_H_
  18. /*
  19. ** Amiga Interrupt sources.
  20. **
  21. */
  22. #define AUTO_IRQS           (8)
  23. #define AMI_STD_IRQS        (14)
  24. #define CIA_IRQS            (5)
  25. #define AMI_IRQS            (32) /* AUTO_IRQS+AMI_STD_IRQS+2*CIA_IRQS */
  26. /* vertical blanking interrupt */
  27. #define IRQ_AMIGA_VERTB     0
  28. /* copper interrupt */
  29. #define IRQ_AMIGA_COPPER    1
  30. /* Audio interrupts */
  31. #define IRQ_AMIGA_AUD0     2
  32. #define IRQ_AMIGA_AUD1     3
  33. #define IRQ_AMIGA_AUD2     4
  34. #define IRQ_AMIGA_AUD3     5
  35. /* Blitter done interrupt */
  36. #define IRQ_AMIGA_BLIT     6
  37. /* floppy disk interrupts */
  38. #define IRQ_AMIGA_DSKSYN    7
  39. #define IRQ_AMIGA_DSKBLK    8
  40. /* builtin serial port interrupts */
  41. #define IRQ_AMIGA_RBF     9
  42. #define IRQ_AMIGA_TBE     10
  43. /* software interrupts */
  44. #define IRQ_AMIGA_SOFT      11
  45. /* interrupts from external hardware */
  46. #define IRQ_AMIGA_PORTS     12
  47. #define IRQ_AMIGA_EXTER     13
  48. /* CIA interrupt sources */
  49. #define IRQ_AMIGA_CIAA      14
  50. #define IRQ_AMIGA_CIAA_TA   14
  51. #define IRQ_AMIGA_CIAA_TB   15
  52. #define IRQ_AMIGA_CIAA_ALRM 16
  53. #define IRQ_AMIGA_CIAA_SP   17
  54. #define IRQ_AMIGA_CIAA_FLG  18
  55. #define IRQ_AMIGA_CIAB      19
  56. #define IRQ_AMIGA_CIAB_TA   19
  57. #define IRQ_AMIGA_CIAB_TB   20
  58. #define IRQ_AMIGA_CIAB_ALRM 21
  59. #define IRQ_AMIGA_CIAB_SP   22
  60. #define IRQ_AMIGA_CIAB_FLG  23
  61. /* auto-vector interrupts */
  62. #define IRQ_AMIGA_AUTO      24
  63. #define IRQ_AMIGA_AUTO_0    24 /* This is just a dummy */
  64. #define IRQ_AMIGA_AUTO_1    25
  65. #define IRQ_AMIGA_AUTO_2    26
  66. #define IRQ_AMIGA_AUTO_3    27
  67. #define IRQ_AMIGA_AUTO_4    28
  68. #define IRQ_AMIGA_AUTO_5    29
  69. #define IRQ_AMIGA_AUTO_6    30
  70. #define IRQ_AMIGA_AUTO_7    31
  71. #define IRQ_FLOPPY     IRQ_AMIGA_DSKBLK
  72. /* INTREQR masks */
  73. #define IRQ1_MASK   0x0007 /* INTREQR mask for IRQ 1 */
  74. #define IRQ2_MASK   0x0008 /* INTREQR mask for IRQ 2 */
  75. #define IRQ3_MASK   0x0070 /* INTREQR mask for IRQ 3 */
  76. #define IRQ4_MASK   0x0780 /* INTREQR mask for IRQ 4 */
  77. #define IRQ5_MASK   0x1800 /* INTREQR mask for IRQ 5 */
  78. #define IRQ6_MASK   0x2000 /* INTREQR mask for IRQ 6 */
  79. #define IRQ7_MASK   0x4000 /* INTREQR mask for IRQ 7 */
  80. #define IF_SETCLR   0x8000      /* set/clr bit */
  81. #define IF_INTEN    0x4000 /* master interrupt bit in INT* registers */
  82. #define IF_EXTER    0x2000 /* external level 6 and CIA B interrupt */
  83. #define IF_DSKSYN   0x1000 /* disk sync interrupt */
  84. #define IF_RBF     0x0800 /* serial receive buffer full interrupt */
  85. #define IF_AUD3     0x0400 /* audio channel 3 done interrupt */
  86. #define IF_AUD2     0x0200 /* audio channel 2 done interrupt */
  87. #define IF_AUD1     0x0100 /* audio channel 1 done interrupt */
  88. #define IF_AUD0     0x0080 /* audio channel 0 done interrupt */
  89. #define IF_BLIT     0x0040 /* blitter done interrupt */
  90. #define IF_VERTB    0x0020 /* vertical blanking interrupt */
  91. #define IF_COPER    0x0010 /* copper interrupt */
  92. #define IF_PORTS    0x0008 /* external level 2 and CIA A interrupt */
  93. #define IF_SOFT     0x0004 /* software initiated interrupt */
  94. #define IF_DSKBLK   0x0002 /* diskblock DMA finished */
  95. #define IF_TBE     0x0001 /* serial transmit buffer empty interrupt */
  96. extern void amiga_do_irq(int irq, struct pt_regs *fp);
  97. extern void amiga_do_irq_list(int irq, struct pt_regs *fp);
  98. /* CIA interrupt control register bits */
  99. #define CIA_ICR_TA 0x01
  100. #define CIA_ICR_TB 0x02
  101. #define CIA_ICR_ALRM 0x04
  102. #define CIA_ICR_SP 0x08
  103. #define CIA_ICR_FLG 0x10
  104. #define CIA_ICR_ALL 0x1f
  105. #define CIA_ICR_SETCLR 0x80
  106. /* to access the interrupt control registers of CIA's use only
  107. ** these functions, they behave exactly like the amiga os routines
  108. */
  109. extern struct ciabase ciaa_base, ciab_base;
  110. extern unsigned char cia_set_irq(unsigned int irq, int set);
  111. extern unsigned char cia_able_irq(unsigned int irq, int enable);
  112. #endif /* asm-m68k/amigaints.h */
  113. #endif /* __KERNEL__ */