interrupts_64.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /*
  2. * Copyright 2011 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. #ifndef __KERNEL__
  17. /** Mask for an interrupt. */
  18. #ifdef __ASSEMBLER__
  19. /* Note: must handle breaking interrupts into high and low words manually. */
  20. #define INT_MASK(intno) (1 << (intno))
  21. #else
  22. #define INT_MASK(intno) (1ULL << (intno))
  23. #endif
  24. #endif
  25. /** Where a given interrupt executes */
  26. #define INTERRUPT_VECTOR(i, pl) (0xFC000000 + ((pl) << 24) + ((i) << 8))
  27. /** Where to store a vector for a given interrupt. */
  28. #define USER_INTERRUPT_VECTOR(i) INTERRUPT_VECTOR(i, 0)
  29. /** The base address of user-level interrupts. */
  30. #define USER_INTERRUPT_VECTOR_BASE INTERRUPT_VECTOR(0, 0)
  31. /** Additional synthetic interrupt. */
  32. #define INT_BREAKPOINT (63)
  33. #define INT_MEM_ERROR 0
  34. #define INT_SINGLE_STEP_3 1
  35. #define INT_SINGLE_STEP_2 2
  36. #define INT_SINGLE_STEP_1 3
  37. #define INT_SINGLE_STEP_0 4
  38. #define INT_IDN_COMPLETE 5
  39. #define INT_UDN_COMPLETE 6
  40. #define INT_ITLB_MISS 7
  41. #define INT_ILL 8
  42. #define INT_GPV 9
  43. #define INT_IDN_ACCESS 10
  44. #define INT_UDN_ACCESS 11
  45. #define INT_SWINT_3 12
  46. #define INT_SWINT_2 13
  47. #define INT_SWINT_1 14
  48. #define INT_SWINT_0 15
  49. #define INT_ILL_TRANS 16
  50. #define INT_UNALIGN_DATA 17
  51. #define INT_DTLB_MISS 18
  52. #define INT_DTLB_ACCESS 19
  53. #define INT_IDN_FIREWALL 20
  54. #define INT_UDN_FIREWALL 21
  55. #define INT_TILE_TIMER 22
  56. #define INT_AUX_TILE_TIMER 23
  57. #define INT_IDN_TIMER 24
  58. #define INT_UDN_TIMER 25
  59. #define INT_IDN_AVAIL 26
  60. #define INT_UDN_AVAIL 27
  61. #define INT_IPI_3 28
  62. #define INT_IPI_2 29
  63. #define INT_IPI_1 30
  64. #define INT_IPI_0 31
  65. #define INT_PERF_COUNT 32
  66. #define INT_AUX_PERF_COUNT 33
  67. #define INT_INTCTRL_3 34
  68. #define INT_INTCTRL_2 35
  69. #define INT_INTCTRL_1 36
  70. #define INT_INTCTRL_0 37
  71. #define INT_BOOT_ACCESS 38
  72. #define INT_WORLD_ACCESS 39
  73. #define INT_I_ASID 40
  74. #define INT_D_ASID 41
  75. #define INT_DOUBLE_FAULT 42
  76. #define NUM_INTERRUPTS 43
  77. #ifndef __ASSEMBLER__
  78. #define QUEUED_INTERRUPTS ( \
  79. (1ULL << INT_MEM_ERROR) | \
  80. (1ULL << INT_IDN_COMPLETE) | \
  81. (1ULL << INT_UDN_COMPLETE) | \
  82. (1ULL << INT_IDN_FIREWALL) | \
  83. (1ULL << INT_UDN_FIREWALL) | \
  84. (1ULL << INT_TILE_TIMER) | \
  85. (1ULL << INT_AUX_TILE_TIMER) | \
  86. (1ULL << INT_IDN_TIMER) | \
  87. (1ULL << INT_UDN_TIMER) | \
  88. (1ULL << INT_IDN_AVAIL) | \
  89. (1ULL << INT_UDN_AVAIL) | \
  90. (1ULL << INT_IPI_3) | \
  91. (1ULL << INT_IPI_2) | \
  92. (1ULL << INT_IPI_1) | \
  93. (1ULL << INT_IPI_0) | \
  94. (1ULL << INT_PERF_COUNT) | \
  95. (1ULL << INT_AUX_PERF_COUNT) | \
  96. (1ULL << INT_INTCTRL_3) | \
  97. (1ULL << INT_INTCTRL_2) | \
  98. (1ULL << INT_INTCTRL_1) | \
  99. (1ULL << INT_INTCTRL_0) | \
  100. (1ULL << INT_BOOT_ACCESS) | \
  101. (1ULL << INT_WORLD_ACCESS) | \
  102. (1ULL << INT_I_ASID) | \
  103. (1ULL << INT_D_ASID) | \
  104. (1ULL << INT_DOUBLE_FAULT) | \
  105. 0)
  106. #define NONQUEUED_INTERRUPTS ( \
  107. (1ULL << INT_SINGLE_STEP_3) | \
  108. (1ULL << INT_SINGLE_STEP_2) | \
  109. (1ULL << INT_SINGLE_STEP_1) | \
  110. (1ULL << INT_SINGLE_STEP_0) | \
  111. (1ULL << INT_ITLB_MISS) | \
  112. (1ULL << INT_ILL) | \
  113. (1ULL << INT_GPV) | \
  114. (1ULL << INT_IDN_ACCESS) | \
  115. (1ULL << INT_UDN_ACCESS) | \
  116. (1ULL << INT_SWINT_3) | \
  117. (1ULL << INT_SWINT_2) | \
  118. (1ULL << INT_SWINT_1) | \
  119. (1ULL << INT_SWINT_0) | \
  120. (1ULL << INT_ILL_TRANS) | \
  121. (1ULL << INT_UNALIGN_DATA) | \
  122. (1ULL << INT_DTLB_MISS) | \
  123. (1ULL << INT_DTLB_ACCESS) | \
  124. 0)
  125. #define CRITICAL_MASKED_INTERRUPTS ( \
  126. (1ULL << INT_MEM_ERROR) | \
  127. (1ULL << INT_SINGLE_STEP_3) | \
  128. (1ULL << INT_SINGLE_STEP_2) | \
  129. (1ULL << INT_SINGLE_STEP_1) | \
  130. (1ULL << INT_SINGLE_STEP_0) | \
  131. (1ULL << INT_IDN_COMPLETE) | \
  132. (1ULL << INT_UDN_COMPLETE) | \
  133. (1ULL << INT_IDN_FIREWALL) | \
  134. (1ULL << INT_UDN_FIREWALL) | \
  135. (1ULL << INT_TILE_TIMER) | \
  136. (1ULL << INT_AUX_TILE_TIMER) | \
  137. (1ULL << INT_IDN_TIMER) | \
  138. (1ULL << INT_UDN_TIMER) | \
  139. (1ULL << INT_IDN_AVAIL) | \
  140. (1ULL << INT_UDN_AVAIL) | \
  141. (1ULL << INT_IPI_3) | \
  142. (1ULL << INT_IPI_2) | \
  143. (1ULL << INT_IPI_1) | \
  144. (1ULL << INT_IPI_0) | \
  145. (1ULL << INT_PERF_COUNT) | \
  146. (1ULL << INT_AUX_PERF_COUNT) | \
  147. (1ULL << INT_INTCTRL_3) | \
  148. (1ULL << INT_INTCTRL_2) | \
  149. (1ULL << INT_INTCTRL_1) | \
  150. (1ULL << INT_INTCTRL_0) | \
  151. 0)
  152. #define CRITICAL_UNMASKED_INTERRUPTS ( \
  153. (1ULL << INT_ITLB_MISS) | \
  154. (1ULL << INT_ILL) | \
  155. (1ULL << INT_GPV) | \
  156. (1ULL << INT_IDN_ACCESS) | \
  157. (1ULL << INT_UDN_ACCESS) | \
  158. (1ULL << INT_SWINT_3) | \
  159. (1ULL << INT_SWINT_2) | \
  160. (1ULL << INT_SWINT_1) | \
  161. (1ULL << INT_SWINT_0) | \
  162. (1ULL << INT_ILL_TRANS) | \
  163. (1ULL << INT_UNALIGN_DATA) | \
  164. (1ULL << INT_DTLB_MISS) | \
  165. (1ULL << INT_DTLB_ACCESS) | \
  166. (1ULL << INT_BOOT_ACCESS) | \
  167. (1ULL << INT_WORLD_ACCESS) | \
  168. (1ULL << INT_I_ASID) | \
  169. (1ULL << INT_D_ASID) | \
  170. (1ULL << INT_DOUBLE_FAULT) | \
  171. 0)
  172. #define MASKABLE_INTERRUPTS ( \
  173. (1ULL << INT_MEM_ERROR) | \
  174. (1ULL << INT_SINGLE_STEP_3) | \
  175. (1ULL << INT_SINGLE_STEP_2) | \
  176. (1ULL << INT_SINGLE_STEP_1) | \
  177. (1ULL << INT_SINGLE_STEP_0) | \
  178. (1ULL << INT_IDN_COMPLETE) | \
  179. (1ULL << INT_UDN_COMPLETE) | \
  180. (1ULL << INT_IDN_FIREWALL) | \
  181. (1ULL << INT_UDN_FIREWALL) | \
  182. (1ULL << INT_TILE_TIMER) | \
  183. (1ULL << INT_AUX_TILE_TIMER) | \
  184. (1ULL << INT_IDN_TIMER) | \
  185. (1ULL << INT_UDN_TIMER) | \
  186. (1ULL << INT_IDN_AVAIL) | \
  187. (1ULL << INT_UDN_AVAIL) | \
  188. (1ULL << INT_IPI_3) | \
  189. (1ULL << INT_IPI_2) | \
  190. (1ULL << INT_IPI_1) | \
  191. (1ULL << INT_IPI_0) | \
  192. (1ULL << INT_PERF_COUNT) | \
  193. (1ULL << INT_AUX_PERF_COUNT) | \
  194. (1ULL << INT_INTCTRL_3) | \
  195. (1ULL << INT_INTCTRL_2) | \
  196. (1ULL << INT_INTCTRL_1) | \
  197. (1ULL << INT_INTCTRL_0) | \
  198. 0)
  199. #define UNMASKABLE_INTERRUPTS ( \
  200. (1ULL << INT_ITLB_MISS) | \
  201. (1ULL << INT_ILL) | \
  202. (1ULL << INT_GPV) | \
  203. (1ULL << INT_IDN_ACCESS) | \
  204. (1ULL << INT_UDN_ACCESS) | \
  205. (1ULL << INT_SWINT_3) | \
  206. (1ULL << INT_SWINT_2) | \
  207. (1ULL << INT_SWINT_1) | \
  208. (1ULL << INT_SWINT_0) | \
  209. (1ULL << INT_ILL_TRANS) | \
  210. (1ULL << INT_UNALIGN_DATA) | \
  211. (1ULL << INT_DTLB_MISS) | \
  212. (1ULL << INT_DTLB_ACCESS) | \
  213. (1ULL << INT_BOOT_ACCESS) | \
  214. (1ULL << INT_WORLD_ACCESS) | \
  215. (1ULL << INT_I_ASID) | \
  216. (1ULL << INT_D_ASID) | \
  217. (1ULL << INT_DOUBLE_FAULT) | \
  218. 0)
  219. #define SYNC_INTERRUPTS ( \
  220. (1ULL << INT_SINGLE_STEP_3) | \
  221. (1ULL << INT_SINGLE_STEP_2) | \
  222. (1ULL << INT_SINGLE_STEP_1) | \
  223. (1ULL << INT_SINGLE_STEP_0) | \
  224. (1ULL << INT_IDN_COMPLETE) | \
  225. (1ULL << INT_UDN_COMPLETE) | \
  226. (1ULL << INT_ITLB_MISS) | \
  227. (1ULL << INT_ILL) | \
  228. (1ULL << INT_GPV) | \
  229. (1ULL << INT_IDN_ACCESS) | \
  230. (1ULL << INT_UDN_ACCESS) | \
  231. (1ULL << INT_SWINT_3) | \
  232. (1ULL << INT_SWINT_2) | \
  233. (1ULL << INT_SWINT_1) | \
  234. (1ULL << INT_SWINT_0) | \
  235. (1ULL << INT_ILL_TRANS) | \
  236. (1ULL << INT_UNALIGN_DATA) | \
  237. (1ULL << INT_DTLB_MISS) | \
  238. (1ULL << INT_DTLB_ACCESS) | \
  239. 0)
  240. #define NON_SYNC_INTERRUPTS ( \
  241. (1ULL << INT_MEM_ERROR) | \
  242. (1ULL << INT_IDN_FIREWALL) | \
  243. (1ULL << INT_UDN_FIREWALL) | \
  244. (1ULL << INT_TILE_TIMER) | \
  245. (1ULL << INT_AUX_TILE_TIMER) | \
  246. (1ULL << INT_IDN_TIMER) | \
  247. (1ULL << INT_UDN_TIMER) | \
  248. (1ULL << INT_IDN_AVAIL) | \
  249. (1ULL << INT_UDN_AVAIL) | \
  250. (1ULL << INT_IPI_3) | \
  251. (1ULL << INT_IPI_2) | \
  252. (1ULL << INT_IPI_1) | \
  253. (1ULL << INT_IPI_0) | \
  254. (1ULL << INT_PERF_COUNT) | \
  255. (1ULL << INT_AUX_PERF_COUNT) | \
  256. (1ULL << INT_INTCTRL_3) | \
  257. (1ULL << INT_INTCTRL_2) | \
  258. (1ULL << INT_INTCTRL_1) | \
  259. (1ULL << INT_INTCTRL_0) | \
  260. (1ULL << INT_BOOT_ACCESS) | \
  261. (1ULL << INT_WORLD_ACCESS) | \
  262. (1ULL << INT_I_ASID) | \
  263. (1ULL << INT_D_ASID) | \
  264. (1ULL << INT_DOUBLE_FAULT) | \
  265. 0)
  266. #endif /* !__ASSEMBLER__ */
  267. #endif /* !__ARCH_INTERRUPTS_H__ */