interrupts_32.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /*
  2. * Copyright 2010 Tilera Corporation. All Rights Reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License
  6. * as published by the Free Software Foundation, version 2.
  7. *
  8. * This program is distributed in the hope that it will be useful, but
  9. * WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  11. * NON INFRINGEMENT. See the GNU General Public License for
  12. * more details.
  13. */
  14. #ifndef __ARCH_INTERRUPTS_H__
  15. #define __ARCH_INTERRUPTS_H__
  16. /** Mask for an interrupt. */
  17. #ifdef __ASSEMBLER__
  18. /* Note: must handle breaking interrupts into high and low words manually. */
  19. #define INT_MASK(intno) (1 << (intno))
  20. #else
  21. #define INT_MASK(intno) (1ULL << (intno))
  22. #endif
  23. /** Where a given interrupt executes */
  24. #define INTERRUPT_VECTOR(i, pl) (0xFC000000 + ((pl) << 24) + ((i) << 8))
  25. /** Where to store a vector for a given interrupt. */
  26. #define USER_INTERRUPT_VECTOR(i) INTERRUPT_VECTOR(i, 0)
  27. /** The base address of user-level interrupts. */
  28. #define USER_INTERRUPT_VECTOR_BASE INTERRUPT_VECTOR(0, 0)
  29. /** Additional synthetic interrupt. */
  30. #define INT_BREAKPOINT (63)
  31. #define INT_ITLB_MISS 0
  32. #define INT_MEM_ERROR 1
  33. #define INT_ILL 2
  34. #define INT_GPV 3
  35. #define INT_SN_ACCESS 4
  36. #define INT_IDN_ACCESS 5
  37. #define INT_UDN_ACCESS 6
  38. #define INT_IDN_REFILL 7
  39. #define INT_UDN_REFILL 8
  40. #define INT_IDN_COMPLETE 9
  41. #define INT_UDN_COMPLETE 10
  42. #define INT_SWINT_3 11
  43. #define INT_SWINT_2 12
  44. #define INT_SWINT_1 13
  45. #define INT_SWINT_0 14
  46. #define INT_UNALIGN_DATA 15
  47. #define INT_DTLB_MISS 16
  48. #define INT_DTLB_ACCESS 17
  49. #define INT_DMATLB_MISS 18
  50. #define INT_DMATLB_ACCESS 19
  51. #define INT_SNITLB_MISS 20
  52. #define INT_SN_NOTIFY 21
  53. #define INT_SN_FIREWALL 22
  54. #define INT_IDN_FIREWALL 23
  55. #define INT_UDN_FIREWALL 24
  56. #define INT_TILE_TIMER 25
  57. #define INT_IDN_TIMER 26
  58. #define INT_UDN_TIMER 27
  59. #define INT_DMA_NOTIFY 28
  60. #define INT_IDN_CA 29
  61. #define INT_UDN_CA 30
  62. #define INT_IDN_AVAIL 31
  63. #define INT_UDN_AVAIL 32
  64. #define INT_PERF_COUNT 33
  65. #define INT_INTCTRL_3 34
  66. #define INT_INTCTRL_2 35
  67. #define INT_INTCTRL_1 36
  68. #define INT_INTCTRL_0 37
  69. #define INT_BOOT_ACCESS 38
  70. #define INT_WORLD_ACCESS 39
  71. #define INT_I_ASID 40
  72. #define INT_D_ASID 41
  73. #define INT_DMA_ASID 42
  74. #define INT_SNI_ASID 43
  75. #define INT_DMA_CPL 44
  76. #define INT_SN_CPL 45
  77. #define INT_DOUBLE_FAULT 46
  78. #define INT_SN_STATIC_ACCESS 47
  79. #define INT_AUX_PERF_COUNT 48
  80. #define NUM_INTERRUPTS 49
  81. #define QUEUED_INTERRUPTS ( \
  82. INT_MASK(INT_MEM_ERROR) | \
  83. INT_MASK(INT_DMATLB_MISS) | \
  84. INT_MASK(INT_DMATLB_ACCESS) | \
  85. INT_MASK(INT_SNITLB_MISS) | \
  86. INT_MASK(INT_SN_NOTIFY) | \
  87. INT_MASK(INT_SN_FIREWALL) | \
  88. INT_MASK(INT_IDN_FIREWALL) | \
  89. INT_MASK(INT_UDN_FIREWALL) | \
  90. INT_MASK(INT_TILE_TIMER) | \
  91. INT_MASK(INT_IDN_TIMER) | \
  92. INT_MASK(INT_UDN_TIMER) | \
  93. INT_MASK(INT_DMA_NOTIFY) | \
  94. INT_MASK(INT_IDN_CA) | \
  95. INT_MASK(INT_UDN_CA) | \
  96. INT_MASK(INT_IDN_AVAIL) | \
  97. INT_MASK(INT_UDN_AVAIL) | \
  98. INT_MASK(INT_PERF_COUNT) | \
  99. INT_MASK(INT_INTCTRL_3) | \
  100. INT_MASK(INT_INTCTRL_2) | \
  101. INT_MASK(INT_INTCTRL_1) | \
  102. INT_MASK(INT_INTCTRL_0) | \
  103. INT_MASK(INT_BOOT_ACCESS) | \
  104. INT_MASK(INT_WORLD_ACCESS) | \
  105. INT_MASK(INT_I_ASID) | \
  106. INT_MASK(INT_D_ASID) | \
  107. INT_MASK(INT_DMA_ASID) | \
  108. INT_MASK(INT_SNI_ASID) | \
  109. INT_MASK(INT_DMA_CPL) | \
  110. INT_MASK(INT_SN_CPL) | \
  111. INT_MASK(INT_DOUBLE_FAULT) | \
  112. INT_MASK(INT_AUX_PERF_COUNT) | \
  113. 0)
  114. #define NONQUEUED_INTERRUPTS ( \
  115. INT_MASK(INT_ITLB_MISS) | \
  116. INT_MASK(INT_ILL) | \
  117. INT_MASK(INT_GPV) | \
  118. INT_MASK(INT_SN_ACCESS) | \
  119. INT_MASK(INT_IDN_ACCESS) | \
  120. INT_MASK(INT_UDN_ACCESS) | \
  121. INT_MASK(INT_IDN_REFILL) | \
  122. INT_MASK(INT_UDN_REFILL) | \
  123. INT_MASK(INT_IDN_COMPLETE) | \
  124. INT_MASK(INT_UDN_COMPLETE) | \
  125. INT_MASK(INT_SWINT_3) | \
  126. INT_MASK(INT_SWINT_2) | \
  127. INT_MASK(INT_SWINT_1) | \
  128. INT_MASK(INT_SWINT_0) | \
  129. INT_MASK(INT_UNALIGN_DATA) | \
  130. INT_MASK(INT_DTLB_MISS) | \
  131. INT_MASK(INT_DTLB_ACCESS) | \
  132. INT_MASK(INT_SN_STATIC_ACCESS) | \
  133. 0)
  134. #define CRITICAL_MASKED_INTERRUPTS ( \
  135. INT_MASK(INT_MEM_ERROR) | \
  136. INT_MASK(INT_DMATLB_MISS) | \
  137. INT_MASK(INT_DMATLB_ACCESS) | \
  138. INT_MASK(INT_SNITLB_MISS) | \
  139. INT_MASK(INT_SN_NOTIFY) | \
  140. INT_MASK(INT_SN_FIREWALL) | \
  141. INT_MASK(INT_IDN_FIREWALL) | \
  142. INT_MASK(INT_UDN_FIREWALL) | \
  143. INT_MASK(INT_TILE_TIMER) | \
  144. INT_MASK(INT_IDN_TIMER) | \
  145. INT_MASK(INT_UDN_TIMER) | \
  146. INT_MASK(INT_DMA_NOTIFY) | \
  147. INT_MASK(INT_IDN_CA) | \
  148. INT_MASK(INT_UDN_CA) | \
  149. INT_MASK(INT_IDN_AVAIL) | \
  150. INT_MASK(INT_UDN_AVAIL) | \
  151. INT_MASK(INT_PERF_COUNT) | \
  152. INT_MASK(INT_INTCTRL_3) | \
  153. INT_MASK(INT_INTCTRL_2) | \
  154. INT_MASK(INT_INTCTRL_1) | \
  155. INT_MASK(INT_INTCTRL_0) | \
  156. INT_MASK(INT_AUX_PERF_COUNT) | \
  157. 0)
  158. #define CRITICAL_UNMASKED_INTERRUPTS ( \
  159. INT_MASK(INT_ITLB_MISS) | \
  160. INT_MASK(INT_ILL) | \
  161. INT_MASK(INT_GPV) | \
  162. INT_MASK(INT_SN_ACCESS) | \
  163. INT_MASK(INT_IDN_ACCESS) | \
  164. INT_MASK(INT_UDN_ACCESS) | \
  165. INT_MASK(INT_IDN_REFILL) | \
  166. INT_MASK(INT_UDN_REFILL) | \
  167. INT_MASK(INT_IDN_COMPLETE) | \
  168. INT_MASK(INT_UDN_COMPLETE) | \
  169. INT_MASK(INT_SWINT_3) | \
  170. INT_MASK(INT_SWINT_2) | \
  171. INT_MASK(INT_SWINT_1) | \
  172. INT_MASK(INT_SWINT_0) | \
  173. INT_MASK(INT_UNALIGN_DATA) | \
  174. INT_MASK(INT_DTLB_MISS) | \
  175. INT_MASK(INT_DTLB_ACCESS) | \
  176. INT_MASK(INT_BOOT_ACCESS) | \
  177. INT_MASK(INT_WORLD_ACCESS) | \
  178. INT_MASK(INT_I_ASID) | \
  179. INT_MASK(INT_D_ASID) | \
  180. INT_MASK(INT_DMA_ASID) | \
  181. INT_MASK(INT_SNI_ASID) | \
  182. INT_MASK(INT_DMA_CPL) | \
  183. INT_MASK(INT_SN_CPL) | \
  184. INT_MASK(INT_DOUBLE_FAULT) | \
  185. INT_MASK(INT_SN_STATIC_ACCESS) | \
  186. 0)
  187. #define MASKABLE_INTERRUPTS ( \
  188. INT_MASK(INT_MEM_ERROR) | \
  189. INT_MASK(INT_IDN_REFILL) | \
  190. INT_MASK(INT_UDN_REFILL) | \
  191. INT_MASK(INT_IDN_COMPLETE) | \
  192. INT_MASK(INT_UDN_COMPLETE) | \
  193. INT_MASK(INT_DMATLB_MISS) | \
  194. INT_MASK(INT_DMATLB_ACCESS) | \
  195. INT_MASK(INT_SNITLB_MISS) | \
  196. INT_MASK(INT_SN_NOTIFY) | \
  197. INT_MASK(INT_SN_FIREWALL) | \
  198. INT_MASK(INT_IDN_FIREWALL) | \
  199. INT_MASK(INT_UDN_FIREWALL) | \
  200. INT_MASK(INT_TILE_TIMER) | \
  201. INT_MASK(INT_IDN_TIMER) | \
  202. INT_MASK(INT_UDN_TIMER) | \
  203. INT_MASK(INT_DMA_NOTIFY) | \
  204. INT_MASK(INT_IDN_CA) | \
  205. INT_MASK(INT_UDN_CA) | \
  206. INT_MASK(INT_IDN_AVAIL) | \
  207. INT_MASK(INT_UDN_AVAIL) | \
  208. INT_MASK(INT_PERF_COUNT) | \
  209. INT_MASK(INT_INTCTRL_3) | \
  210. INT_MASK(INT_INTCTRL_2) | \
  211. INT_MASK(INT_INTCTRL_1) | \
  212. INT_MASK(INT_INTCTRL_0) | \
  213. INT_MASK(INT_AUX_PERF_COUNT) | \
  214. 0)
  215. #define UNMASKABLE_INTERRUPTS ( \
  216. INT_MASK(INT_ITLB_MISS) | \
  217. INT_MASK(INT_ILL) | \
  218. INT_MASK(INT_GPV) | \
  219. INT_MASK(INT_SN_ACCESS) | \
  220. INT_MASK(INT_IDN_ACCESS) | \
  221. INT_MASK(INT_UDN_ACCESS) | \
  222. INT_MASK(INT_SWINT_3) | \
  223. INT_MASK(INT_SWINT_2) | \
  224. INT_MASK(INT_SWINT_1) | \
  225. INT_MASK(INT_SWINT_0) | \
  226. INT_MASK(INT_UNALIGN_DATA) | \
  227. INT_MASK(INT_DTLB_MISS) | \
  228. INT_MASK(INT_DTLB_ACCESS) | \
  229. INT_MASK(INT_BOOT_ACCESS) | \
  230. INT_MASK(INT_WORLD_ACCESS) | \
  231. INT_MASK(INT_I_ASID) | \
  232. INT_MASK(INT_D_ASID) | \
  233. INT_MASK(INT_DMA_ASID) | \
  234. INT_MASK(INT_SNI_ASID) | \
  235. INT_MASK(INT_DMA_CPL) | \
  236. INT_MASK(INT_SN_CPL) | \
  237. INT_MASK(INT_DOUBLE_FAULT) | \
  238. INT_MASK(INT_SN_STATIC_ACCESS) | \
  239. 0)
  240. #define SYNC_INTERRUPTS ( \
  241. INT_MASK(INT_ITLB_MISS) | \
  242. INT_MASK(INT_ILL) | \
  243. INT_MASK(INT_GPV) | \
  244. INT_MASK(INT_SN_ACCESS) | \
  245. INT_MASK(INT_IDN_ACCESS) | \
  246. INT_MASK(INT_UDN_ACCESS) | \
  247. INT_MASK(INT_IDN_REFILL) | \
  248. INT_MASK(INT_UDN_REFILL) | \
  249. INT_MASK(INT_IDN_COMPLETE) | \
  250. INT_MASK(INT_UDN_COMPLETE) | \
  251. INT_MASK(INT_SWINT_3) | \
  252. INT_MASK(INT_SWINT_2) | \
  253. INT_MASK(INT_SWINT_1) | \
  254. INT_MASK(INT_SWINT_0) | \
  255. INT_MASK(INT_UNALIGN_DATA) | \
  256. INT_MASK(INT_DTLB_MISS) | \
  257. INT_MASK(INT_DTLB_ACCESS) | \
  258. INT_MASK(INT_SN_STATIC_ACCESS) | \
  259. 0)
  260. #define NON_SYNC_INTERRUPTS ( \
  261. INT_MASK(INT_MEM_ERROR) | \
  262. INT_MASK(INT_DMATLB_MISS) | \
  263. INT_MASK(INT_DMATLB_ACCESS) | \
  264. INT_MASK(INT_SNITLB_MISS) | \
  265. INT_MASK(INT_SN_NOTIFY) | \
  266. INT_MASK(INT_SN_FIREWALL) | \
  267. INT_MASK(INT_IDN_FIREWALL) | \
  268. INT_MASK(INT_UDN_FIREWALL) | \
  269. INT_MASK(INT_TILE_TIMER) | \
  270. INT_MASK(INT_IDN_TIMER) | \
  271. INT_MASK(INT_UDN_TIMER) | \
  272. INT_MASK(INT_DMA_NOTIFY) | \
  273. INT_MASK(INT_IDN_CA) | \
  274. INT_MASK(INT_UDN_CA) | \
  275. INT_MASK(INT_IDN_AVAIL) | \
  276. INT_MASK(INT_UDN_AVAIL) | \
  277. INT_MASK(INT_PERF_COUNT) | \
  278. INT_MASK(INT_INTCTRL_3) | \
  279. INT_MASK(INT_INTCTRL_2) | \
  280. INT_MASK(INT_INTCTRL_1) | \
  281. INT_MASK(INT_INTCTRL_0) | \
  282. INT_MASK(INT_BOOT_ACCESS) | \
  283. INT_MASK(INT_WORLD_ACCESS) | \
  284. INT_MASK(INT_I_ASID) | \
  285. INT_MASK(INT_D_ASID) | \
  286. INT_MASK(INT_DMA_ASID) | \
  287. INT_MASK(INT_SNI_ASID) | \
  288. INT_MASK(INT_DMA_CPL) | \
  289. INT_MASK(INT_SN_CPL) | \
  290. INT_MASK(INT_DOUBLE_FAULT) | \
  291. INT_MASK(INT_AUX_PERF_COUNT) | \
  292. 0)
  293. #endif /* !__ARCH_INTERRUPTS_H__ */