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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * sgint23.h: Defines for the SGI INT2 and INT3 chipsets.
  7.  *
  8.  * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
  9.  * Copyright (C) 1997, 98, 1999, 2000 Ralf Baechle
  10.  * Copyright (C) 1999 Andrew R. Baker (andrewb@uab.edu) - INT2 corrections
  11.  * Copyright (C) 2001 Ladislav Michl (ladis@psi.cz)
  12.  */
  13. #ifndef _ASM_SGI_SGINT23_H
  14. #define _ASM_SGI_SGINT23_H
  15. /* These are the virtual IRQ numbers, we divide all IRQ's into
  16.  * 'spaces', the 'space' determines where and how to enable/disable
  17.  * that particular IRQ on an SGI machine. HPC DMA and MC DMA interrups
  18.  * are not supported this way. Driver is supposed to allocate HPC/MC
  19.  * interrupt as shareable and then look to proper status bit (see
  20.  * HAL2 driver). This will prevent many complications, trust me ;-)
  21.  * --ladis
  22.  */
  23. #define SGINT_EISA 0 /* INDIGO 2 has 16 EISA irq levels */
  24. #define SGINT_CPU 16 /* MIPS CPU define 8 interrupt sources */
  25. #define SGINT_LOCAL0 24 /* INDY has 8 local0 irq levels */
  26. #define SGINT_LOCAL1 32 /* INDY has 8 local1 irq levels */
  27. #define SGINT_LOCAL2 40 /* INDY has 8 local2 vectored irq levels */
  28. #define SGINT_LOCAL3 48 /* INDY has 8 local3 vectored irq levels */
  29. #define SGINT_END 56 /* End of 'spaces' */
  30. /*
  31.  * Individual interrupt definitions for the INDY and Indigo2
  32.  */
  33. #define SGI_SOFT_0_IRQ SGINT_CPU + 0
  34. #define SGI_SOFT_1_IRQ SGINT_CPU + 1
  35. #define SGI_LOCAL_0_IRQ SGINT_CPU + 2
  36. #define SGI_LOCAL_1_IRQ SGINT_CPU + 3
  37. #define SGI_8254_0_IRQ SGINT_CPU + 4
  38. #define SGI_8254_1_IRQ SGINT_CPU + 5
  39. #define SGI_BUSERR_IRQ SGINT_CPU + 6
  40. #define SGI_TIMER_IRQ SGINT_CPU + 7
  41. #define SGI_FIFO_IRQ SGINT_LOCAL0 + 0 /* FIFO full */
  42. #define SGI_GIO_0_IRQ SGI_FIFO_IRQ /* GIO-0 */
  43. #define SGI_WD93_0_IRQ SGINT_LOCAL0 + 1 /* 1st onboard WD93 */
  44. #define SGI_WD93_1_IRQ SGINT_LOCAL0 + 2 /* 2nd onboard WD93 */
  45. #define SGI_ENET_IRQ SGINT_LOCAL0 + 3 /* onboard ethernet */
  46. #define SGI_MCDMA_IRQ SGINT_LOCAL0 + 4 /* MC DMA done */
  47. #define SGI_PARPORT_IRQ SGINT_LOCAL0 + 5 /* Parallel port */
  48. #define SGI_GIO_1_IRQ SGINT_LOCAL0 + 6 /* GE / GIO-1 / 2nd-HPC */
  49. #define SGI_MAP_0_IRQ SGINT_LOCAL0 + 7 /* Mappable interrupt 0 */
  50. #define SGI_GPL0_IRQ SGINT_LOCAL1 + 0 /* General Purpose LOCAL1_N<0> */
  51. #define SGI_PANEL_IRQ SGINT_LOCAL1 + 1 /* front panel */
  52. #define SGI_GPL2_IRQ SGINT_LOCAL1 + 2 /* General Purpose LOCAL1_N<2> */
  53. #define SGI_MAP_1_IRQ SGINT_LOCAL1 + 3 /* Mappable interrupt 1 */
  54. #define SGI_HPCDMA_IRQ SGINT_LOCAL1 + 4 /* HPC DMA done */
  55. #define SGI_ACFAIL_IRQ SGINT_LOCAL1 + 5 /* AC fail */
  56. #define SGI_VINO_IRQ SGINT_LOCAL1 + 6 /* Indy VINO */
  57. #define SGI_GIO_2_IRQ SGINT_LOCAL1 + 7 /* Vert retrace / GIO-2 */
  58. /* Mapped interrupts. These interrupts may be mapped to either 0, or 1
  59.  * We map them to 0 */
  60. #define SGI_VERT_IRQ SGINT_LOCAL2 + 0 /* INT3: newport vertical status */
  61. #define SGI_EISA_IRQ SGINT_LOCAL2 + 3 /* EISA interrupts */
  62. #define SGI_KEYBD_IRQ SGINT_LOCAL2 + 4 /* keyboard */
  63. #define SGI_SERIAL_IRQ SGINT_LOCAL2 + 5 /* onboard serial */
  64. /* INT2 occupies HPC PBUS slot 4, INT3 uses slot 6. */
  65. #define SGI_INT2_BASE 0x1fbd9000 /* physical */
  66. #define SGI_INT3_BASE 0x1fbd9880 /* physical */
  67. struct sgi_ioc_ints {
  68. #ifdef __MIPSEB__
  69. unsigned char _unused0[3];
  70. volatile unsigned char istat0; /* Interrupt status zero */
  71. #else
  72. volatile unsigned char istat0; /* Interrupt status zero */
  73. unsigned char _unused0[3];
  74. #endif
  75. #define ISTAT0_FFULL 0x01
  76. #define ISTAT0_SCSI0 0x02
  77. #define ISTAT0_SCSI1 0x04
  78. #define ISTAT0_ENET 0x08
  79. #define ISTAT0_GFXDMA 0x10
  80. #define ISTAT0_LPR 0x20
  81. #define ISTAT0_HPC2 0x40
  82. #define ISTAT0_LIO2 0x80
  83. #ifdef __MIPSEB__
  84. unsigned char _unused1[3];
  85. volatile unsigned char imask0; /* Interrupt mask zero */
  86. unsigned char _unused2[3];
  87. volatile unsigned char istat1; /* Interrupt status one */
  88. #else
  89. volatile unsigned char imask0; /* Interrupt mask zero */
  90. unsigned char _unused1[3];
  91. volatile unsigned char istat1; /* Interrupt status one */
  92. unsigned char _unused2[3];
  93. #endif
  94. #define ISTAT1_ISDNI 0x01
  95. #define ISTAT1_PWR 0x02
  96. #define ISTAT1_ISDNH 0x04
  97. #define ISTAT1_LIO3 0x08
  98. #define ISTAT1_HPC3 0x10
  99. #define ISTAT1_AFAIL 0x20
  100. #define ISTAT1_VIDEO 0x40
  101. #define ISTAT1_GIO2 0x80
  102. #ifdef __MIPSEB__
  103. unsigned char _unused3[3];
  104. volatile unsigned char imask1; /* Interrupt mask one */
  105. unsigned char _unused4[3];
  106. volatile unsigned char vmeistat; /* VME interrupt status */
  107. unsigned char _unused5[3];
  108. volatile unsigned char cmeimask0; /* VME interrupt mask zero */
  109. unsigned char _unused6[3];
  110. volatile unsigned char cmeimask1; /* VME interrupt mask one */
  111. unsigned char _unused7[3];
  112. volatile unsigned char cmepol; /* VME polarity */
  113. #else
  114. volatile unsigned char imask1; /* Interrupt mask one */
  115. unsigned char _unused3[3];
  116. volatile unsigned char vmeistat; /* VME interrupt status */
  117. unsigned char _unused4[3];
  118. volatile unsigned char cmeimask0; /* VME interrupt mask zero */
  119. unsigned char _unused5[3];
  120. volatile unsigned char cmeimask1; /* VME interrupt mask one */
  121. unsigned char _unused6[3];
  122. volatile unsigned char cmepol; /* VME polarity */
  123. unsigned char _unused7[3];
  124. #endif
  125. };
  126. struct sgi_ioc_timers {
  127. #ifdef __MIPSEB__
  128. unsigned char _unused0[3];
  129. volatile unsigned char tcnt0; /* counter 0 */
  130. unsigned char _unused1[3];
  131. volatile unsigned char tcnt1; /* counter 1 */
  132. unsigned char _unused2[3];
  133. volatile unsigned char tcnt2; /* counter 2 */
  134. unsigned char _unused3[3];
  135. volatile unsigned char tcword; /* control word */
  136. #else
  137. volatile unsigned char tcnt0; /* counter 0 */
  138. unsigned char _unused0[3];
  139. volatile unsigned char tcnt1; /* counter 1 */
  140. unsigned char _unused1[3];
  141. volatile unsigned char tcnt2; /* counter 2 */
  142. unsigned char _unused2[3];
  143. volatile unsigned char tcword; /* control word */
  144. unsigned char _unused3[3];
  145. #endif
  146. };
  147. /* Timer control word bits. */
  148. #define SGINT_TCWORD_BCD    0x01 /* Use BCD mode for counters */
  149. #define SGINT_TCWORD_MMASK  0x0e /* Mode bitmask. */
  150. #define SGINT_TCWORD_MITC   0x00 /* IRQ on terminal count (doesn't work) */
  151. #define SGINT_TCWORD_MOS    0x02 /* One-shot IRQ mode. */
  152. #define SGINT_TCWORD_MRGEN  0x04 /* Normal rate generation */
  153. #define SGINT_TCWORD_MSWGEN 0x06 /* Square wave generator mode */
  154. #define SGINT_TCWORD_MSWST  0x08 /* Software strobe */
  155. #define SGINT_TCWORD_MHWST  0x0a /* Hardware strobe */
  156. #define SGINT_TCWORD_CMASK  0x30 /* Command mask */
  157. #define SGINT_TCWORD_CLAT   0x00 /* Latch command */
  158. #define SGINT_TCWORD_CLSB   0x10 /* LSB read/write */
  159. #define SGINT_TCWORD_CMSB   0x20 /* MSB read/write */
  160. #define SGINT_TCWORD_CALL   0x30 /* Full counter read/write */
  161. #define SGINT_TCWORD_CNT0   0x00 /* Select counter zero */
  162. #define SGINT_TCWORD_CNT1   0x40 /* Select counter one */
  163. #define SGINT_TCWORD_CNT2   0x80 /* Select counter two */
  164. #define SGINT_TCWORD_CRBCK  0xc0 /* Readback command */
  165. #define SGINT_TCSAMP_COUNTER  10255
  166. /* FIXME: What does this really look like?  It was written to have
  167.  * 17 registers, but there are only 16 in my Indigo2.
  168.  * I guessed at which one to remove...   - andrewb
  169.  */
  170. struct sgi_int2_regs {
  171. struct sgi_ioc_ints ints;
  172. volatile u32 ledbits; /* LED control bits */
  173. #define INT2_LED_TXCLK 0x01 /* GPI to TXCLK enable */
  174. #define INT2_LED_SERSLCT0 0x02 /* serial port0: 0=apple 1=pc */
  175. #define INT2_LED_SERSLCT1 0x04 /* serial port1: 0=apple 1=pc */
  176. #define INT2_LED_CHEAPER 0x08 /* 0=cheapernet 1=ethernet */
  177. #define INT2_LED_POWEROFF 0x10 /* Power-off request, active high */
  178. #ifdef __MIPSEB__
  179. unsigned char _unused0[3];
  180. volatile unsigned char tclear; /* Timer clear strobe address */
  181. #else
  182. volatile unsigned char tclear; /* Timer clear strobe address */
  183. unsigned char _unused0[3];
  184. #endif
  185. #define INT2_TCLEAR_T0CLR 0x1 /* Clear timer0 IRQ */
  186. #define INT2_TCLEAR_T1CLR 0x2 /* Clear timer1 IRQ */
  187. /* I am guesing there are only two unused registers here
  188.  * but I could be wrong... - andrewb
  189.  */
  190. /* u32 _unused[3]; */
  191. u32 _unused[2];
  192. struct sgi_ioc_timers timers;
  193. };
  194. struct sgi_int3_regs {
  195. struct sgi_ioc_ints ints;
  196. #ifdef __MIPSEB__
  197. unsigned char _unused0[3];
  198. volatile unsigned char tclear; /* Timer clear strobe address */
  199. #else
  200. volatile unsigned char tclear; /* Timer clear strobe address */
  201. unsigned char _unused0[3];
  202. #endif
  203. volatile u32 estatus; /* Error status reg */
  204. u32 _unused1[2];
  205. struct sgi_ioc_timers timers;
  206. };
  207. extern struct sgi_int2_regs *sgi_i2regs;
  208. extern struct sgi_int3_regs *sgi_i3regs;
  209. extern struct sgi_ioc_ints *ioc_icontrol;
  210. extern struct sgi_ioc_timers *ioc_timers;
  211. extern volatile unsigned char *ioc_tclear;
  212. #endif /* _ASM_SGI_SGINT23_H */