Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/s390/include/uapi/asm/guarded_storage.h
26481 views
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 */
79
80