162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
262306a36Sopenharmony_ci#ifndef _UAPI_ASM_S390_SIE_H
362306a36Sopenharmony_ci#define _UAPI_ASM_S390_SIE_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#define diagnose_codes						\
662306a36Sopenharmony_ci	{ 0x10, "DIAG (0x10) release pages" },			\
762306a36Sopenharmony_ci	{ 0x44, "DIAG (0x44) time slice end" },			\
862306a36Sopenharmony_ci	{ 0x9c, "DIAG (0x9c) time slice end directed" },	\
962306a36Sopenharmony_ci	{ 0x204, "DIAG (0x204) logical-cpu utilization" },	\
1062306a36Sopenharmony_ci	{ 0x258, "DIAG (0x258) page-reference services" },	\
1162306a36Sopenharmony_ci	{ 0x288, "DIAG (0x288) watchdog functions" },		\
1262306a36Sopenharmony_ci	{ 0x308, "DIAG (0x308) ipl functions" },		\
1362306a36Sopenharmony_ci	{ 0x500, "DIAG (0x500) KVM virtio functions" },		\
1462306a36Sopenharmony_ci	{ 0x501, "DIAG (0x501) KVM breakpoint" }
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#define sigp_order_codes					\
1762306a36Sopenharmony_ci	{ 0x01, "SIGP sense" },					\
1862306a36Sopenharmony_ci	{ 0x02, "SIGP external call" },				\
1962306a36Sopenharmony_ci	{ 0x03, "SIGP emergency signal" },			\
2062306a36Sopenharmony_ci	{ 0x04, "SIGP start" },					\
2162306a36Sopenharmony_ci	{ 0x05, "SIGP stop" },					\
2262306a36Sopenharmony_ci	{ 0x06, "SIGP restart" },				\
2362306a36Sopenharmony_ci	{ 0x09, "SIGP stop and store status" },			\
2462306a36Sopenharmony_ci	{ 0x0b, "SIGP initial cpu reset" },			\
2562306a36Sopenharmony_ci	{ 0x0c, "SIGP cpu reset" },				\
2662306a36Sopenharmony_ci	{ 0x0d, "SIGP set prefix" },				\
2762306a36Sopenharmony_ci	{ 0x0e, "SIGP store status at address" },		\
2862306a36Sopenharmony_ci	{ 0x12, "SIGP set architecture" },			\
2962306a36Sopenharmony_ci	{ 0x13, "SIGP conditional emergency signal" },		\
3062306a36Sopenharmony_ci	{ 0x15, "SIGP sense running" },				\
3162306a36Sopenharmony_ci	{ 0x16, "SIGP set multithreading"},			\
3262306a36Sopenharmony_ci	{ 0x17, "SIGP store additional status at address"}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#define icpt_prog_codes						\
3562306a36Sopenharmony_ci	{ 0x0001, "Prog Operation" },				\
3662306a36Sopenharmony_ci	{ 0x0002, "Prog Privileged Operation" },		\
3762306a36Sopenharmony_ci	{ 0x0003, "Prog Execute" },				\
3862306a36Sopenharmony_ci	{ 0x0004, "Prog Protection" },				\
3962306a36Sopenharmony_ci	{ 0x0005, "Prog Addressing" },				\
4062306a36Sopenharmony_ci	{ 0x0006, "Prog Specification" },			\
4162306a36Sopenharmony_ci	{ 0x0007, "Prog Data" },				\
4262306a36Sopenharmony_ci	{ 0x0008, "Prog Fixedpoint overflow" },			\
4362306a36Sopenharmony_ci	{ 0x0009, "Prog Fixedpoint divide" },			\
4462306a36Sopenharmony_ci	{ 0x000A, "Prog Decimal overflow" },			\
4562306a36Sopenharmony_ci	{ 0x000B, "Prog Decimal divide" },			\
4662306a36Sopenharmony_ci	{ 0x000C, "Prog HFP exponent overflow" },		\
4762306a36Sopenharmony_ci	{ 0x000D, "Prog HFP exponent underflow" },		\
4862306a36Sopenharmony_ci	{ 0x000E, "Prog HFP significance" },			\
4962306a36Sopenharmony_ci	{ 0x000F, "Prog HFP divide" },				\
5062306a36Sopenharmony_ci	{ 0x0010, "Prog Segment translation" },			\
5162306a36Sopenharmony_ci	{ 0x0011, "Prog Page translation" },			\
5262306a36Sopenharmony_ci	{ 0x0012, "Prog Translation specification" },		\
5362306a36Sopenharmony_ci	{ 0x0013, "Prog Special operation" },			\
5462306a36Sopenharmony_ci	{ 0x0015, "Prog Operand" },				\
5562306a36Sopenharmony_ci	{ 0x0016, "Prog Trace table" },				\
5662306a36Sopenharmony_ci	{ 0x0017, "Prog ASNtranslation specification" },	\
5762306a36Sopenharmony_ci	{ 0x001C, "Prog Spaceswitch event" },			\
5862306a36Sopenharmony_ci	{ 0x001D, "Prog HFP square root" },			\
5962306a36Sopenharmony_ci	{ 0x001F, "Prog PCtranslation specification" },		\
6062306a36Sopenharmony_ci	{ 0x0020, "Prog AFX translation" },			\
6162306a36Sopenharmony_ci	{ 0x0021, "Prog ASX translation" },			\
6262306a36Sopenharmony_ci	{ 0x0022, "Prog LX translation" },			\
6362306a36Sopenharmony_ci	{ 0x0023, "Prog EX translation" },			\
6462306a36Sopenharmony_ci	{ 0x0024, "Prog Primary authority" },			\
6562306a36Sopenharmony_ci	{ 0x0025, "Prog Secondary authority" },			\
6662306a36Sopenharmony_ci	{ 0x0026, "Prog LFXtranslation exception" },		\
6762306a36Sopenharmony_ci	{ 0x0027, "Prog LSXtranslation exception" },		\
6862306a36Sopenharmony_ci	{ 0x0028, "Prog ALET specification" },			\
6962306a36Sopenharmony_ci	{ 0x0029, "Prog ALEN translation" },			\
7062306a36Sopenharmony_ci	{ 0x002A, "Prog ALE sequence" },			\
7162306a36Sopenharmony_ci	{ 0x002B, "Prog ASTE validity" },			\
7262306a36Sopenharmony_ci	{ 0x002C, "Prog ASTE sequence" },			\
7362306a36Sopenharmony_ci	{ 0x002D, "Prog Extended authority" },			\
7462306a36Sopenharmony_ci	{ 0x002E, "Prog LSTE sequence" },			\
7562306a36Sopenharmony_ci	{ 0x002F, "Prog ASTE instance" },			\
7662306a36Sopenharmony_ci	{ 0x0030, "Prog Stack full" },				\
7762306a36Sopenharmony_ci	{ 0x0031, "Prog Stack empty" },				\
7862306a36Sopenharmony_ci	{ 0x0032, "Prog Stack specification" },			\
7962306a36Sopenharmony_ci	{ 0x0033, "Prog Stack type" },				\
8062306a36Sopenharmony_ci	{ 0x0034, "Prog Stack operation" },			\
8162306a36Sopenharmony_ci	{ 0x0039, "Prog Region first translation" },		\
8262306a36Sopenharmony_ci	{ 0x003A, "Prog Region second translation" },		\
8362306a36Sopenharmony_ci	{ 0x003B, "Prog Region third translation" },		\
8462306a36Sopenharmony_ci	{ 0x0040, "Prog Monitor event" },			\
8562306a36Sopenharmony_ci	{ 0x0080, "Prog PER event" },				\
8662306a36Sopenharmony_ci	{ 0x0119, "Prog Crypto operation" }
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci#define exit_code_ipa0(ipa0, opcode, mnemonic)		\
8962306a36Sopenharmony_ci	{ (ipa0 << 8 | opcode), #ipa0 " " mnemonic }
9062306a36Sopenharmony_ci#define exit_code(opcode, mnemonic)			\
9162306a36Sopenharmony_ci	{ opcode, mnemonic }
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#define icpt_insn_codes				\
9462306a36Sopenharmony_ci	exit_code_ipa0(0x01, 0x01, "PR"),	\
9562306a36Sopenharmony_ci	exit_code_ipa0(0x01, 0x04, "PTFF"),	\
9662306a36Sopenharmony_ci	exit_code_ipa0(0x01, 0x07, "SCKPF"),	\
9762306a36Sopenharmony_ci	exit_code_ipa0(0xAA, 0x00, "RINEXT"),	\
9862306a36Sopenharmony_ci	exit_code_ipa0(0xAA, 0x01, "RION"),	\
9962306a36Sopenharmony_ci	exit_code_ipa0(0xAA, 0x02, "TRIC"),	\
10062306a36Sopenharmony_ci	exit_code_ipa0(0xAA, 0x03, "RIOFF"),	\
10162306a36Sopenharmony_ci	exit_code_ipa0(0xAA, 0x04, "RIEMIT"),	\
10262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x02, "STIDP"),	\
10362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x04, "SCK"),	\
10462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x05, "STCK"),	\
10562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x06, "SCKC"),	\
10662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x07, "STCKC"),	\
10762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x08, "SPT"),	\
10862306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x09, "STPT"),	\
10962306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x0d, "PTLB"),	\
11062306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x10, "SPX"),	\
11162306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x11, "STPX"),	\
11262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x12, "STAP"),	\
11362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x14, "SIE"),	\
11462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x16, "SETR"),	\
11562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x17, "STETR"),	\
11662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x18, "PC"),	\
11762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x20, "SERVC"),	\
11862306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x21, "IPTE"),	\
11962306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x28, "PT"),	\
12062306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x29, "ISKE"),	\
12162306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x2a, "RRBE"),	\
12262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x2b, "SSKE"),	\
12362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x2c, "TB"),	\
12462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x2e, "PGIN"),	\
12562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x2f, "PGOUT"),	\
12662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x30, "CSCH"),	\
12762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x31, "HSCH"),	\
12862306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x32, "MSCH"),	\
12962306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x33, "SSCH"),	\
13062306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x34, "STSCH"),	\
13162306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x35, "TSCH"),	\
13262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x36, "TPI"),	\
13362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x37, "SAL"),	\
13462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x38, "RSCH"),	\
13562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x39, "STCRW"),	\
13662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x3a, "STCPS"),	\
13762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x3b, "RCHP"),	\
13862306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x3c, "SCHM"),	\
13962306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x40, "BAKR"),	\
14062306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x48, "PALB"),	\
14162306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x4c, "TAR"),	\
14262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x50, "CSP"),	\
14362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x54, "MVPG"),	\
14462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x56, "STHYI"),	\
14562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x58, "BSG"),	\
14662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x5a, "BSA"),	\
14762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x5f, "CHSC"),	\
14862306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x74, "SIGA"),	\
14962306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x76, "XSCH"),	\
15062306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x78, "STCKE"),	\
15162306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x7c, "STCKF"),	\
15262306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0x7d, "STSI"),	\
15362306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0xb0, "STFLE"),	\
15462306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0xb1, "STFL"),	\
15562306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0xb2, "LPSWE"),	\
15662306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0xf8, "TEND"),	\
15762306a36Sopenharmony_ci	exit_code_ipa0(0xB2, 0xfc, "TABORT"),	\
15862306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x1e, "KMAC"),	\
15962306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x28, "PCKMO"),	\
16062306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x2a, "KMF"),	\
16162306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x2b, "KMO"),	\
16262306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x2d, "KMCTR"),	\
16362306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x2e, "KM"),	\
16462306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x2f, "KMC"),	\
16562306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x3e, "KIMD"),	\
16662306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x3f, "KLMD"),	\
16762306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x8a, "CSPG"),	\
16862306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x8d, "EPSW"),	\
16962306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x8e, "IDTE"),	\
17062306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x8f, "CRDTE"),	\
17162306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0x9c, "EQBS"),	\
17262306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0xa2, "PTF"),	\
17362306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0xab, "ESSA"),	\
17462306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0xae, "RRBM"),	\
17562306a36Sopenharmony_ci	exit_code_ipa0(0xB9, 0xaf, "PFMF"),	\
17662306a36Sopenharmony_ci	exit_code_ipa0(0xE3, 0x03, "LRAG"),	\
17762306a36Sopenharmony_ci	exit_code_ipa0(0xE3, 0x13, "LRAY"),	\
17862306a36Sopenharmony_ci	exit_code_ipa0(0xE3, 0x25, "NTSTG"),	\
17962306a36Sopenharmony_ci	exit_code_ipa0(0xE5, 0x00, "LASP"),	\
18062306a36Sopenharmony_ci	exit_code_ipa0(0xE5, 0x01, "TPROT"),	\
18162306a36Sopenharmony_ci	exit_code_ipa0(0xE5, 0x60, "TBEGIN"),	\
18262306a36Sopenharmony_ci	exit_code_ipa0(0xE5, 0x61, "TBEGINC"),	\
18362306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x25, "STCTG"),	\
18462306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x2f, "LCTLG"),	\
18562306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x60, "LRIC"),	\
18662306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x61, "STRIC"),	\
18762306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x62, "MRIC"),	\
18862306a36Sopenharmony_ci	exit_code_ipa0(0xEB, 0x8a, "SQBS"),	\
18962306a36Sopenharmony_ci	exit_code_ipa0(0xC8, 0x01, "ECTG"),	\
19062306a36Sopenharmony_ci	exit_code(0x0a, "SVC"),			\
19162306a36Sopenharmony_ci	exit_code(0x80, "SSM"),			\
19262306a36Sopenharmony_ci	exit_code(0x82, "LPSW"),		\
19362306a36Sopenharmony_ci	exit_code(0x83, "DIAG"),		\
19462306a36Sopenharmony_ci	exit_code(0xae, "SIGP"),		\
19562306a36Sopenharmony_ci	exit_code(0xac, "STNSM"),		\
19662306a36Sopenharmony_ci	exit_code(0xad, "STOSM"),		\
19762306a36Sopenharmony_ci	exit_code(0xb1, "LRA"),			\
19862306a36Sopenharmony_ci	exit_code(0xb6, "STCTL"),		\
19962306a36Sopenharmony_ci	exit_code(0xb7, "LCTL"),		\
20062306a36Sopenharmony_ci	exit_code(0xee, "PLO")
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci#define sie_intercept_code					\
20362306a36Sopenharmony_ci	{ 0x00, "Host interruption" },				\
20462306a36Sopenharmony_ci	{ 0x04, "Instruction" },				\
20562306a36Sopenharmony_ci	{ 0x08, "Program interruption" },			\
20662306a36Sopenharmony_ci	{ 0x0c, "Instruction and program interruption" },	\
20762306a36Sopenharmony_ci	{ 0x10, "External request" },				\
20862306a36Sopenharmony_ci	{ 0x14, "External interruption" },			\
20962306a36Sopenharmony_ci	{ 0x18, "I/O request" },				\
21062306a36Sopenharmony_ci	{ 0x1c, "Wait state" },					\
21162306a36Sopenharmony_ci	{ 0x20, "Validity" },					\
21262306a36Sopenharmony_ci	{ 0x28, "Stop request" },				\
21362306a36Sopenharmony_ci	{ 0x2c, "Operation exception" },			\
21462306a36Sopenharmony_ci	{ 0x38, "Partial-execution" },				\
21562306a36Sopenharmony_ci	{ 0x3c, "I/O interruption" },				\
21662306a36Sopenharmony_ci	{ 0x40, "I/O instruction" },				\
21762306a36Sopenharmony_ci	{ 0x48, "Timing subset" }
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci/*
22062306a36Sopenharmony_ci * This is the simple interceptable instructions decoder.
22162306a36Sopenharmony_ci *
22262306a36Sopenharmony_ci * It will be used as userspace interface and it can be used in places
22362306a36Sopenharmony_ci * that does not allow to use general decoder functions,
22462306a36Sopenharmony_ci * such as trace events declarations.
22562306a36Sopenharmony_ci *
22662306a36Sopenharmony_ci * Some userspace tools may want to parse this code
22762306a36Sopenharmony_ci * and would be confused by switch(), if() and other statements,
22862306a36Sopenharmony_ci * but they can understand conditional operator.
22962306a36Sopenharmony_ci */
23062306a36Sopenharmony_ci#define INSN_DECODE_IPA0(ipa0, insn, rshift, mask)		\
23162306a36Sopenharmony_ci	(insn >> 56) == (ipa0) ?				\
23262306a36Sopenharmony_ci		((ipa0 << 8) | ((insn >> rshift) & mask)) :
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci#define INSN_DECODE(insn) (insn >> 56)
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci/*
23762306a36Sopenharmony_ci * The macro icpt_insn_decoder() takes an intercepted instruction
23862306a36Sopenharmony_ci * and returns a key, which can be used to find a mnemonic name
23962306a36Sopenharmony_ci * of the instruction in the icpt_insn_codes table.
24062306a36Sopenharmony_ci */
24162306a36Sopenharmony_ci#define icpt_insn_decoder(insn) (		\
24262306a36Sopenharmony_ci	INSN_DECODE_IPA0(0x01, insn, 48, 0xff)	\
24362306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xaa, insn, 48, 0x0f)	\
24462306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xb2, insn, 48, 0xff)	\
24562306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xb9, insn, 48, 0xff)	\
24662306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xe3, insn, 48, 0xff)	\
24762306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xe5, insn, 48, 0xff)	\
24862306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xeb, insn, 16, 0xff)	\
24962306a36Sopenharmony_ci	INSN_DECODE_IPA0(0xc8, insn, 48, 0x0f)	\
25062306a36Sopenharmony_ci	INSN_DECODE(insn))
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci#endif /* _UAPI_ASM_S390_SIE_H */
253