aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-s390/Kbuild1
-rw-r--r--include/asm-s390/kvm.h41
-rw-r--r--include/asm-s390/kvm_host.h127
-rw-r--r--include/asm-s390/kvm_para.h30
-rw-r--r--include/linux/kvm.h15
5 files changed, 213 insertions, 1 deletions
diff --git a/include/asm-s390/Kbuild b/include/asm-s390/Kbuild
index e92b429d2be1..13c9805349f1 100644
--- a/include/asm-s390/Kbuild
+++ b/include/asm-s390/Kbuild
@@ -7,6 +7,7 @@ header-y += tape390.h
7header-y += ucontext.h 7header-y += ucontext.h
8header-y += vtoc.h 8header-y += vtoc.h
9header-y += zcrypt.h 9header-y += zcrypt.h
10header-y += kvm.h
10 11
11unifdef-y += cmb.h 12unifdef-y += cmb.h
12unifdef-y += debug.h 13unifdef-y += debug.h
diff --git a/include/asm-s390/kvm.h b/include/asm-s390/kvm.h
index 573f2a351386..d74002f95794 100644
--- a/include/asm-s390/kvm.h
+++ b/include/asm-s390/kvm.h
@@ -1,6 +1,45 @@
1#ifndef __LINUX_KVM_S390_H 1#ifndef __LINUX_KVM_S390_H
2#define __LINUX_KVM_S390_H 2#define __LINUX_KVM_S390_H
3 3
4/* s390 does not support KVM */ 4/*
5 * asm-s390/kvm.h - KVM s390 specific structures and definitions
6 *
7 * Copyright IBM Corp. 2008
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License (version 2 only)
11 * as published by the Free Software Foundation.
12 *
13 * Author(s): Carsten Otte <cotte@de.ibm.com>
14 * Christian Borntraeger <borntraeger@de.ibm.com>
15 */
16#include <asm/types.h>
17
18/* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
19struct kvm_pic_state {
20 /* no PIC for s390 */
21};
22
23struct kvm_ioapic_state {
24 /* no IOAPIC for s390 */
25};
26
27/* for KVM_GET_REGS and KVM_SET_REGS */
28struct kvm_regs {
29 /* general purpose regs for s390 */
30 __u64 gprs[16];
31};
32
33/* for KVM_GET_SREGS and KVM_SET_SREGS */
34struct kvm_sregs {
35 __u32 acrs[16];
36 __u64 crs[16];
37};
38
39/* for KVM_GET_FPU and KVM_SET_FPU */
40struct kvm_fpu {
41 __u32 fpc;
42 __u64 fprs[16];
43};
5 44
6#endif 45#endif
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h
new file mode 100644
index 000000000000..c9d653333106
--- /dev/null
+++ b/include/asm-s390/kvm_host.h
@@ -0,0 +1,127 @@
1/*
2 * asm-s390/kvm_host.h - definition for kernel virtual machines on s390
3 *
4 * Copyright IBM Corp. 2008
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only)
8 * as published by the Free Software Foundation.
9 *
10 * Author(s): Carsten Otte <cotte@de.ibm.com>
11 */
12
13
14#ifndef ASM_KVM_HOST_H
15#define ASM_KVM_HOST_H
16#include <linux/kvm_host.h>
17#include <asm/debug.h>
18
19#define KVM_MAX_VCPUS 64
20#define KVM_MEMORY_SLOTS 32
21/* memory slots that does not exposed to userspace */
22#define KVM_PRIVATE_MEM_SLOTS 4
23
24struct kvm_guest_debug {
25};
26
27struct sca_entry {
28 atomic_t scn;
29 __u64 reserved;
30 __u64 sda;
31 __u64 reserved2[2];
32} __attribute__((packed));
33
34
35struct sca_block {
36 __u64 ipte_control;
37 __u64 reserved[5];
38 __u64 mcn;
39 __u64 reserved2;
40 struct sca_entry cpu[64];
41} __attribute__((packed));
42
43#define KVM_PAGES_PER_HPAGE 256
44
45#define CPUSTAT_HOST 0x80000000
46#define CPUSTAT_WAIT 0x10000000
47#define CPUSTAT_ECALL_PEND 0x08000000
48#define CPUSTAT_STOP_INT 0x04000000
49#define CPUSTAT_IO_INT 0x02000000
50#define CPUSTAT_EXT_INT 0x01000000
51#define CPUSTAT_RUNNING 0x00800000
52#define CPUSTAT_RETAINED 0x00400000
53#define CPUSTAT_TIMING_SUB 0x00020000
54#define CPUSTAT_SIE_SUB 0x00010000
55#define CPUSTAT_RRF 0x00008000
56#define CPUSTAT_SLSV 0x00004000
57#define CPUSTAT_SLSR 0x00002000
58#define CPUSTAT_ZARCH 0x00000800
59#define CPUSTAT_MCDS 0x00000100
60#define CPUSTAT_SM 0x00000080
61#define CPUSTAT_G 0x00000008
62#define CPUSTAT_J 0x00000002
63#define CPUSTAT_P 0x00000001
64
65struct sie_block {
66 atomic_t cpuflags; /* 0x0000 */
67 __u32 prefix; /* 0x0004 */
68 __u8 reserved8[32]; /* 0x0008 */
69 __u64 cputm; /* 0x0028 */
70 __u64 ckc; /* 0x0030 */
71 __u64 epoch; /* 0x0038 */
72 __u8 reserved40[4]; /* 0x0040 */
73 __u16 lctl; /* 0x0044 */
74 __s16 icpua; /* 0x0046 */
75 __u32 ictl; /* 0x0048 */
76 __u32 eca; /* 0x004c */
77 __u8 icptcode; /* 0x0050 */
78 __u8 reserved51; /* 0x0051 */
79 __u16 ihcpu; /* 0x0052 */
80 __u8 reserved54[2]; /* 0x0054 */
81 __u16 ipa; /* 0x0056 */
82 __u32 ipb; /* 0x0058 */
83 __u32 scaoh; /* 0x005c */
84 __u8 reserved60; /* 0x0060 */
85 __u8 ecb; /* 0x0061 */
86 __u8 reserved62[2]; /* 0x0062 */
87 __u32 scaol; /* 0x0064 */
88 __u8 reserved68[4]; /* 0x0068 */
89 __u32 todpr; /* 0x006c */
90 __u8 reserved70[16]; /* 0x0070 */
91 __u64 gmsor; /* 0x0080 */
92 __u64 gmslm; /* 0x0088 */
93 psw_t gpsw; /* 0x0090 */
94 __u64 gg14; /* 0x00a0 */
95 __u64 gg15; /* 0x00a8 */
96 __u8 reservedb0[80]; /* 0x00b0 */
97 __u64 gcr[16]; /* 0x0100 */
98 __u64 gbea; /* 0x0180 */
99 __u8 reserved188[120]; /* 0x0188 */
100} __attribute__((packed));
101
102struct kvm_vcpu_stat {
103 u32 exit_userspace;
104};
105
106struct kvm_vcpu_arch {
107 struct sie_block *sie_block;
108 unsigned long guest_gprs[16];
109 s390_fp_regs host_fpregs;
110 unsigned int host_acrs[NUM_ACRS];
111 s390_fp_regs guest_fpregs;
112 unsigned int guest_acrs[NUM_ACRS];
113};
114
115struct kvm_vm_stat {
116 u32 remote_tlb_flush;
117};
118
119struct kvm_arch{
120 unsigned long guest_origin;
121 unsigned long guest_memsize;
122 struct sca_block *sca;
123 debug_info_t *dbf;
124};
125
126extern int sie64a(struct sie_block *, __u64 *);
127#endif
diff --git a/include/asm-s390/kvm_para.h b/include/asm-s390/kvm_para.h
new file mode 100644
index 000000000000..e9bd3fbe878c
--- /dev/null
+++ b/include/asm-s390/kvm_para.h
@@ -0,0 +1,30 @@
1/*
2 * asm-s390/kvm_para.h - definition for paravirtual devices on s390
3 *
4 * Copyright IBM Corp. 2008
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only)
8 * as published by the Free Software Foundation.
9 *
10 * Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
11 */
12
13#ifndef __S390_KVM_PARA_H
14#define __S390_KVM_PARA_H
15
16/*
17 * No hypercalls for KVM on s390
18 */
19
20static inline int kvm_para_available(void)
21{
22 return 0;
23}
24
25static inline unsigned int kvm_arch_para_features(void)
26{
27 return 0;
28}
29
30#endif /* __S390_KVM_PARA_H */
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 3bd38284bfe9..2367ff0c5dd0 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -205,6 +205,11 @@ struct kvm_vapic_addr {
205 __u64 vapic_addr; 205 __u64 vapic_addr;
206}; 206};
207 207
208struct kvm_s390_psw {
209 __u64 mask;
210 __u64 addr;
211};
212
208#define KVMIO 0xAE 213#define KVMIO 0xAE
209 214
210/* 215/*
@@ -213,6 +218,8 @@ struct kvm_vapic_addr {
213#define KVM_GET_API_VERSION _IO(KVMIO, 0x00) 218#define KVM_GET_API_VERSION _IO(KVMIO, 0x00)
214#define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ 219#define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */
215#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) 220#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list)
221
222#define KVM_S390_ENABLE_SIE _IO(KVMIO, 0x06)
216/* 223/*
217 * Check if a kvm extension is available. Argument is extension number, 224 * Check if a kvm extension is available. Argument is extension number,
218 * return is 1 (yes) or 0 (no, sorry). 225 * return is 1 (yes) or 0 (no, sorry).
@@ -291,5 +298,13 @@ struct kvm_vapic_addr {
291#define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) 298#define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
292/* Available with KVM_CAP_VAPIC */ 299/* Available with KVM_CAP_VAPIC */
293#define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) 300#define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr)
301/* store status for s390 */
302#define KVM_S390_STORE_STATUS_NOADDR (-1ul)
303#define KVM_S390_STORE_STATUS_PREFIXED (-2ul)
304#define KVM_S390_STORE_STATUS _IOW(KVMIO, 0x95, unsigned long)
305/* initial ipl psw for s390 */
306#define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw)
307/* initial reset for s390 */
308#define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97)
294 309
295#endif 310#endif