]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - arch/s390/include/uapi/asm/guarded_storage.h
Merge tag 'asoc-fix-v4.14-rc6' into asoc-linus
[mirror_ubuntu-focal-kernel.git] / arch / s390 / include / uapi / asm / guarded_storage.h
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _GUARDED_STORAGE_H
3 #define _GUARDED_STORAGE_H
4
5 #include <linux/types.h>
6
7 struct gs_cb {
8 __u64 reserved;
9 __u64 gsd;
10 __u64 gssm;
11 __u64 gs_epl_a;
12 };
13
14 struct gs_epl {
15 __u8 pad1;
16 union {
17 __u8 gs_eam;
18 struct {
19 __u8 : 6;
20 __u8 e : 1;
21 __u8 b : 1;
22 };
23 };
24 union {
25 __u8 gs_eci;
26 struct {
27 __u8 tx : 1;
28 __u8 cx : 1;
29 __u8 : 5;
30 __u8 in : 1;
31 };
32 };
33 union {
34 __u8 gs_eai;
35 struct {
36 __u8 : 1;
37 __u8 t : 1;
38 __u8 as : 2;
39 __u8 ar : 4;
40 };
41 };
42 __u32 pad2;
43 __u64 gs_eha;
44 __u64 gs_eia;
45 __u64 gs_eoa;
46 __u64 gs_eir;
47 __u64 gs_era;
48 };
49
50 #define GS_ENABLE 0
51 #define GS_DISABLE 1
52 #define GS_SET_BC_CB 2
53 #define GS_CLEAR_BC_CB 3
54 #define GS_BROADCAST 4
55
56 static inline void load_gs_cb(struct gs_cb *gs_cb)
57 {
58 asm volatile(".insn rxy,0xe3000000004d,0,%0" : : "Q" (*gs_cb));
59 }
60
61 static inline void store_gs_cb(struct gs_cb *gs_cb)
62 {
63 asm volatile(".insn rxy,0xe30000000049,0,%0" : : "Q" (*gs_cb));
64 }
65
66 static inline void save_gs_cb(struct gs_cb *gs_cb)
67 {
68 if (gs_cb)
69 store_gs_cb(gs_cb);
70 }
71
72 static inline void restore_gs_cb(struct gs_cb *gs_cb)
73 {
74 if (gs_cb)
75 load_gs_cb(gs_cb);
76 }
77
78 #endif /* _GUARDED_STORAGE_H */