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

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef __ASM_SH_IRQ_H
  2. #define __ASM_SH_IRQ_H
  3. /*
  4.  *
  5.  * linux/include/asm-sh/irq.h
  6.  *
  7.  * Copyright (C) 1999  Niibe Yutaka & Takeshi Yaegashi
  8.  * Copyright (C) 2000  Kazumoto Kojima
  9.  *
  10.  */
  11. #include <linux/config.h>
  12. #include <asm/machvec.h>
  13. #include <asm/ptrace.h> /* for pt_regs */
  14. #if defined(__sh3__)
  15. #define INTC_IPRA   0xfffffee2UL
  16. #define INTC_IPRB   0xfffffee4UL
  17. #elif defined(__SH4__)
  18. #define INTC_IPRA 0xffd00004UL
  19. #define INTC_IPRB 0xffd00008UL
  20. #define INTC_IPRC 0xffd0000cUL
  21. #endif
  22. #define TIMER_IRQ 16
  23. #define TIMER_IPR_ADDR INTC_IPRA
  24. #define TIMER_IPR_POS  3
  25. #define TIMER_PRIORITY  2
  26. #define RTC_IRQ 22
  27. #define RTC_IPR_ADDR INTC_IPRA
  28. #define RTC_IPR_POS  0
  29. #define RTC_PRIORITY TIMER_PRIORITY
  30. #if defined(__sh3__)
  31. #define DMTE0_IRQ 48
  32. #define DMTE1_IRQ 49
  33. #define DMTE2_IRQ 50
  34. #define DMTE3_IRQ 51
  35. #define DMA_IPR_ADDR INTC_IPRE
  36. #define DMA_IPR_POS 3
  37. #define DMA_PRIORITY 7
  38. #elif defined(__SH4__)
  39. #define DMTE0_IRQ 34
  40. #define DMTE1_IRQ 35
  41. #define DMTE2_IRQ 36
  42. #define DMTE3_IRQ 37
  43. #define DMAE_IRQ 38
  44. #define DMA_IPR_ADDR INTC_IPRC
  45. #define DMA_IPR_POS 2
  46. #define DMA_PRIORITY 7
  47. #endif
  48. #if defined (CONFIG_CPU_SUBTYPE_SH7707) || defined (CONFIG_CPU_SUBTYPE_SH7708) || 
  49.     defined (CONFIG_CPU_SUBTYPE_SH7709) || defined (CONFIG_CPU_SUBTYPE_SH7750) || 
  50.     defined (CONFIG_CPU_SUBTYPE_SH7751)
  51. #define SCI_ERI_IRQ 23
  52. #define SCI_RXI_IRQ 24
  53. #define SCI_TXI_IRQ 25
  54. #define SCI_IPR_ADDR INTC_IPRB
  55. #define SCI_IPR_POS 1
  56. #define SCI_PRIORITY 3
  57. #endif
  58. #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)
  59. #define SCIF_ERI_IRQ 56
  60. #define SCIF_RXI_IRQ 57
  61. #define SCIF_BRI_IRQ 58
  62. #define SCIF_TXI_IRQ 59
  63. #define SCIF_IPR_ADDR INTC_IPRE
  64. #define SCIF_IPR_POS 1
  65. #define SCIF_PRIORITY 3
  66. #define IRDA_ERI_IRQ 52
  67. #define IRDA_RXI_IRQ 53
  68. #define IRDA_BRI_IRQ 54
  69. #define IRDA_TXI_IRQ 55
  70. #define IRDA_IPR_ADDR INTC_IPRE
  71. #define IRDA_IPR_POS 2
  72. #define IRDA_PRIORITY 3
  73. #elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || 
  74.       defined(CONFIG_CPU_SUBTYPE_ST40STB1)
  75. #define SCIF_ERI_IRQ 40
  76. #define SCIF_RXI_IRQ 41
  77. #define SCIF_BRI_IRQ 42
  78. #define SCIF_TXI_IRQ 43
  79. #define SCIF_IPR_ADDR INTC_IPRC
  80. #define SCIF_IPR_POS 1
  81. #define SCIF_PRIORITY 3
  82. #if defined(CONFIG_CPU_SUBTYPE_ST40STB1)
  83. #define SCIF1_ERI_IRQ 23
  84. #define SCIF1_RXI_IRQ 24
  85. #define SCIF1_BRI_IRQ 25
  86. #define SCIF1_TXI_IRQ 26
  87. #define SCIF1_IPR_ADDR INTC_IPRB
  88. #define SCIF1_IPR_POS 1
  89. #define SCIF1_PRIORITY 3
  90. #endif
  91. #endif
  92. /* NR_IRQS is made from three components:
  93.  *   1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules
  94.  *   2. PINT_NR_IRQS   - number of PINT interrupts
  95.  *   3. OFFCHIP_NR_IRQS - numbe of IRQs from off-chip peripherial modules
  96.  */
  97. /* 1. ONCHIP_NR_IRQS */
  98. #ifdef CONFIG_SH_GENERIC
  99. # define ONCHIP_NR_IRQS 144
  100. #else
  101. # if defined(CONFIG_CPU_SUBTYPE_SH7707)
  102. #  define ONCHIP_NR_IRQS 64
  103. #  define PINT_NR_IRQS   16
  104. # elif defined(CONFIG_CPU_SUBTYPE_SH7708)
  105. #  define ONCHIP_NR_IRQS 32
  106. # elif defined(CONFIG_CPU_SUBTYPE_SH7709)
  107. #  define ONCHIP_NR_IRQS 64 // Actually 61
  108. #  define PINT_NR_IRQS   16
  109. # elif defined(CONFIG_CPU_SUBTYPE_SH7750)
  110. #  define ONCHIP_NR_IRQS 48 // Actually 44
  111. # elif defined(CONFIG_CPU_SUBTYPE_SH7751)
  112. #  define ONCHIP_NR_IRQS 72
  113. # elif defined(CONFIG_CPU_SUBTYPE_ST40STB1)
  114. #  define ONCHIP_NR_IRQS 144
  115. # endif
  116. #endif
  117. /* 2. PINT_NR_IRQS */
  118. #ifdef CONFIG_SH_GENERIC
  119. # define PINT_NR_IRQS 16
  120. #else
  121. # ifndef PINT_NR_IRQS
  122. #  define PINT_NR_IRQS 0
  123. # endif
  124. #endif
  125. #if PINT_NR_IRQS > 0
  126. # define PINT_IRQ_BASE  ONCHIP_NR_IRQS
  127. #endif
  128. /* 3. OFFCHIP_NR_IRQS */
  129. #ifdef CONFIG_SH_GENERIC
  130. # define OFFCHIP_NR_IRQS 16
  131. #else
  132. # if defined(CONFIG_HD64461)
  133. #  define OFFCHIP_NR_IRQS 16
  134. # elif defined (CONFIG_SH_BIGSUR) /* must be before CONFIG_HD64465 */
  135. #  define OFFCHIP_NR_IRQS 48
  136. # elif defined(CONFIG_HD64465)
  137. #  define OFFCHIP_NR_IRQS 16
  138. # elif defined (CONFIG_SH_EC3104)
  139. #  define OFFCHIP_NR_IRQS 16
  140. # elif defined (CONFIG_SH_DREAMCAST)
  141. #  define OFFCHIP_NR_IRQS 96
  142. # else
  143. #  define OFFCHIP_NR_IRQS 0
  144. # endif
  145. #endif
  146. #if OFFCHIP_NR_IRQS > 0
  147. # define OFFCHIP_IRQ_BASE (ONCHIP_NR_IRQS + PINT_NR_IRQS)
  148. #endif
  149. /* NR_IRQS. 1+2+3 */
  150. #define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS)
  151. /* In a generic kernel, NR_IRQS is an upper bound, and we should use
  152.  * ACTUAL_NR_IRQS (which uses the machine vector) to get the correct value.
  153.  */
  154. #ifdef CONFIG_SH_GENERIC
  155. # define ACTUAL_NR_IRQS (sh_mv.mv_nr_irqs)
  156. #else
  157. # define ACTUAL_NR_IRQS NR_IRQS
  158. #endif
  159. extern void disable_irq(unsigned int);
  160. extern void disable_irq_nosync(unsigned int);
  161. extern void enable_irq(unsigned int);
  162. /*
  163.  * Simple Mask Register Support
  164.  */
  165. extern void make_maskreg_irq(unsigned int irq);
  166. extern unsigned short *irq_mask_register;
  167. /*
  168.  * Function for "on chip support modules".
  169.  */
  170. extern void make_ipr_irq(unsigned int irq, unsigned int addr,
  171.  int pos,  int priority);
  172. extern void make_imask_irq(unsigned int irq);
  173. #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)
  174. #define INTC_IRR0 0xa4000004UL
  175. #define INTC_IRR1 0xa4000006UL
  176. #define INTC_IRR2 0xa4000008UL
  177. #define INTC_ICR0   0xfffffee0UL
  178. #define INTC_ICR1   0xa4000010UL
  179. #define INTC_ICR2   0xa4000012UL
  180. #define INTC_INTER  0xa4000014UL
  181. #define INTC_IPRC   0xa4000016UL
  182. #define INTC_IPRD   0xa4000018UL
  183. #define INTC_IPRE   0xa400001aUL
  184. #if defined(CONFIG_CPU_SUBTYPE_SH7707)
  185. #define INTC_IPRF 0xa400001cUL
  186. #endif
  187. #define PORT_PACR 0xa4000100UL
  188. #define PORT_PBCR 0xa4000102UL
  189. #define PORT_PCCR 0xa4000104UL
  190. #define PORT_PFCR 0xa400010aUL
  191. #define PORT_PADR   0xa4000120UL
  192. #define PORT_PBDR   0xa4000122UL
  193. #define PORT_PCDR   0xa4000124UL
  194. #define PORT_PFDR   0xa400012aUL
  195. #define IRQ0_IRQ 32
  196. #define IRQ1_IRQ 33
  197. #define IRQ2_IRQ 34
  198. #define IRQ3_IRQ 35
  199. #define IRQ4_IRQ 36
  200. #define IRQ5_IRQ 37
  201. #define IRQ0_IPR_ADDR INTC_IPRC
  202. #define IRQ1_IPR_ADDR INTC_IPRC
  203. #define IRQ2_IPR_ADDR INTC_IPRC
  204. #define IRQ3_IPR_ADDR INTC_IPRC
  205. #define IRQ4_IPR_ADDR INTC_IPRD
  206. #define IRQ5_IPR_ADDR INTC_IPRD
  207. #define IRQ0_IPR_POS 0
  208. #define IRQ1_IPR_POS 1
  209. #define IRQ2_IPR_POS 2
  210. #define IRQ3_IPR_POS 3
  211. #define IRQ4_IPR_POS 0
  212. #define IRQ5_IPR_POS 1
  213. #define IRQ0_PRIORITY 1
  214. #define IRQ1_PRIORITY 1
  215. #define IRQ2_PRIORITY 1
  216. #define IRQ3_PRIORITY 1
  217. #define IRQ4_PRIORITY 1
  218. #define IRQ5_PRIORITY 1
  219. #define PINT0_IRQ 40
  220. #define PINT8_IRQ 41
  221. #define PINT0_IPR_ADDR INTC_IPRD
  222. #define PINT8_IPR_ADDR INTC_IPRD
  223. #define PINT0_IPR_POS 3
  224. #define PINT8_IPR_POS 2
  225. #define PINT0_PRIORITY 2
  226. #define PINT8_PRIORITY 2
  227. extern int ipr_irq_demux(int irq);
  228. #define __irq_demux(irq) ipr_irq_demux(irq)
  229. #else
  230. #define __irq_demux(irq) irq
  231. #endif /* CONFIG_CPU_SUBTYPE_SH7707 || CONFIG_CPU_SUBTYPE_SH7709 */
  232. #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || 
  233.     defined(CONFIG_CPU_SUBTYPE_ST40STB1)
  234. #define INTC_ICR        0xffd00000
  235. #define INTC_ICR_NMIL (1<<15)
  236. #define INTC_ICR_MAI (1<<14)
  237. #define INTC_ICR_NMIB (1<<9)
  238. #define INTC_ICR_NMIE (1<<8)
  239. #define INTC_ICR_IRLM (1<<7)
  240. #endif
  241. #ifdef CONFIG_CPU_SUBTYPE_ST40STB1
  242. #define INTC2_FIRST_IRQ 64
  243. #define NR_INTC2_IRQS 25
  244.  
  245. #define INTC2_BASE0 0xfe080000
  246. #define INTC2_INTC2MODE  (INTC2_BASE0+0x80)
  247.  
  248. #define INTC2_INTPRI_OFFSET 0x00
  249. #define INTC2_INTREQ_OFFSET 0x20
  250. #define INTC2_INTMSK_OFFSET 0x40
  251. #define INTC2_INTMSKCLR_OFFSET 0x60
  252.  
  253. extern void make_intc2_irq(unsigned int irq,unsigned int addr,
  254.                            unsigned int group,int pos,int priority);
  255.  
  256. #endif                                                                        
  257.        
  258. #ifdef CONFIG_SH_GENERIC
  259. static __inline__ int irq_demux(int irq)
  260. {
  261. if (sh_mv.mv_irq_demux) {
  262. irq = sh_mv.mv_irq_demux(irq);
  263. }
  264. return __irq_demux(irq);
  265. }
  266. #elif defined(CONFIG_SH_BIGSUR)
  267. extern int bigsur_irq_demux(int irq);
  268. #define irq_demux(irq) bigsur_irq_demux(irq)
  269. #elif defined(CONFIG_HD64461)
  270. extern int hd64461_irq_demux(int irq);
  271. #define irq_demux(irq) hd64461_irq_demux(irq)
  272. #elif defined(CONFIG_HD64465)
  273. extern int hd64465_irq_demux(int irq);
  274. #define irq_demux(irq) hd64465_irq_demux(irq)
  275. #elif defined(CONFIG_SH_EC3104)
  276. extern int ec3104_irq_demux(int irq);
  277. #define irq_demux ec3104_irq_demux
  278. #elif defined(CONFIG_SH_CAT68701)
  279. extern int cat68701_irq_demux(int irq);
  280. #define irq_demux cat68701_irq_demux
  281. #elif defined(CONFIG_SH_DREAMCAST)
  282. extern int systemasic_irq_demux(int irq);
  283. #define irq_demux systemasic_irq_demux
  284. #else
  285. #define irq_demux(irq) __irq_demux(irq)
  286. #endif
  287. #endif /* __ASM_SH_IRQ_H */