diff options
Diffstat (limited to 'include/asm-s390/kvm_host.h')
-rw-r--r-- | include/asm-s390/kvm_host.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h index 8965b38d0a32..4fe19305888a 100644 --- a/include/asm-s390/kvm_host.h +++ b/include/asm-s390/kvm_host.h | |||
@@ -70,6 +70,7 @@ struct sie_block { | |||
70 | __u64 ckc; /* 0x0030 */ | 70 | __u64 ckc; /* 0x0030 */ |
71 | __u64 epoch; /* 0x0038 */ | 71 | __u64 epoch; /* 0x0038 */ |
72 | __u8 reserved40[4]; /* 0x0040 */ | 72 | __u8 reserved40[4]; /* 0x0040 */ |
73 | #define LCTL_CR0 0x8000 | ||
73 | __u16 lctl; /* 0x0044 */ | 74 | __u16 lctl; /* 0x0044 */ |
74 | __s16 icpua; /* 0x0046 */ | 75 | __s16 icpua; /* 0x0046 */ |
75 | __u32 ictl; /* 0x0048 */ | 76 | __u32 ictl; /* 0x0048 */ |
@@ -105,8 +106,79 @@ struct kvm_vcpu_stat { | |||
105 | u32 exit_external_interrupt; | 106 | u32 exit_external_interrupt; |
106 | u32 exit_stop_request; | 107 | u32 exit_stop_request; |
107 | u32 exit_validity; | 108 | u32 exit_validity; |
109 | u32 exit_instruction; | ||
110 | u32 instruction_lctl; | ||
111 | u32 instruction_lctg; | ||
112 | u32 exit_program_interruption; | ||
113 | u32 exit_instr_and_program; | ||
114 | u32 deliver_emergency_signal; | ||
115 | u32 deliver_service_signal; | ||
116 | u32 deliver_virtio_interrupt; | ||
117 | u32 deliver_stop_signal; | ||
118 | u32 deliver_prefix_signal; | ||
119 | u32 deliver_restart_signal; | ||
120 | u32 deliver_program_int; | ||
121 | u32 exit_wait_state; | ||
108 | }; | 122 | }; |
109 | 123 | ||
124 | struct io_info { | ||
125 | __u16 subchannel_id; /* 0x0b8 */ | ||
126 | __u16 subchannel_nr; /* 0x0ba */ | ||
127 | __u32 io_int_parm; /* 0x0bc */ | ||
128 | __u32 io_int_word; /* 0x0c0 */ | ||
129 | }; | ||
130 | |||
131 | struct ext_info { | ||
132 | __u32 ext_params; | ||
133 | __u64 ext_params2; | ||
134 | }; | ||
135 | |||
136 | #define PGM_OPERATION 0x01 | ||
137 | #define PGM_PRIVILEGED_OPERATION 0x02 | ||
138 | #define PGM_EXECUTE 0x03 | ||
139 | #define PGM_PROTECTION 0x04 | ||
140 | #define PGM_ADDRESSING 0x05 | ||
141 | #define PGM_SPECIFICATION 0x06 | ||
142 | #define PGM_DATA 0x07 | ||
143 | |||
144 | struct pgm_info { | ||
145 | __u16 code; | ||
146 | }; | ||
147 | |||
148 | struct prefix_info { | ||
149 | __u32 address; | ||
150 | }; | ||
151 | |||
152 | struct interrupt_info { | ||
153 | struct list_head list; | ||
154 | u64 type; | ||
155 | union { | ||
156 | struct io_info io; | ||
157 | struct ext_info ext; | ||
158 | struct pgm_info pgm; | ||
159 | struct prefix_info prefix; | ||
160 | }; | ||
161 | }; | ||
162 | |||
163 | struct local_interrupt { | ||
164 | spinlock_t lock; | ||
165 | struct list_head list; | ||
166 | atomic_t active; | ||
167 | struct float_interrupt *float_int; | ||
168 | int timer_due; /* event indicator for waitqueue below */ | ||
169 | wait_queue_head_t wq; | ||
170 | }; | ||
171 | |||
172 | struct float_interrupt { | ||
173 | spinlock_t lock; | ||
174 | struct list_head list; | ||
175 | atomic_t active; | ||
176 | int next_rr_cpu; | ||
177 | unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)]; | ||
178 | struct local_interrupt *local_int[64]; | ||
179 | }; | ||
180 | |||
181 | |||
110 | struct kvm_vcpu_arch { | 182 | struct kvm_vcpu_arch { |
111 | struct sie_block *sie_block; | 183 | struct sie_block *sie_block; |
112 | unsigned long guest_gprs[16]; | 184 | unsigned long guest_gprs[16]; |
@@ -114,6 +186,8 @@ struct kvm_vcpu_arch { | |||
114 | unsigned int host_acrs[NUM_ACRS]; | 186 | unsigned int host_acrs[NUM_ACRS]; |
115 | s390_fp_regs guest_fpregs; | 187 | s390_fp_regs guest_fpregs; |
116 | unsigned int guest_acrs[NUM_ACRS]; | 188 | unsigned int guest_acrs[NUM_ACRS]; |
189 | struct local_interrupt local_int; | ||
190 | struct timer_list ckc_timer; | ||
117 | }; | 191 | }; |
118 | 192 | ||
119 | struct kvm_vm_stat { | 193 | struct kvm_vm_stat { |
@@ -125,6 +199,7 @@ struct kvm_arch{ | |||
125 | unsigned long guest_memsize; | 199 | unsigned long guest_memsize; |
126 | struct sca_block *sca; | 200 | struct sca_block *sca; |
127 | debug_info_t *dbf; | 201 | debug_info_t *dbf; |
202 | struct float_interrupt float_int; | ||
128 | }; | 203 | }; |
129 | 204 | ||
130 | extern int sie64a(struct sie_block *, __u64 *); | 205 | extern int sie64a(struct sie_block *, __u64 *); |