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