xref: /kvm-unit-tests/lib/s390x/gs.h (revision c315f52b88b967cfb4cd58f3b4e1987378c47f3b)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Guarded storage related definitions
4  *
5  * Copyright 2018 IBM Corp.
6  *
7  * Authors:
8  *    Martin Schwidefsky <schwidefsky@de.ibm.com>
9  *    Janosch Frank <frankja@linux.ibm.com>
10  */
11 #include <stdint.h>
12 
13 #ifndef _S390X_GS_H_
14 #define _S390X_GS_H_
15 
16 struct gs_cb {
17 	uint64_t reserved;
18 	uint64_t gsd;
19 	uint64_t gssm;
20 	uint64_t gs_epl_a;
21 };
22 
23 struct gs_epl {
24 	uint8_t pad1;
25 	union {
26 		uint8_t gs_eam;
27 		struct {
28 			uint8_t		: 6;
29 			uint8_t e	: 1;
30 			uint8_t b	: 1;
31 		};
32 	};
33 	union {
34 		uint8_t gs_eci;
35 		struct {
36 			uint8_t tx	: 1;
37 			uint8_t cx	: 1;
38 			uint8_t		: 5;
39 			uint8_t in	: 1;
40 		};
41 	};
42 	union {
43 		uint8_t gs_eai;
44 		struct {
45 			uint8_t		: 1;
46 			uint8_t t	: 1;
47 			uint8_t as	: 2;
48 			uint8_t ar	: 4;
49 		};
50 	};
51 	uint32_t pad2;
52 	uint64_t gs_eha;
53 	uint64_t gs_eia;
54 	uint64_t gs_eoa;
55 	uint64_t gs_eir;
56 	uint64_t gs_era;
57 };
58 
load_gs_cb(struct gs_cb * gs_cb)59 static inline void load_gs_cb(struct gs_cb *gs_cb)
60 {
61 	asm volatile(".insn rxy,0xe3000000004d,0,%0" : : "Q" (*gs_cb));
62 }
63 
store_gs_cb(struct gs_cb * gs_cb)64 static inline void store_gs_cb(struct gs_cb *gs_cb)
65 {
66 	asm volatile(".insn rxy,0xe30000000049,0,%0" : : "Q" (*gs_cb));
67 }
68 
69 #endif
70