sie.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. #ifndef _UAPI_ASM_S390_SIE_H
  3. #define _UAPI_ASM_S390_SIE_H
  4. #define diagnose_codes \
  5. { 0x10, "DIAG (0x10) release pages" }, \
  6. { 0x44, "DIAG (0x44) time slice end" }, \
  7. { 0x9c, "DIAG (0x9c) time slice end directed" }, \
  8. { 0x204, "DIAG (0x204) logical-cpu utilization" }, \
  9. { 0x258, "DIAG (0x258) page-reference services" }, \
  10. { 0x288, "DIAG (0x288) watchdog functions" }, \
  11. { 0x308, "DIAG (0x308) ipl functions" }, \
  12. { 0x500, "DIAG (0x500) KVM virtio functions" }, \
  13. { 0x501, "DIAG (0x501) KVM breakpoint" }
  14. #define sigp_order_codes \
  15. { 0x01, "SIGP sense" }, \
  16. { 0x02, "SIGP external call" }, \
  17. { 0x03, "SIGP emergency signal" }, \
  18. { 0x04, "SIGP start" }, \
  19. { 0x05, "SIGP stop" }, \
  20. { 0x06, "SIGP restart" }, \
  21. { 0x09, "SIGP stop and store status" }, \
  22. { 0x0b, "SIGP initial cpu reset" }, \
  23. { 0x0c, "SIGP cpu reset" }, \
  24. { 0x0d, "SIGP set prefix" }, \
  25. { 0x0e, "SIGP store status at address" }, \
  26. { 0x12, "SIGP set architecture" }, \
  27. { 0x13, "SIGP conditional emergency signal" }, \
  28. { 0x15, "SIGP sense running" }, \
  29. { 0x16, "SIGP set multithreading"}, \
  30. { 0x17, "SIGP store additional status ait address"}
  31. #define icpt_prog_codes \
  32. { 0x0001, "Prog Operation" }, \
  33. { 0x0002, "Prog Privileged Operation" }, \
  34. { 0x0003, "Prog Execute" }, \
  35. { 0x0004, "Prog Protection" }, \
  36. { 0x0005, "Prog Addressing" }, \
  37. { 0x0006, "Prog Specification" }, \
  38. { 0x0007, "Prog Data" }, \
  39. { 0x0008, "Prog Fixedpoint overflow" }, \
  40. { 0x0009, "Prog Fixedpoint divide" }, \
  41. { 0x000A, "Prog Decimal overflow" }, \
  42. { 0x000B, "Prog Decimal divide" }, \
  43. { 0x000C, "Prog HFP exponent overflow" }, \
  44. { 0x000D, "Prog HFP exponent underflow" }, \
  45. { 0x000E, "Prog HFP significance" }, \
  46. { 0x000F, "Prog HFP divide" }, \
  47. { 0x0010, "Prog Segment translation" }, \
  48. { 0x0011, "Prog Page translation" }, \
  49. { 0x0012, "Prog Translation specification" }, \
  50. { 0x0013, "Prog Special operation" }, \
  51. { 0x0015, "Prog Operand" }, \
  52. { 0x0016, "Prog Trace table" }, \
  53. { 0x0017, "Prog ASNtranslation specification" }, \
  54. { 0x001C, "Prog Spaceswitch event" }, \
  55. { 0x001D, "Prog HFP square root" }, \
  56. { 0x001F, "Prog PCtranslation specification" }, \
  57. { 0x0020, "Prog AFX translation" }, \
  58. { 0x0021, "Prog ASX translation" }, \
  59. { 0x0022, "Prog LX translation" }, \
  60. { 0x0023, "Prog EX translation" }, \
  61. { 0x0024, "Prog Primary authority" }, \
  62. { 0x0025, "Prog Secondary authority" }, \
  63. { 0x0026, "Prog LFXtranslation exception" }, \
  64. { 0x0027, "Prog LSXtranslation exception" }, \
  65. { 0x0028, "Prog ALET specification" }, \
  66. { 0x0029, "Prog ALEN translation" }, \
  67. { 0x002A, "Prog ALE sequence" }, \
  68. { 0x002B, "Prog ASTE validity" }, \
  69. { 0x002C, "Prog ASTE sequence" }, \
  70. { 0x002D, "Prog Extended authority" }, \
  71. { 0x002E, "Prog LSTE sequence" }, \
  72. { 0x002F, "Prog ASTE instance" }, \
  73. { 0x0030, "Prog Stack full" }, \
  74. { 0x0031, "Prog Stack empty" }, \
  75. { 0x0032, "Prog Stack specification" }, \
  76. { 0x0033, "Prog Stack type" }, \
  77. { 0x0034, "Prog Stack operation" }, \
  78. { 0x0039, "Prog Region first translation" }, \
  79. { 0x003A, "Prog Region second translation" }, \
  80. { 0x003B, "Prog Region third translation" }, \
  81. { 0x0040, "Prog Monitor event" }, \
  82. { 0x0080, "Prog PER event" }, \
  83. { 0x0119, "Prog Crypto operation" }
  84. #define exit_code_ipa0(ipa0, opcode, mnemonic) \
  85. { (ipa0 << 8 | opcode), #ipa0 " " mnemonic }
  86. #define exit_code(opcode, mnemonic) \
  87. { opcode, mnemonic }
  88. #define icpt_insn_codes \
  89. exit_code_ipa0(0x01, 0x01, "PR"), \
  90. exit_code_ipa0(0x01, 0x04, "PTFF"), \
  91. exit_code_ipa0(0x01, 0x07, "SCKPF"), \
  92. exit_code_ipa0(0xAA, 0x00, "RINEXT"), \
  93. exit_code_ipa0(0xAA, 0x01, "RION"), \
  94. exit_code_ipa0(0xAA, 0x02, "TRIC"), \
  95. exit_code_ipa0(0xAA, 0x03, "RIOFF"), \
  96. exit_code_ipa0(0xAA, 0x04, "RIEMIT"), \
  97. exit_code_ipa0(0xB2, 0x02, "STIDP"), \
  98. exit_code_ipa0(0xB2, 0x04, "SCK"), \
  99. exit_code_ipa0(0xB2, 0x05, "STCK"), \
  100. exit_code_ipa0(0xB2, 0x06, "SCKC"), \
  101. exit_code_ipa0(0xB2, 0x07, "STCKC"), \
  102. exit_code_ipa0(0xB2, 0x08, "SPT"), \
  103. exit_code_ipa0(0xB2, 0x09, "STPT"), \
  104. exit_code_ipa0(0xB2, 0x0d, "PTLB"), \
  105. exit_code_ipa0(0xB2, 0x10, "SPX"), \
  106. exit_code_ipa0(0xB2, 0x11, "STPX"), \
  107. exit_code_ipa0(0xB2, 0x12, "STAP"), \
  108. exit_code_ipa0(0xB2, 0x14, "SIE"), \
  109. exit_code_ipa0(0xB2, 0x16, "SETR"), \
  110. exit_code_ipa0(0xB2, 0x17, "STETR"), \
  111. exit_code_ipa0(0xB2, 0x18, "PC"), \
  112. exit_code_ipa0(0xB2, 0x20, "SERVC"), \
  113. exit_code_ipa0(0xB2, 0x21, "IPTE"), \
  114. exit_code_ipa0(0xB2, 0x28, "PT"), \
  115. exit_code_ipa0(0xB2, 0x29, "ISKE"), \
  116. exit_code_ipa0(0xB2, 0x2a, "RRBE"), \
  117. exit_code_ipa0(0xB2, 0x2b, "SSKE"), \
  118. exit_code_ipa0(0xB2, 0x2c, "TB"), \
  119. exit_code_ipa0(0xB2, 0x2e, "PGIN"), \
  120. exit_code_ipa0(0xB2, 0x2f, "PGOUT"), \
  121. exit_code_ipa0(0xB2, 0x30, "CSCH"), \
  122. exit_code_ipa0(0xB2, 0x31, "HSCH"), \
  123. exit_code_ipa0(0xB2, 0x32, "MSCH"), \
  124. exit_code_ipa0(0xB2, 0x33, "SSCH"), \
  125. exit_code_ipa0(0xB2, 0x34, "STSCH"), \
  126. exit_code_ipa0(0xB2, 0x35, "TSCH"), \
  127. exit_code_ipa0(0xB2, 0x36, "TPI"), \
  128. exit_code_ipa0(0xB2, 0x37, "SAL"), \
  129. exit_code_ipa0(0xB2, 0x38, "RSCH"), \
  130. exit_code_ipa0(0xB2, 0x39, "STCRW"), \
  131. exit_code_ipa0(0xB2, 0x3a, "STCPS"), \
  132. exit_code_ipa0(0xB2, 0x3b, "RCHP"), \
  133. exit_code_ipa0(0xB2, 0x3c, "SCHM"), \
  134. exit_code_ipa0(0xB2, 0x40, "BAKR"), \
  135. exit_code_ipa0(0xB2, 0x48, "PALB"), \
  136. exit_code_ipa0(0xB2, 0x4c, "TAR"), \
  137. exit_code_ipa0(0xB2, 0x50, "CSP"), \
  138. exit_code_ipa0(0xB2, 0x54, "MVPG"), \
  139. exit_code_ipa0(0xB2, 0x56, "STHYI"), \
  140. exit_code_ipa0(0xB2, 0x58, "BSG"), \
  141. exit_code_ipa0(0xB2, 0x5a, "BSA"), \
  142. exit_code_ipa0(0xB2, 0x5f, "CHSC"), \
  143. exit_code_ipa0(0xB2, 0x74, "SIGA"), \
  144. exit_code_ipa0(0xB2, 0x76, "XSCH"), \
  145. exit_code_ipa0(0xB2, 0x78, "STCKE"), \
  146. exit_code_ipa0(0xB2, 0x7c, "STCKF"), \
  147. exit_code_ipa0(0xB2, 0x7d, "STSI"), \
  148. exit_code_ipa0(0xB2, 0xb0, "STFLE"), \
  149. exit_code_ipa0(0xB2, 0xb1, "STFL"), \
  150. exit_code_ipa0(0xB2, 0xb2, "LPSWE"), \
  151. exit_code_ipa0(0xB2, 0xf8, "TEND"), \
  152. exit_code_ipa0(0xB2, 0xfc, "TABORT"), \
  153. exit_code_ipa0(0xB9, 0x1e, "KMAC"), \
  154. exit_code_ipa0(0xB9, 0x28, "PCKMO"), \
  155. exit_code_ipa0(0xB9, 0x2a, "KMF"), \
  156. exit_code_ipa0(0xB9, 0x2b, "KMO"), \
  157. exit_code_ipa0(0xB9, 0x2d, "KMCTR"), \
  158. exit_code_ipa0(0xB9, 0x2e, "KM"), \
  159. exit_code_ipa0(0xB9, 0x2f, "KMC"), \
  160. exit_code_ipa0(0xB9, 0x3e, "KIMD"), \
  161. exit_code_ipa0(0xB9, 0x3f, "KLMD"), \
  162. exit_code_ipa0(0xB9, 0x8a, "CSPG"), \
  163. exit_code_ipa0(0xB9, 0x8d, "EPSW"), \
  164. exit_code_ipa0(0xB9, 0x8e, "IDTE"), \
  165. exit_code_ipa0(0xB9, 0x8f, "CRDTE"), \
  166. exit_code_ipa0(0xB9, 0x9c, "EQBS"), \
  167. exit_code_ipa0(0xB9, 0xa2, "PTF"), \
  168. exit_code_ipa0(0xB9, 0xab, "ESSA"), \
  169. exit_code_ipa0(0xB9, 0xae, "RRBM"), \
  170. exit_code_ipa0(0xB9, 0xaf, "PFMF"), \
  171. exit_code_ipa0(0xE3, 0x03, "LRAG"), \
  172. exit_code_ipa0(0xE3, 0x13, "LRAY"), \
  173. exit_code_ipa0(0xE3, 0x25, "NTSTG"), \
  174. exit_code_ipa0(0xE5, 0x00, "LASP"), \
  175. exit_code_ipa0(0xE5, 0x01, "TPROT"), \
  176. exit_code_ipa0(0xE5, 0x60, "TBEGIN"), \
  177. exit_code_ipa0(0xE5, 0x61, "TBEGINC"), \
  178. exit_code_ipa0(0xEB, 0x25, "STCTG"), \
  179. exit_code_ipa0(0xEB, 0x2f, "LCTLG"), \
  180. exit_code_ipa0(0xEB, 0x60, "LRIC"), \
  181. exit_code_ipa0(0xEB, 0x61, "STRIC"), \
  182. exit_code_ipa0(0xEB, 0x62, "MRIC"), \
  183. exit_code_ipa0(0xEB, 0x8a, "SQBS"), \
  184. exit_code_ipa0(0xC8, 0x01, "ECTG"), \
  185. exit_code(0x0a, "SVC"), \
  186. exit_code(0x80, "SSM"), \
  187. exit_code(0x82, "LPSW"), \
  188. exit_code(0x83, "DIAG"), \
  189. exit_code(0xae, "SIGP"), \
  190. exit_code(0xac, "STNSM"), \
  191. exit_code(0xad, "STOSM"), \
  192. exit_code(0xb1, "LRA"), \
  193. exit_code(0xb6, "STCTL"), \
  194. exit_code(0xb7, "LCTL"), \
  195. exit_code(0xee, "PLO")
  196. #define sie_intercept_code \
  197. { 0x00, "Host interruption" }, \
  198. { 0x04, "Instruction" }, \
  199. { 0x08, "Program interruption" }, \
  200. { 0x0c, "Instruction and program interruption" }, \
  201. { 0x10, "External request" }, \
  202. { 0x14, "External interruption" }, \
  203. { 0x18, "I/O request" }, \
  204. { 0x1c, "Wait state" }, \
  205. { 0x20, "Validity" }, \
  206. { 0x28, "Stop request" }, \
  207. { 0x2c, "Operation exception" }, \
  208. { 0x38, "Partial-execution" }, \
  209. { 0x3c, "I/O interruption" }, \
  210. { 0x40, "I/O instruction" }, \
  211. { 0x48, "Timing subset" }
  212. /*
  213. * This is the simple interceptable instructions decoder.
  214. *
  215. * It will be used as userspace interface and it can be used in places
  216. * that does not allow to use general decoder functions,
  217. * such as trace events declarations.
  218. *
  219. * Some userspace tools may want to parse this code
  220. * and would be confused by switch(), if() and other statements,
  221. * but they can understand conditional operator.
  222. */
  223. #define INSN_DECODE_IPA0(ipa0, insn, rshift, mask) \
  224. (insn >> 56) == (ipa0) ? \
  225. ((ipa0 << 8) | ((insn >> rshift) & mask)) :
  226. #define INSN_DECODE(insn) (insn >> 56)
  227. /*
  228. * The macro icpt_insn_decoder() takes an intercepted instruction
  229. * and returns a key, which can be used to find a mnemonic name
  230. * of the instruction in the icpt_insn_codes table.
  231. */
  232. #define icpt_insn_decoder(insn) ( \
  233. INSN_DECODE_IPA0(0x01, insn, 48, 0xff) \
  234. INSN_DECODE_IPA0(0xaa, insn, 48, 0x0f) \
  235. INSN_DECODE_IPA0(0xb2, insn, 48, 0xff) \
  236. INSN_DECODE_IPA0(0xb9, insn, 48, 0xff) \
  237. INSN_DECODE_IPA0(0xe3, insn, 48, 0xff) \
  238. INSN_DECODE_IPA0(0xe5, insn, 48, 0xff) \
  239. INSN_DECODE_IPA0(0xeb, insn, 16, 0xff) \
  240. INSN_DECODE_IPA0(0xc8, insn, 48, 0x0f) \
  241. INSN_DECODE(insn))
  242. #endif /* _UAPI_ASM_S390_SIE_H */