Skip to content

Commit 71cd774

Browse files
committed
KVM: s390: move s390-specific structs to uapi/asm/kvm.h
While this in principle breaks the appearance of KVM_S390_* ioctls on architectures other than s390, this seems unlikely to be a problem considering that there are already many "struct kvm_s390_*" definitions in arch/s390/include/uapi. Signed-off-by: Paolo Bonzini <[email protected]>
1 parent d750951 commit 71cd774

File tree

2 files changed

+314
-312
lines changed
  • arch/s390/include/uapi/asm
  • include/uapi/linux

2 files changed

+314
-312
lines changed

arch/s390/include/uapi/asm/kvm.h

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,320 @@
1414
#define __KVM_S390
1515
#define __KVM_HAVE_GUEST_DEBUG
1616

17+
struct kvm_s390_skeys {
18+
__u64 start_gfn;
19+
__u64 count;
20+
__u64 skeydata_addr;
21+
__u32 flags;
22+
__u32 reserved[9];
23+
};
24+
25+
#define KVM_S390_CMMA_PEEK (1 << 0)
26+
27+
/**
28+
* kvm_s390_cmma_log - Used for CMMA migration.
29+
*
30+
* Used both for input and output.
31+
*
32+
* @start_gfn: Guest page number to start from.
33+
* @count: Size of the result buffer.
34+
* @flags: Control operation mode via KVM_S390_CMMA_* flags
35+
* @remaining: Used with KVM_S390_GET_CMMA_BITS. Indicates how many dirty
36+
* pages are still remaining.
37+
* @mask: Used with KVM_S390_SET_CMMA_BITS. Bitmap of bits to actually set
38+
* in the PGSTE.
39+
* @values: Pointer to the values buffer.
40+
*
41+
* Used in KVM_S390_{G,S}ET_CMMA_BITS ioctls.
42+
*/
43+
struct kvm_s390_cmma_log {
44+
__u64 start_gfn;
45+
__u32 count;
46+
__u32 flags;
47+
union {
48+
__u64 remaining;
49+
__u64 mask;
50+
};
51+
__u64 values;
52+
};
53+
54+
#define KVM_S390_RESET_POR 1
55+
#define KVM_S390_RESET_CLEAR 2
56+
#define KVM_S390_RESET_SUBSYSTEM 4
57+
#define KVM_S390_RESET_CPU_INIT 8
58+
#define KVM_S390_RESET_IPL 16
59+
60+
/* for KVM_S390_MEM_OP */
61+
struct kvm_s390_mem_op {
62+
/* in */
63+
__u64 gaddr; /* the guest address */
64+
__u64 flags; /* flags */
65+
__u32 size; /* amount of bytes */
66+
__u32 op; /* type of operation */
67+
__u64 buf; /* buffer in userspace */
68+
union {
69+
struct {
70+
__u8 ar; /* the access register number */
71+
__u8 key; /* access key, ignored if flag unset */
72+
__u8 pad1[6]; /* ignored */
73+
__u64 old_addr; /* ignored if cmpxchg flag unset */
74+
};
75+
__u32 sida_offset; /* offset into the sida */
76+
__u8 reserved[32]; /* ignored */
77+
};
78+
};
79+
/* types for kvm_s390_mem_op->op */
80+
#define KVM_S390_MEMOP_LOGICAL_READ 0
81+
#define KVM_S390_MEMOP_LOGICAL_WRITE 1
82+
#define KVM_S390_MEMOP_SIDA_READ 2
83+
#define KVM_S390_MEMOP_SIDA_WRITE 3
84+
#define KVM_S390_MEMOP_ABSOLUTE_READ 4
85+
#define KVM_S390_MEMOP_ABSOLUTE_WRITE 5
86+
#define KVM_S390_MEMOP_ABSOLUTE_CMPXCHG 6
87+
88+
/* flags for kvm_s390_mem_op->flags */
89+
#define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0)
90+
#define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1)
91+
#define KVM_S390_MEMOP_F_SKEY_PROTECTION (1ULL << 2)
92+
93+
/* flags specifying extension support via KVM_CAP_S390_MEM_OP_EXTENSION */
94+
#define KVM_S390_MEMOP_EXTENSION_CAP_BASE (1 << 0)
95+
#define KVM_S390_MEMOP_EXTENSION_CAP_CMPXCHG (1 << 1)
96+
97+
struct kvm_s390_psw {
98+
__u64 mask;
99+
__u64 addr;
100+
};
101+
102+
/* valid values for type in kvm_s390_interrupt */
103+
#define KVM_S390_SIGP_STOP 0xfffe0000u
104+
#define KVM_S390_PROGRAM_INT 0xfffe0001u
105+
#define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u
106+
#define KVM_S390_RESTART 0xfffe0003u
107+
#define KVM_S390_INT_PFAULT_INIT 0xfffe0004u
108+
#define KVM_S390_INT_PFAULT_DONE 0xfffe0005u
109+
#define KVM_S390_MCHK 0xfffe1000u
110+
#define KVM_S390_INT_CLOCK_COMP 0xffff1004u
111+
#define KVM_S390_INT_CPU_TIMER 0xffff1005u
112+
#define KVM_S390_INT_VIRTIO 0xffff2603u
113+
#define KVM_S390_INT_SERVICE 0xffff2401u
114+
#define KVM_S390_INT_EMERGENCY 0xffff1201u
115+
#define KVM_S390_INT_EXTERNAL_CALL 0xffff1202u
116+
/* Anything below 0xfffe0000u is taken by INT_IO */
117+
#define KVM_S390_INT_IO(ai,cssid,ssid,schid) \
118+
(((schid)) | \
119+
((ssid) << 16) | \
120+
((cssid) << 18) | \
121+
((ai) << 26))
122+
#define KVM_S390_INT_IO_MIN 0x00000000u
123+
#define KVM_S390_INT_IO_MAX 0xfffdffffu
124+
#define KVM_S390_INT_IO_AI_MASK 0x04000000u
125+
126+
127+
struct kvm_s390_interrupt {
128+
__u32 type;
129+
__u32 parm;
130+
__u64 parm64;
131+
};
132+
133+
struct kvm_s390_io_info {
134+
__u16 subchannel_id;
135+
__u16 subchannel_nr;
136+
__u32 io_int_parm;
137+
__u32 io_int_word;
138+
};
139+
140+
struct kvm_s390_ext_info {
141+
__u32 ext_params;
142+
__u32 pad;
143+
__u64 ext_params2;
144+
};
145+
146+
struct kvm_s390_pgm_info {
147+
__u64 trans_exc_code;
148+
__u64 mon_code;
149+
__u64 per_address;
150+
__u32 data_exc_code;
151+
__u16 code;
152+
__u16 mon_class_nr;
153+
__u8 per_code;
154+
__u8 per_atmid;
155+
__u8 exc_access_id;
156+
__u8 per_access_id;
157+
__u8 op_access_id;
158+
#define KVM_S390_PGM_FLAGS_ILC_VALID 0x01
159+
#define KVM_S390_PGM_FLAGS_ILC_0 0x02
160+
#define KVM_S390_PGM_FLAGS_ILC_1 0x04
161+
#define KVM_S390_PGM_FLAGS_ILC_MASK 0x06
162+
#define KVM_S390_PGM_FLAGS_NO_REWIND 0x08
163+
__u8 flags;
164+
__u8 pad[2];
165+
};
166+
167+
struct kvm_s390_prefix_info {
168+
__u32 address;
169+
};
170+
171+
struct kvm_s390_extcall_info {
172+
__u16 code;
173+
};
174+
175+
struct kvm_s390_emerg_info {
176+
__u16 code;
177+
};
178+
179+
#define KVM_S390_STOP_FLAG_STORE_STATUS 0x01
180+
struct kvm_s390_stop_info {
181+
__u32 flags;
182+
};
183+
184+
struct kvm_s390_mchk_info {
185+
__u64 cr14;
186+
__u64 mcic;
187+
__u64 failing_storage_address;
188+
__u32 ext_damage_code;
189+
__u32 pad;
190+
__u8 fixed_logout[16];
191+
};
192+
193+
struct kvm_s390_irq {
194+
__u64 type;
195+
union {
196+
struct kvm_s390_io_info io;
197+
struct kvm_s390_ext_info ext;
198+
struct kvm_s390_pgm_info pgm;
199+
struct kvm_s390_emerg_info emerg;
200+
struct kvm_s390_extcall_info extcall;
201+
struct kvm_s390_prefix_info prefix;
202+
struct kvm_s390_stop_info stop;
203+
struct kvm_s390_mchk_info mchk;
204+
char reserved[64];
205+
} u;
206+
};
207+
208+
struct kvm_s390_irq_state {
209+
__u64 buf;
210+
__u32 flags; /* will stay unused for compatibility reasons */
211+
__u32 len;
212+
__u32 reserved[4]; /* will stay unused for compatibility reasons */
213+
};
214+
215+
struct kvm_s390_ucas_mapping {
216+
__u64 user_addr;
217+
__u64 vcpu_addr;
218+
__u64 length;
219+
};
220+
221+
struct kvm_s390_pv_sec_parm {
222+
__u64 origin;
223+
__u64 length;
224+
};
225+
226+
struct kvm_s390_pv_unp {
227+
__u64 addr;
228+
__u64 size;
229+
__u64 tweak;
230+
};
231+
232+
enum pv_cmd_dmp_id {
233+
KVM_PV_DUMP_INIT,
234+
KVM_PV_DUMP_CONFIG_STOR_STATE,
235+
KVM_PV_DUMP_COMPLETE,
236+
KVM_PV_DUMP_CPU,
237+
};
238+
239+
struct kvm_s390_pv_dmp {
240+
__u64 subcmd;
241+
__u64 buff_addr;
242+
__u64 buff_len;
243+
__u64 gaddr; /* For dump storage state */
244+
__u64 reserved[4];
245+
};
246+
247+
enum pv_cmd_info_id {
248+
KVM_PV_INFO_VM,
249+
KVM_PV_INFO_DUMP,
250+
};
251+
252+
struct kvm_s390_pv_info_dump {
253+
__u64 dump_cpu_buffer_len;
254+
__u64 dump_config_mem_buffer_per_1m;
255+
__u64 dump_config_finalize_len;
256+
};
257+
258+
struct kvm_s390_pv_info_vm {
259+
__u64 inst_calls_list[4];
260+
__u64 max_cpus;
261+
__u64 max_guests;
262+
__u64 max_guest_addr;
263+
__u64 feature_indication;
264+
};
265+
266+
struct kvm_s390_pv_info_header {
267+
__u32 id;
268+
__u32 len_max;
269+
__u32 len_written;
270+
__u32 reserved;
271+
};
272+
273+
struct kvm_s390_pv_info {
274+
struct kvm_s390_pv_info_header header;
275+
union {
276+
struct kvm_s390_pv_info_dump dump;
277+
struct kvm_s390_pv_info_vm vm;
278+
};
279+
};
280+
281+
enum pv_cmd_id {
282+
KVM_PV_ENABLE,
283+
KVM_PV_DISABLE,
284+
KVM_PV_SET_SEC_PARMS,
285+
KVM_PV_UNPACK,
286+
KVM_PV_VERIFY,
287+
KVM_PV_PREP_RESET,
288+
KVM_PV_UNSHARE_ALL,
289+
KVM_PV_INFO,
290+
KVM_PV_DUMP,
291+
KVM_PV_ASYNC_CLEANUP_PREPARE,
292+
KVM_PV_ASYNC_CLEANUP_PERFORM,
293+
};
294+
295+
struct kvm_pv_cmd {
296+
__u32 cmd; /* Command to be executed */
297+
__u16 rc; /* Ultravisor return code */
298+
__u16 rrc; /* Ultravisor return reason code */
299+
__u64 data; /* Data or address */
300+
__u32 flags; /* flags for future extensions. Must be 0 for now */
301+
__u32 reserved[3];
302+
};
303+
304+
struct kvm_s390_zpci_op {
305+
/* in */
306+
__u32 fh; /* target device */
307+
__u8 op; /* operation to perform */
308+
__u8 pad[3];
309+
union {
310+
/* for KVM_S390_ZPCIOP_REG_AEN */
311+
struct {
312+
__u64 ibv; /* Guest addr of interrupt bit vector */
313+
__u64 sb; /* Guest addr of summary bit */
314+
__u32 flags;
315+
__u32 noi; /* Number of interrupts */
316+
__u8 isc; /* Guest interrupt subclass */
317+
__u8 sbo; /* Offset of guest summary bit vector */
318+
__u16 pad;
319+
} reg_aen;
320+
__u64 reserved[8];
321+
} u;
322+
};
323+
324+
/* types for kvm_s390_zpci_op->op */
325+
#define KVM_S390_ZPCIOP_REG_AEN 0
326+
#define KVM_S390_ZPCIOP_DEREG_AEN 1
327+
328+
/* flags for kvm_s390_zpci_op->u.reg_aen.flags */
329+
#define KVM_S390_ZPCIOP_REGAEN_HOST (1 << 0)
330+
17331
/* Device control API: s390-specific devices */
18332
#define KVM_DEV_FLIC_GET_ALL_IRQS 1
19333
#define KVM_DEV_FLIC_ENQUEUE 2

0 commit comments

Comments
 (0)