vr41xx.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*
  2. * include/asm-mips/vr41xx/vr41xx.h
  3. *
  4. * Include file for NEC VR4100 series.
  5. *
  6. * Copyright (C) 1999 Michael Klar
  7. * Copyright (C) 2001, 2002 Paul Mundt
  8. * Copyright (C) 2002 MontaVista Software, Inc.
  9. * Copyright (C) 2002 TimeSys Corp.
  10. * Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
  11. *
  12. * This program is free software; you can redistribute it and/or modify it
  13. * under the terms of the GNU General Public License as published by the
  14. * Free Software Foundation; either version 2 of the License, or (at your
  15. * option) any later version.
  16. */
  17. #ifndef __NEC_VR41XX_H
  18. #define __NEC_VR41XX_H
  19. #include <linux/interrupt.h>
  20. /*
  21. * CPU Revision
  22. */
  23. /* VR4122 0x00000c70-0x00000c72 */
  24. #define PRID_VR4122_REV1_0 0x00000c70
  25. #define PRID_VR4122_REV2_0 0x00000c70
  26. #define PRID_VR4122_REV2_1 0x00000c70
  27. #define PRID_VR4122_REV3_0 0x00000c71
  28. #define PRID_VR4122_REV3_1 0x00000c72
  29. /* VR4181A 0x00000c73-0x00000c7f */
  30. #define PRID_VR4181A_REV1_0 0x00000c73
  31. #define PRID_VR4181A_REV1_1 0x00000c74
  32. /* VR4131 0x00000c80-0x00000c83 */
  33. #define PRID_VR4131_REV1_2 0x00000c80
  34. #define PRID_VR4131_REV2_0 0x00000c81
  35. #define PRID_VR4131_REV2_1 0x00000c82
  36. #define PRID_VR4131_REV2_2 0x00000c83
  37. /* VR4133 0x00000c84- */
  38. #define PRID_VR4133 0x00000c84
  39. /*
  40. * Bus Control Uint
  41. */
  42. extern unsigned long vr41xx_calculate_clock_frequency(void);
  43. extern unsigned long vr41xx_get_vtclock_frequency(void);
  44. extern unsigned long vr41xx_get_tclock_frequency(void);
  45. /*
  46. * Clock Mask Unit
  47. */
  48. typedef enum {
  49. PIU_CLOCK,
  50. SIU_CLOCK,
  51. AIU_CLOCK,
  52. KIU_CLOCK,
  53. FIR_CLOCK,
  54. DSIU_CLOCK,
  55. CSI_CLOCK,
  56. PCIU_CLOCK,
  57. HSP_CLOCK,
  58. PCI_CLOCK,
  59. CEU_CLOCK,
  60. ETHER0_CLOCK,
  61. ETHER1_CLOCK
  62. } vr41xx_clock_t;
  63. extern void vr41xx_supply_clock(vr41xx_clock_t clock);
  64. extern void vr41xx_mask_clock(vr41xx_clock_t clock);
  65. /*
  66. * Interrupt Control Unit
  67. */
  68. /* CPU core Interrupt Numbers */
  69. #define MIPS_CPU_IRQ_BASE 0
  70. #define MIPS_CPU_IRQ(x) (MIPS_CPU_IRQ_BASE + (x))
  71. #define MIPS_SOFTINT0_IRQ MIPS_CPU_IRQ(0)
  72. #define MIPS_SOFTINT1_IRQ MIPS_CPU_IRQ(1)
  73. #define INT0_IRQ MIPS_CPU_IRQ(2)
  74. #define INT1_IRQ MIPS_CPU_IRQ(3)
  75. #define INT2_IRQ MIPS_CPU_IRQ(4)
  76. #define INT3_IRQ MIPS_CPU_IRQ(5)
  77. #define INT4_IRQ MIPS_CPU_IRQ(6)
  78. #define TIMER_IRQ MIPS_CPU_IRQ(7)
  79. /* SYINT1 Interrupt Numbers */
  80. #define SYSINT1_IRQ_BASE 8
  81. #define SYSINT1_IRQ(x) (SYSINT1_IRQ_BASE + (x))
  82. #define BATTRY_IRQ SYSINT1_IRQ(0)
  83. #define POWER_IRQ SYSINT1_IRQ(1)
  84. #define RTCLONG1_IRQ SYSINT1_IRQ(2)
  85. #define ELAPSEDTIME_IRQ SYSINT1_IRQ(3)
  86. /* RFU */
  87. #define PIU_IRQ SYSINT1_IRQ(5)
  88. #define AIU_IRQ SYSINT1_IRQ(6)
  89. #define KIU_IRQ SYSINT1_IRQ(7)
  90. #define GIUINT_IRQ SYSINT1_IRQ(8)
  91. #define SIU_IRQ SYSINT1_IRQ(9)
  92. #define BUSERR_IRQ SYSINT1_IRQ(10)
  93. #define SOFTINT_IRQ SYSINT1_IRQ(11)
  94. #define CLKRUN_IRQ SYSINT1_IRQ(12)
  95. #define DOZEPIU_IRQ SYSINT1_IRQ(13)
  96. #define SYSINT1_IRQ_LAST DOZEPIU_IRQ
  97. /* SYSINT2 Interrupt Numbers */
  98. #define SYSINT2_IRQ_BASE 24
  99. #define SYSINT2_IRQ(x) (SYSINT2_IRQ_BASE + (x))
  100. #define RTCLONG2_IRQ SYSINT2_IRQ(0)
  101. #define LED_IRQ SYSINT2_IRQ(1)
  102. #define HSP_IRQ SYSINT2_IRQ(2)
  103. #define TCLOCK_IRQ SYSINT2_IRQ(3)
  104. #define FIR_IRQ SYSINT2_IRQ(4)
  105. #define CEU_IRQ SYSINT2_IRQ(4) /* same number as FIR_IRQ */
  106. #define DSIU_IRQ SYSINT2_IRQ(5)
  107. #define PCI_IRQ SYSINT2_IRQ(6)
  108. #define SCU_IRQ SYSINT2_IRQ(7)
  109. #define CSI_IRQ SYSINT2_IRQ(8)
  110. #define BCU_IRQ SYSINT2_IRQ(9)
  111. #define ETHERNET_IRQ SYSINT2_IRQ(10)
  112. #define SYSINT2_IRQ_LAST ETHERNET_IRQ
  113. /* GIU Interrupt Numbers */
  114. #define GIU_IRQ_BASE 40
  115. #define GIU_IRQ(x) (GIU_IRQ_BASE + (x)) /* IRQ 40-71 */
  116. #define GIU_IRQ_LAST GIU_IRQ(31)
  117. extern int vr41xx_set_intassign(unsigned int irq, unsigned char intassign);
  118. extern int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *));
  119. #define PIUINT_COMMAND 0x0040
  120. #define PIUINT_DATA 0x0020
  121. #define PIUINT_PAGE1 0x0010
  122. #define PIUINT_PAGE0 0x0008
  123. #define PIUINT_DATALOST 0x0004
  124. #define PIUINT_STATUSCHANGE 0x0001
  125. extern void vr41xx_enable_piuint(uint16_t mask);
  126. extern void vr41xx_disable_piuint(uint16_t mask);
  127. #define AIUINT_INPUT_DMAEND 0x0800
  128. #define AIUINT_INPUT_DMAHALT 0x0400
  129. #define AIUINT_INPUT_DATALOST 0x0200
  130. #define AIUINT_INPUT_DATA 0x0100
  131. #define AIUINT_OUTPUT_DMAEND 0x0008
  132. #define AIUINT_OUTPUT_DMAHALT 0x0004
  133. #define AIUINT_OUTPUT_NODATA 0x0002
  134. extern void vr41xx_enable_aiuint(uint16_t mask);
  135. extern void vr41xx_disable_aiuint(uint16_t mask);
  136. #define KIUINT_DATALOST 0x0004
  137. #define KIUINT_DATAREADY 0x0002
  138. #define KIUINT_SCAN 0x0001
  139. extern void vr41xx_enable_kiuint(uint16_t mask);
  140. extern void vr41xx_disable_kiuint(uint16_t mask);
  141. #define DSIUINT_CTS 0x0800
  142. #define DSIUINT_RXERR 0x0400
  143. #define DSIUINT_RX 0x0200
  144. #define DSIUINT_TX 0x0100
  145. #define DSIUINT_ALL 0x0f00
  146. extern void vr41xx_enable_dsiuint(uint16_t mask);
  147. extern void vr41xx_disable_dsiuint(uint16_t mask);
  148. #define FIRINT_UNIT 0x0010
  149. #define FIRINT_RX_DMAEND 0x0008
  150. #define FIRINT_RX_DMAHALT 0x0004
  151. #define FIRINT_TX_DMAEND 0x0002
  152. #define FIRINT_TX_DMAHALT 0x0001
  153. extern void vr41xx_enable_firint(uint16_t mask);
  154. extern void vr41xx_disable_firint(uint16_t mask);
  155. extern void vr41xx_enable_pciint(void);
  156. extern void vr41xx_disable_pciint(void);
  157. extern void vr41xx_enable_scuint(void);
  158. extern void vr41xx_disable_scuint(void);
  159. #define CSIINT_TX_DMAEND 0x0040
  160. #define CSIINT_TX_DMAHALT 0x0020
  161. #define CSIINT_TX_DATA 0x0010
  162. #define CSIINT_TX_FIFOEMPTY 0x0008
  163. #define CSIINT_RX_DMAEND 0x0004
  164. #define CSIINT_RX_DMAHALT 0x0002
  165. #define CSIINT_RX_FIFOEMPTY 0x0001
  166. extern void vr41xx_enable_csiint(uint16_t mask);
  167. extern void vr41xx_disable_csiint(uint16_t mask);
  168. extern void vr41xx_enable_bcuint(void);
  169. extern void vr41xx_disable_bcuint(void);
  170. #endif /* __NEC_VR41XX_H */