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

嵌入式Linux

开发平台:

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.  */
  12. #ifndef _ASM_SGI_SGINT23_H
  13. #define _ASM_SGI_SGINT23_H
  14. /* These are the virtual IRQ numbers, we divide all IRQ's into
  15.  * 'spaces', the 'space' determines where and how to enable/disable
  16.  * that particular IRQ on an SGI machine.  Add new 'spaces' as new
  17.  * IRQ hardware is supported.
  18.  */
  19. #define SGINT_LOCAL0   0   /* INDY has 8 local0 irq levels */
  20. #define SGINT_LOCAL1   8   /* INDY has 8 local1 irq levels */
  21. #define SGINT_LOCAL2   16  /* INDY has 8 local2 vectored irq levels */
  22. #define SGINT_LOCAL3   24  /* INDY has 8 local3 vectored irq levels */
  23. #define SGINT_GIO      32  /* INDY has 9 GIO irq levels */
  24. #define SGINT_HPCDMA   41  /* INDY has 11 HPCDMA irq _sources_ */
  25. #define SGINT_END      52  /* End of 'spaces' */
  26. /*
  27.  * Individual interrupt definitions for the INDY and Indigo2
  28.  */
  29. #define SGI_WD93_0_IRQ SGINT_LOCAL0 + 1 /* 1st onboard WD93 */
  30. #define SGI_WD93_1_IRQ SGINT_LOCAL0 + 2 /* 2nd onboard WD93 */
  31. #define SGI_ENET_IRQ SGINT_LOCAL0 + 3 /* onboard ethernet */
  32. #define SGI_PANEL_IRQ SGINT_LOCAL1 + 1 /* front panel */
  33. #define SGI_EISA_IRQ SGINT_LOCAL2 + 3 /* EISA interrupts */
  34. #define SGI_KEYBOARD_IRQ SGINT_LOCAL2 + 4 /* keyboard */
  35. #define SGI_SERIAL_IRQ SGINT_LOCAL2 + 5 /* onboard serial */
  36. /* INT2 occupies HPC PBUS slot 4, INT3 uses slot 6. */
  37. #define SGI_INT2_BASE 0x1fbd9000 /* physical */
  38. #define SGI_INT3_BASE 0x1fbd9880 /* physical */
  39. struct sgi_ioc_ints {
  40. #ifdef __MIPSEB__
  41. unsigned char _unused0[3];
  42. volatile unsigned char istat0;    /* Interrupt status zero */
  43. #else
  44. volatile unsigned char istat0;    /* Interrupt status zero */
  45. unsigned char _unused0[3];
  46. #endif
  47. #define ISTAT0_FFULL           0x01
  48. #define ISTAT0_SCSI0           0x02
  49. #define ISTAT0_SCSI1           0x04
  50. #define ISTAT0_ENET            0x08
  51. #define ISTAT0_GFXDMA          0x10
  52. #define ISTAT0_LPR             0x20
  53. #define ISTAT0_HPC2            0x40
  54. #define ISTAT0_LIO2            0x80
  55. #ifdef __MIPSEB__
  56. unsigned char _unused1[3];
  57. volatile unsigned char imask0;    /* Interrupt mask zero */
  58. unsigned char _unused2[3];
  59. volatile unsigned char istat1;    /* Interrupt status one */
  60. #else
  61. volatile unsigned char imask0;    /* Interrupt mask zero */
  62. unsigned char _unused1[3];
  63. volatile unsigned char istat1;    /* Interrupt status one */
  64. unsigned char _unused2[3];
  65. #endif
  66. #define ISTAT1_ISDNI           0x01
  67. #define ISTAT1_PWR             0x02
  68. #define ISTAT1_ISDNH           0x04
  69. #define ISTAT1_LIO3            0x08
  70. #define ISTAT1_HPC3            0x10
  71. #define ISTAT1_AFAIL           0x20
  72. #define ISTAT1_VIDEO           0x40
  73. #define ISTAT1_GIO2            0x80
  74. #ifdef __MIPSEB__
  75. unsigned char _unused3[3];
  76. volatile unsigned char imask1;    /* Interrupt mask one */
  77. unsigned char _unused4[3];
  78. volatile unsigned char vmeistat;  /* VME interrupt status */
  79. unsigned char _unused5[3];
  80. volatile unsigned char cmeimask0; /* VME interrupt mask zero */
  81. unsigned char _unused6[3];
  82. volatile unsigned char cmeimask1; /* VME interrupt mask one */
  83. unsigned char _unused7[3];
  84. volatile unsigned char cmepol;    /* VME polarity */
  85. #else
  86. volatile unsigned char imask1;    /* Interrupt mask one */
  87. unsigned char _unused3[3];
  88. volatile unsigned char vmeistat;  /* VME interrupt status */
  89. unsigned char _unused4[3];
  90. volatile unsigned char cmeimask0; /* VME interrupt mask zero */
  91. unsigned char _unused5[3];
  92. volatile unsigned char cmeimask1; /* VME interrupt mask one */
  93. unsigned char _unused6[3];
  94. volatile unsigned char cmepol;    /* VME polarity */
  95. unsigned char _unused7[3];
  96. #endif
  97. };
  98. struct sgi_ioc_timers {
  99. #ifdef __MIPSEB__
  100. unsigned char _unused0[3];
  101. volatile unsigned char tcnt0;  /* counter 0 */
  102. unsigned char _unused1[3];
  103. volatile unsigned char tcnt1;  /* counter 1 */
  104. unsigned char _unused2[3];
  105. volatile unsigned char tcnt2;  /* counter 2 */
  106. unsigned char _unused3[3];
  107. volatile unsigned char tcword; /* control word */
  108. #else
  109. volatile unsigned char tcnt0;  /* counter 0 */
  110. unsigned char _unused0[3];
  111. volatile unsigned char tcnt1;  /* counter 1 */
  112. unsigned char _unused1[3];
  113. volatile unsigned char tcnt2;  /* counter 2 */
  114. unsigned char _unused2[3];
  115. volatile unsigned char tcword; /* control word */
  116. unsigned char _unused3[3];
  117. #endif
  118. };
  119. /* Timer control word bits. */
  120. #define SGINT_TCWORD_BCD    0x01 /* Use BCD mode for counters */
  121. #define SGINT_TCWORD_MMASK  0x0e /* Mode bitmask. */
  122. #define SGINT_TCWORD_MITC   0x00 /* IRQ on terminal count (doesn't work) */
  123. #define SGINT_TCWORD_MOS    0x02 /* One-shot IRQ mode. */
  124. #define SGINT_TCWORD_MRGEN  0x04 /* Normal rate generation */
  125. #define SGINT_TCWORD_MSWGEN 0x06 /* Square wave generator mode */
  126. #define SGINT_TCWORD_MSWST  0x08 /* Software strobe */
  127. #define SGINT_TCWORD_MHWST  0x0a /* Hardware strobe */
  128. #define SGINT_TCWORD_CMASK  0x30 /* Command mask */
  129. #define SGINT_TCWORD_CLAT   0x00 /* Latch command */
  130. #define SGINT_TCWORD_CLSB   0x10 /* LSB read/write */
  131. #define SGINT_TCWORD_CMSB   0x20 /* MSB read/write */
  132. #define SGINT_TCWORD_CALL   0x30 /* Full counter read/write */
  133. #define SGINT_TCWORD_CNT0   0x00 /* Select counter zero */
  134. #define SGINT_TCWORD_CNT1   0x40 /* Select counter one */
  135. #define SGINT_TCWORD_CNT2   0x80 /* Select counter two */
  136. #define SGINT_TCWORD_CRBCK  0xc0 /* Readback command */
  137. #define SGINT_TCSAMP_COUNTER  10255
  138. /* FIXME: What does this really look like?  It was written to have
  139.  * 17 registers, but there are only 16 in my Indigo2.
  140.  * I guessed at which one to remove...   - andrewb
  141.  */
  142. struct sgi_int2_regs {
  143. struct sgi_ioc_ints ints;
  144. volatile u32 ledbits;    /* LED control bits */
  145. #define INT2_LED_TXCLK         0x01       /* GPI to TXCLK enable */
  146. #define INT2_LED_SERSLCT0      0x02       /* serial port0: 0=apple 1=pc */
  147. #define INT2_LED_SERSLCT1      0x04       /* serial port1: 0=apple 1=pc */
  148. #define INT2_LED_CHEAPER       0x08       /* 0=cheapernet 1=ethernet */
  149. #define INT2_LED_POWEROFF      0x10       /* Power-off request, active high */
  150. #ifdef __MIPSEB__
  151. unsigned char _unused0[3];
  152. volatile unsigned char tclear;    /* Timer clear strobe address */
  153. #else
  154. volatile unsigned char tclear;    /* Timer clear strobe address */
  155. unsigned char _unused0[3];
  156. #endif
  157. #define INT2_TCLEAR_T0CLR      0x1        /* Clear timer0 IRQ */
  158. #define INT2_TCLEAR_T1CLR      0x2        /* Clear timer1 IRQ */
  159. /* I am guessing there are only two unused registers here 
  160.  * but I could be wrong... - andrewb
  161.  */
  162. /* u32 _unused[3]; */
  163. u32 _unused[2];
  164. struct sgi_ioc_timers timers;
  165. };
  166. struct sgi_int3_regs {
  167. struct sgi_ioc_ints ints;
  168. #ifdef __MIPSEB__
  169. unsigned char _unused0[3];
  170. volatile unsigned char tclear; /* Timer clear strobe address */
  171. #else
  172. volatile unsigned char tclear; /* Timer clear strobe address */
  173. unsigned char _unused0[3];
  174. #endif
  175. volatile u32 estatus; /* Error status reg */
  176. u32 _unused1[2];
  177. struct sgi_ioc_timers timers;
  178. };
  179. extern struct sgi_int2_regs *sgi_i2regs;
  180. extern struct sgi_int3_regs *sgi_i3regs;
  181. extern struct sgi_ioc_ints *ioc_icontrol;
  182. extern struct sgi_ioc_timers *ioc_timers;
  183. extern volatile unsigned char *ioc_tclear;
  184. extern void indy_timer_init(void);
  185. #endif /* _ASM_SGI_SGINT23_H */