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