1df2f815aSHeiko Carstens /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2df2f815aSHeiko Carstens #ifndef _S390_UAPI_RUNTIME_INSTR_H
3df2f815aSHeiko Carstens #define _S390_UAPI_RUNTIME_INSTR_H
4df2f815aSHeiko Carstens 
5df2f815aSHeiko Carstens #include <linux/types.h>
6df2f815aSHeiko Carstens 
7df2f815aSHeiko Carstens #define S390_RUNTIME_INSTR_START	0x1
8df2f815aSHeiko Carstens #define S390_RUNTIME_INSTR_STOP		0x2
9df2f815aSHeiko Carstens 
10df2f815aSHeiko Carstens struct runtime_instr_cb {
11df2f815aSHeiko Carstens 	__u64 rca;
12df2f815aSHeiko Carstens 	__u64 roa;
13df2f815aSHeiko Carstens 	__u64 rla;
14df2f815aSHeiko Carstens 
15df2f815aSHeiko Carstens 	__u32 v			: 1;
16df2f815aSHeiko Carstens 	__u32 s			: 1;
17df2f815aSHeiko Carstens 	__u32 k			: 1;
18df2f815aSHeiko Carstens 	__u32 h			: 1;
19df2f815aSHeiko Carstens 	__u32 a			: 1;
20df2f815aSHeiko Carstens 	__u32 reserved1		: 3;
21df2f815aSHeiko Carstens 	__u32 ps		: 1;
22df2f815aSHeiko Carstens 	__u32 qs		: 1;
23df2f815aSHeiko Carstens 	__u32 pc		: 1;
24df2f815aSHeiko Carstens 	__u32 qc		: 1;
25df2f815aSHeiko Carstens 	__u32 reserved2		: 1;
26df2f815aSHeiko Carstens 	__u32 g			: 1;
27df2f815aSHeiko Carstens 	__u32 u			: 1;
28df2f815aSHeiko Carstens 	__u32 l			: 1;
29df2f815aSHeiko Carstens 	__u32 key		: 4;
30df2f815aSHeiko Carstens 	__u32 reserved3		: 8;
31df2f815aSHeiko Carstens 	__u32 t			: 1;
32df2f815aSHeiko Carstens 	__u32 rgs		: 3;
33df2f815aSHeiko Carstens 
34df2f815aSHeiko Carstens 	__u32 m			: 4;
35df2f815aSHeiko Carstens 	__u32 n			: 1;
36df2f815aSHeiko Carstens 	__u32 mae		: 1;
37df2f815aSHeiko Carstens 	__u32 reserved4		: 2;
38df2f815aSHeiko Carstens 	__u32 c			: 1;
39df2f815aSHeiko Carstens 	__u32 r			: 1;
40df2f815aSHeiko Carstens 	__u32 b			: 1;
41df2f815aSHeiko Carstens 	__u32 j			: 1;
42df2f815aSHeiko Carstens 	__u32 e			: 1;
43df2f815aSHeiko Carstens 	__u32 x			: 1;
44df2f815aSHeiko Carstens 	__u32 reserved5		: 2;
45df2f815aSHeiko Carstens 	__u32 bpxn		: 1;
46df2f815aSHeiko Carstens 	__u32 bpxt		: 1;
47df2f815aSHeiko Carstens 	__u32 bpti		: 1;
48df2f815aSHeiko Carstens 	__u32 bpni		: 1;
49df2f815aSHeiko Carstens 	__u32 reserved6		: 2;
50df2f815aSHeiko Carstens 
51df2f815aSHeiko Carstens 	__u32 d			: 1;
52df2f815aSHeiko Carstens 	__u32 f			: 1;
53df2f815aSHeiko Carstens 	__u32 ic		: 4;
54df2f815aSHeiko Carstens 	__u32 dc		: 4;
55df2f815aSHeiko Carstens 
56df2f815aSHeiko Carstens 	__u64 reserved7;
57df2f815aSHeiko Carstens 	__u64 sf;
58df2f815aSHeiko Carstens 	__u64 rsic;
59df2f815aSHeiko Carstens 	__u64 reserved8;
60bae0aae2SMasahiro Yamada } __attribute__((__packed__, __aligned__(8)));
61df2f815aSHeiko Carstens 
load_runtime_instr_cb(struct runtime_instr_cb * cb)62df2f815aSHeiko Carstens static inline void load_runtime_instr_cb(struct runtime_instr_cb *cb)
63df2f815aSHeiko Carstens {
64df2f815aSHeiko Carstens 	asm volatile(".insn	rsy,0xeb0000000060,0,0,%0"	/* LRIC */
65df2f815aSHeiko Carstens 		: : "Q" (*cb));
66df2f815aSHeiko Carstens }
67df2f815aSHeiko Carstens 
store_runtime_instr_cb(struct runtime_instr_cb * cb)68df2f815aSHeiko Carstens static inline void store_runtime_instr_cb(struct runtime_instr_cb *cb)
69df2f815aSHeiko Carstens {
70df2f815aSHeiko Carstens 	asm volatile(".insn	rsy,0xeb0000000061,0,0,%0"	/* STRIC */
71df2f815aSHeiko Carstens 		: "=Q" (*cb) : : "cc");
72df2f815aSHeiko Carstens }
73df2f815aSHeiko Carstens 
74df2f815aSHeiko Carstens #endif /* _S390_UAPI_RUNTIME_INSTR_H */
75