encoding.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /* Copyright (c) 2010-2017, The Regents of the University of California
  2. (Regents). All Rights Reserved.
  3. Redistribution and use in source and binary forms, with or without
  4. modification, are permitted provided that the following conditions are met:
  5. 1. Redistributions of source code must retain the above copyright
  6. notice, this list of conditions and the following disclaimer.
  7. 2. Redistributions in binary form must reproduce the above copyright
  8. notice, this list of conditions and the following disclaimer in the
  9. documentation and/or other materials provided with the distribution.
  10. 3. Neither the name of the Regents nor the
  11. names of its contributors may be used to endorse or promote products
  12. derived from this software without specific prior written permission.
  13. IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
  14. SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
  15. OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
  16. BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  17. REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  18. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  19. PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
  20. HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
  21. MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  22. */
  23. /* Adapted from https://github.com/riscv/riscv-opcodes/blob/master/encoding.h */
  24. #pragma once
  25. #define MSTATUS_UIE 0x00000001
  26. #define MSTATUS_SIE 0x00000002
  27. #define MSTATUS_HIE 0x00000004
  28. #define MSTATUS_MIE 0x00000008
  29. #define MSTATUS_UPIE 0x00000010
  30. #define MSTATUS_SPIE 0x00000020
  31. #define MSTATUS_HPIE 0x00000040
  32. #define MSTATUS_MPIE 0x00000080
  33. #define MSTATUS_SPP 0x00000100
  34. #define MSTATUS_VS 0x00000600
  35. #define MSTATUS_MPP 0x00001800
  36. #define MSTATUS_FS 0x00006000
  37. #define MSTATUS_XS 0x00018000
  38. #define MSTATUS_MPRV 0x00020000
  39. #define MSTATUS_SUM 0x00040000
  40. #define MSTATUS_MXR 0x00080000
  41. #define MSTATUS_TVM 0x00100000
  42. #define MSTATUS_TW 0x00200000
  43. #define MSTATUS_TSR 0x00400000
  44. #define MSTATUS32_SD 0x80000000
  45. #define MSTATUS_UXL 0x0000000300000000
  46. #define MSTATUS_SXL 0x0000000C00000000
  47. #define MSTATUS64_SD 0x8000000000000000
  48. #define SSTATUS_UIE 0x00000001
  49. #define SSTATUS_SIE 0x00000002
  50. #define SSTATUS_UPIE 0x00000010
  51. #define SSTATUS_SPIE 0x00000020
  52. #define SSTATUS_SPP 0x00000100
  53. #define SSTATUS_VS 0x00000600
  54. #define SSTATUS_FS 0x00006000
  55. #define SSTATUS_XS 0x00018000
  56. #define SSTATUS_SUM 0x00040000
  57. #define SSTATUS_MXR 0x00080000
  58. #define SSTATUS32_SD 0x80000000
  59. #define SSTATUS_UXL 0x0000000300000000
  60. #define SSTATUS64_SD 0x8000000000000000
  61. #define USTATUS_UIE 0x00000001
  62. #define USTATUS_UPIE 0x00000010
  63. #define DCSR_XDEBUGVER (3U<<30)
  64. #define DCSR_NDRESET (1<<29)
  65. #define DCSR_FULLRESET (1<<28)
  66. #define DCSR_EBREAKM (1<<15)
  67. #define DCSR_EBREAKH (1<<14)
  68. #define DCSR_EBREAKS (1<<13)
  69. #define DCSR_EBREAKU (1<<12)
  70. #define DCSR_STOPCYCLE (1<<10)
  71. #define DCSR_STOPTIME (1<<9)
  72. #define DCSR_CAUSE (7<<6)
  73. #define DCSR_DEBUGINT (1<<5)
  74. #define DCSR_HALT (1<<3)
  75. #define DCSR_STEP (1<<2)
  76. #define DCSR_PRV (3<<0)
  77. #define DCSR_CAUSE_NONE 0
  78. #define DCSR_CAUSE_SWBP 1
  79. #define DCSR_CAUSE_HWBP 2
  80. #define DCSR_CAUSE_DEBUGINT 3
  81. #define DCSR_CAUSE_STEP 4
  82. #define DCSR_CAUSE_HALT 5
  83. #define DCSR_CAUSE_GROUP 6
  84. #define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4))
  85. #define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5))
  86. #define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11))
  87. #define MCONTROL_SELECT (1<<19)
  88. #define MCONTROL_TIMING (1<<18)
  89. #define MCONTROL_ACTION (0x3f<<12)
  90. #define MCONTROL_CHAIN (1<<11)
  91. #define MCONTROL_MATCH (0xf<<7)
  92. #define MCONTROL_M (1<<6)
  93. #define MCONTROL_H (1<<5)
  94. #define MCONTROL_S (1<<4)
  95. #define MCONTROL_U (1<<3)
  96. #define MCONTROL_EXECUTE (1<<2)
  97. #define MCONTROL_STORE (1<<1)
  98. #define MCONTROL_LOAD (1<<0)
  99. #define MCONTROL_TYPE_NONE 0
  100. #define MCONTROL_TYPE_MATCH 2
  101. #define MCONTROL_ACTION_DEBUG_EXCEPTION 0
  102. #define MCONTROL_ACTION_DEBUG_MODE 1
  103. #define MCONTROL_ACTION_TRACE_START 2
  104. #define MCONTROL_ACTION_TRACE_STOP 3
  105. #define MCONTROL_ACTION_TRACE_EMIT 4
  106. #define MCONTROL_MATCH_EQUAL 0
  107. #define MCONTROL_MATCH_NAPOT 1
  108. #define MCONTROL_MATCH_GE 2
  109. #define MCONTROL_MATCH_LT 3
  110. #define MCONTROL_MATCH_MASK_LOW 4
  111. #define MCONTROL_MATCH_MASK_HIGH 5
  112. #define MIP_USIP (1 << IRQ_U_SOFT)
  113. #define MIP_SSIP (1 << IRQ_S_SOFT)
  114. #define MIP_HSIP (1 << IRQ_H_SOFT)
  115. #define MIP_MSIP (1 << IRQ_M_SOFT)
  116. #define MIP_UTIP (1 << IRQ_U_TIMER)
  117. #define MIP_STIP (1 << IRQ_S_TIMER)
  118. #define MIP_HTIP (1 << IRQ_H_TIMER)
  119. #define MIP_MTIP (1 << IRQ_M_TIMER)
  120. #define MIP_UEIP (1 << IRQ_U_EXT)
  121. #define MIP_SEIP (1 << IRQ_S_EXT)
  122. #define MIP_HEIP (1 << IRQ_H_EXT)
  123. #define MIP_MEIP (1 << IRQ_M_EXT)
  124. #define SIP_SSIP MIP_SSIP
  125. #define SIP_STIP MIP_STIP
  126. #define PRV_U 0
  127. #define PRV_S 1
  128. #define PRV_H 2
  129. #define PRV_M 3
  130. #define SATP32_MODE 0x80000000
  131. #define SATP32_ASID 0x7FC00000
  132. #define SATP32_PPN 0x003FFFFF
  133. #define SATP64_MODE 0xF000000000000000
  134. #define SATP64_ASID 0x0FFFF00000000000
  135. #define SATP64_PPN 0x00000FFFFFFFFFFF
  136. #define SATP_MODE_OFF 0
  137. #define SATP_MODE_SV32 1
  138. #define SATP_MODE_SV39 8
  139. #define SATP_MODE_SV48 9
  140. #define SATP_MODE_SV57 10
  141. #define SATP_MODE_SV64 11
  142. #define PMP_R 0x01
  143. #define PMP_W 0x02
  144. #define PMP_X 0x04
  145. #define PMP_A 0x18
  146. #define PMP_L 0x80
  147. #define PMP_SHIFT 2
  148. #define PMP_TOR 0x08
  149. #define PMP_NA4 0x10
  150. #define PMP_NAPOT 0x18
  151. #define IRQ_U_SOFT 0
  152. #define IRQ_S_SOFT 1
  153. #define IRQ_H_SOFT 2
  154. #define IRQ_M_SOFT 3
  155. #define IRQ_U_TIMER 4
  156. #define IRQ_S_TIMER 5
  157. #define IRQ_H_TIMER 6
  158. #define IRQ_M_TIMER 7
  159. #define IRQ_U_EXT 8
  160. #define IRQ_S_EXT 9
  161. #define IRQ_H_EXT 10
  162. #define IRQ_M_EXT 11
  163. #define IRQ_COP 12
  164. #define IRQ_HOST 13
  165. #define DEFAULT_RSTVEC 0x00001000
  166. #define CLINT_BASE 0x02000000
  167. #define CLINT_SIZE 0x000c0000
  168. #define EXT_IO_BASE 0x40000000
  169. #define DRAM_BASE 0x80000000
  170. /* page table entry (PTE) fields */
  171. #define PTE_V 0x001 /* Valid */
  172. #define PTE_R 0x002 /* Read */
  173. #define PTE_W 0x004 /* Write */
  174. #define PTE_X 0x008 /* Execute */
  175. #define PTE_U 0x010 /* User */
  176. #define PTE_G 0x020 /* Global */
  177. #define PTE_A 0x040 /* Accessed */
  178. #define PTE_D 0x080 /* Dirty */
  179. #define PTE_SOFT 0x300 /* Reserved for Software */
  180. #define PTE_PPN_SHIFT 10
  181. #define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)
  182. #ifdef __riscv
  183. #if __riscv_xlen == 64
  184. # define MSTATUS_SD MSTATUS64_SD
  185. # define SSTATUS_SD SSTATUS64_SD
  186. # define RISCV_PGLEVEL_BITS 9
  187. # define SATP_MODE SATP64_MODE
  188. #else
  189. # define MSTATUS_SD MSTATUS32_SD
  190. # define SSTATUS_SD SSTATUS32_SD
  191. # define RISCV_PGLEVEL_BITS 10
  192. # define SATP_MODE SATP32_MODE
  193. #endif
  194. #define RISCV_PGSHIFT 12
  195. #define RISCV_PGSIZE (1 << RISCV_PGSHIFT)
  196. #endif // __riscv