1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License, version 2, as
4  * published by the Free Software Foundation.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9  * GNU General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public License
12  * along with this program; if not, write to the Free Software
13  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
14  *
15  * Copyright IBM Corp. 2007
16  *
17  * Authors: Hollis Blanchard <hollisb@us.ibm.com>
18  */
19 
20 #ifndef __POWERPC_KVM_HOST_H__
21 #define __POWERPC_KVM_HOST_H__
22 
23 #include <linux/mutex.h>
24 #include <linux/hrtimer.h>
25 #include <linux/interrupt.h>
26 #include <linux/types.h>
27 #include <linux/kvm_types.h>
28 #include <linux/threads.h>
29 #include <linux/spinlock.h>
30 #include <linux/kvm_para.h>
31 #include <linux/list.h>
32 #include <linux/atomic.h>
33 #include <asm/kvm_asm.h>
34 #include <asm/processor.h>
35 
36 #define KVM_MAX_VCPUS		NR_CPUS
37 #define KVM_MAX_VCORES		NR_CPUS
38 #define KVM_MEMORY_SLOTS 32
39 /* memory slots that does not exposed to userspace */
40 #define KVM_PRIVATE_MEM_SLOTS 4
41 
42 #ifdef CONFIG_KVM_MMIO
43 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
44 #endif
45 
46 /* We don't currently support large pages. */
47 #define KVM_HPAGE_GFN_SHIFT(x)	0
48 #define KVM_NR_PAGE_SIZES	1
49 #define KVM_PAGES_PER_HPAGE(x)	(1UL<<31)
50 
51 #define HPTEG_CACHE_NUM			(1 << 15)
52 #define HPTEG_HASH_BITS_PTE		13
53 #define HPTEG_HASH_BITS_PTE_LONG	12
54 #define HPTEG_HASH_BITS_VPTE		13
55 #define HPTEG_HASH_BITS_VPTE_LONG	5
56 #define HPTEG_HASH_NUM_PTE		(1 << HPTEG_HASH_BITS_PTE)
57 #define HPTEG_HASH_NUM_PTE_LONG		(1 << HPTEG_HASH_BITS_PTE_LONG)
58 #define HPTEG_HASH_NUM_VPTE		(1 << HPTEG_HASH_BITS_VPTE)
59 #define HPTEG_HASH_NUM_VPTE_LONG	(1 << HPTEG_HASH_BITS_VPTE_LONG)
60 
61 /* Physical Address Mask - allowed range of real mode RAM access */
62 #define KVM_PAM			0x0fffffffffffffffULL
63 
64 struct kvm;
65 struct kvm_run;
66 struct kvm_vcpu;
67 
68 struct lppaca;
69 struct slb_shadow;
70 struct dtl;
71 
72 struct kvm_vm_stat {
73 	u32 remote_tlb_flush;
74 };
75 
76 struct kvm_vcpu_stat {
77 	u32 sum_exits;
78 	u32 mmio_exits;
79 	u32 dcr_exits;
80 	u32 signal_exits;
81 	u32 light_exits;
82 	/* Account for special types of light exits: */
83 	u32 itlb_real_miss_exits;
84 	u32 itlb_virt_miss_exits;
85 	u32 dtlb_real_miss_exits;
86 	u32 dtlb_virt_miss_exits;
87 	u32 syscall_exits;
88 	u32 isi_exits;
89 	u32 dsi_exits;
90 	u32 emulated_inst_exits;
91 	u32 dec_exits;
92 	u32 ext_intr_exits;
93 	u32 halt_wakeup;
94 #ifdef CONFIG_PPC_BOOK3S
95 	u32 pf_storage;
96 	u32 pf_instruc;
97 	u32 sp_storage;
98 	u32 sp_instruc;
99 	u32 queue_intr;
100 	u32 ld;
101 	u32 ld_slow;
102 	u32 st;
103 	u32 st_slow;
104 #endif
105 };
106 
107 enum kvm_exit_types {
108 	MMIO_EXITS,
109 	DCR_EXITS,
110 	SIGNAL_EXITS,
111 	ITLB_REAL_MISS_EXITS,
112 	ITLB_VIRT_MISS_EXITS,
113 	DTLB_REAL_MISS_EXITS,
114 	DTLB_VIRT_MISS_EXITS,
115 	SYSCALL_EXITS,
116 	ISI_EXITS,
117 	DSI_EXITS,
118 	EMULATED_INST_EXITS,
119 	EMULATED_MTMSRWE_EXITS,
120 	EMULATED_WRTEE_EXITS,
121 	EMULATED_MTSPR_EXITS,
122 	EMULATED_MFSPR_EXITS,
123 	EMULATED_MTMSR_EXITS,
124 	EMULATED_MFMSR_EXITS,
125 	EMULATED_TLBSX_EXITS,
126 	EMULATED_TLBWE_EXITS,
127 	EMULATED_RFI_EXITS,
128 	DEC_EXITS,
129 	EXT_INTR_EXITS,
130 	HALT_WAKEUP,
131 	USR_PR_INST,
132 	FP_UNAVAIL,
133 	DEBUG_EXITS,
134 	TIMEINGUEST,
135 	__NUMBER_OF_KVM_EXIT_TYPES
136 };
137 
138 /* allow access to big endian 32bit upper/lower parts and 64bit var */
139 struct kvmppc_exit_timing {
140 	union {
141 		u64 tv64;
142 		struct {
143 			u32 tbu, tbl;
144 		} tv32;
145 	};
146 };
147 
148 struct kvmppc_pginfo {
149 	unsigned long pfn;
150 	atomic_t refcnt;
151 };
152 
153 struct kvmppc_spapr_tce_table {
154 	struct list_head list;
155 	struct kvm *kvm;
156 	u64 liobn;
157 	u32 window_size;
158 	struct page *pages[0];
159 };
160 
161 struct kvmppc_rma_info {
162 	void		*base_virt;
163 	unsigned long	 base_pfn;
164 	unsigned long	 npages;
165 	struct list_head list;
166 	atomic_t 	 use_count;
167 };
168 
169 struct kvm_arch {
170 #ifdef CONFIG_KVM_BOOK3S_64_HV
171 	unsigned long hpt_virt;
172 	unsigned long ram_npages;
173 	unsigned long ram_psize;
174 	unsigned long ram_porder;
175 	struct kvmppc_pginfo *ram_pginfo;
176 	unsigned int lpid;
177 	unsigned int host_lpid;
178 	unsigned long host_lpcr;
179 	unsigned long sdr1;
180 	unsigned long host_sdr1;
181 	int tlbie_lock;
182 	int n_rma_pages;
183 	unsigned long lpcr;
184 	unsigned long rmor;
185 	struct kvmppc_rma_info *rma;
186 	struct list_head spapr_tce_tables;
187 	unsigned short last_vcpu[NR_CPUS];
188 	struct kvmppc_vcore *vcores[KVM_MAX_VCORES];
189 #endif /* CONFIG_KVM_BOOK3S_64_HV */
190 };
191 
192 /*
193  * Struct for a virtual core.
194  * Note: entry_exit_count combines an entry count in the bottom 8 bits
195  * and an exit count in the next 8 bits.  This is so that we can
196  * atomically increment the entry count iff the exit count is 0
197  * without taking the lock.
198  */
199 struct kvmppc_vcore {
200 	int n_runnable;
201 	int n_blocked;
202 	int num_threads;
203 	int entry_exit_count;
204 	int n_woken;
205 	int nap_count;
206 	u16 pcpu;
207 	u8 vcore_running;
208 	u8 in_guest;
209 	struct list_head runnable_threads;
210 	spinlock_t lock;
211 };
212 
213 #define VCORE_ENTRY_COUNT(vc)	((vc)->entry_exit_count & 0xff)
214 #define VCORE_EXIT_COUNT(vc)	((vc)->entry_exit_count >> 8)
215 
216 struct kvmppc_pte {
217 	ulong eaddr;
218 	u64 vpage;
219 	ulong raddr;
220 	bool may_read		: 1;
221 	bool may_write		: 1;
222 	bool may_execute	: 1;
223 };
224 
225 struct kvmppc_mmu {
226 	/* book3s_64 only */
227 	void (*slbmte)(struct kvm_vcpu *vcpu, u64 rb, u64 rs);
228 	u64  (*slbmfee)(struct kvm_vcpu *vcpu, u64 slb_nr);
229 	u64  (*slbmfev)(struct kvm_vcpu *vcpu, u64 slb_nr);
230 	void (*slbie)(struct kvm_vcpu *vcpu, u64 slb_nr);
231 	void (*slbia)(struct kvm_vcpu *vcpu);
232 	/* book3s */
233 	void (*mtsrin)(struct kvm_vcpu *vcpu, u32 srnum, ulong value);
234 	u32  (*mfsrin)(struct kvm_vcpu *vcpu, u32 srnum);
235 	int  (*xlate)(struct kvm_vcpu *vcpu, gva_t eaddr, struct kvmppc_pte *pte, bool data);
236 	void (*reset_msr)(struct kvm_vcpu *vcpu);
237 	void (*tlbie)(struct kvm_vcpu *vcpu, ulong addr, bool large);
238 	int  (*esid_to_vsid)(struct kvm_vcpu *vcpu, ulong esid, u64 *vsid);
239 	u64  (*ea_to_vp)(struct kvm_vcpu *vcpu, gva_t eaddr, bool data);
240 	bool (*is_dcbz32)(struct kvm_vcpu *vcpu);
241 };
242 
243 struct kvmppc_slb {
244 	u64 esid;
245 	u64 vsid;
246 	u64 orige;
247 	u64 origv;
248 	bool valid	: 1;
249 	bool Ks		: 1;
250 	bool Kp		: 1;
251 	bool nx		: 1;
252 	bool large	: 1;	/* PTEs are 16MB */
253 	bool tb		: 1;	/* 1TB segment */
254 	bool class	: 1;
255 };
256 
257 struct kvm_vcpu_arch {
258 	ulong host_stack;
259 	u32 host_pid;
260 #ifdef CONFIG_PPC_BOOK3S
261 	ulong host_msr;
262 	ulong host_r2;
263 	void *host_retip;
264 	ulong trampoline_lowmem;
265 	ulong trampoline_enter;
266 	ulong highmem_handler;
267 	ulong rmcall;
268 	ulong host_paca_phys;
269 	struct kvmppc_slb slb[64];
270 	int slb_max;		/* 1 + index of last valid entry in slb[] */
271 	int slb_nr;		/* total number of entries in SLB */
272 	struct kvmppc_mmu mmu;
273 #endif
274 
275 	ulong gpr[32];
276 
277 	u64 fpr[32];
278 	u64 fpscr;
279 
280 #ifdef CONFIG_SPE
281 	ulong evr[32];
282 	ulong spefscr;
283 	ulong host_spefscr;
284 	u64 acc;
285 #endif
286 #ifdef CONFIG_ALTIVEC
287 	vector128 vr[32];
288 	vector128 vscr;
289 #endif
290 
291 #ifdef CONFIG_VSX
292 	u64 vsr[64];
293 #endif
294 
295 #ifdef CONFIG_PPC_BOOK3S
296 	/* For Gekko paired singles */
297 	u32 qpr[32];
298 #endif
299 
300 	ulong pc;
301 	ulong ctr;
302 	ulong lr;
303 
304 	ulong xer;
305 	u32 cr;
306 
307 #ifdef CONFIG_PPC_BOOK3S
308 	ulong hflags;
309 	ulong guest_owned_ext;
310 	ulong purr;
311 	ulong spurr;
312 	ulong dscr;
313 	ulong amr;
314 	ulong uamor;
315 	u32 ctrl;
316 	ulong dabr;
317 #endif
318 	u32 vrsave; /* also USPRG0 */
319 	u32 mmucr;
320 	ulong shadow_msr;
321 	ulong sprg4;
322 	ulong sprg5;
323 	ulong sprg6;
324 	ulong sprg7;
325 	ulong csrr0;
326 	ulong csrr1;
327 	ulong dsrr0;
328 	ulong dsrr1;
329 	ulong mcsrr0;
330 	ulong mcsrr1;
331 	ulong mcsr;
332 	ulong esr;
333 	u32 dec;
334 	u32 decar;
335 	u32 tbl;
336 	u32 tbu;
337 	u32 tcr;
338 	u32 tsr;
339 	u32 ivor[64];
340 	ulong ivpr;
341 	u32 pir;
342 	u32 pvr;
343 
344 	u32 shadow_pid;
345 	u32 shadow_pid1;
346 	u32 pid;
347 	u32 swap_pid;
348 
349 	u32 ccr0;
350 	u32 ccr1;
351 	u32 dbcr0;
352 	u32 dbcr1;
353 	u32 dbsr;
354 
355 	u64 mmcr[3];
356 	u32 pmc[8];
357 
358 #ifdef CONFIG_KVM_EXIT_TIMING
359 	struct mutex exit_timing_lock;
360 	struct kvmppc_exit_timing timing_exit;
361 	struct kvmppc_exit_timing timing_last_enter;
362 	u32 last_exit_type;
363 	u32 timing_count_type[__NUMBER_OF_KVM_EXIT_TYPES];
364 	u64 timing_sum_duration[__NUMBER_OF_KVM_EXIT_TYPES];
365 	u64 timing_sum_quad_duration[__NUMBER_OF_KVM_EXIT_TYPES];
366 	u64 timing_min_duration[__NUMBER_OF_KVM_EXIT_TYPES];
367 	u64 timing_max_duration[__NUMBER_OF_KVM_EXIT_TYPES];
368 	u64 timing_last_exit;
369 	struct dentry *debugfs_exit_timing;
370 #endif
371 
372 #ifdef CONFIG_PPC_BOOK3S
373 	ulong fault_dar;
374 	u32 fault_dsisr;
375 #endif
376 
377 #ifdef CONFIG_BOOKE
378 	ulong fault_dear;
379 	ulong fault_esr;
380 	ulong queued_dear;
381 	ulong queued_esr;
382 #endif
383 	gpa_t paddr_accessed;
384 
385 	u8 io_gpr; /* GPR used as IO source/target */
386 	u8 mmio_is_bigendian;
387 	u8 mmio_sign_extend;
388 	u8 dcr_needed;
389 	u8 dcr_is_write;
390 	u8 osi_needed;
391 	u8 osi_enabled;
392 	u8 hcall_needed;
393 
394 	u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */
395 
396 	struct hrtimer dec_timer;
397 	struct tasklet_struct tasklet;
398 	u64 dec_jiffies;
399 	u64 dec_expires;
400 	unsigned long pending_exceptions;
401 	u16 last_cpu;
402 	u8 ceded;
403 	u8 prodded;
404 	u32 last_inst;
405 
406 	struct lppaca *vpa;
407 	struct slb_shadow *slb_shadow;
408 	struct dtl *dtl;
409 	struct dtl *dtl_end;
410 
411 	struct kvmppc_vcore *vcore;
412 	int ret;
413 	int trap;
414 	int state;
415 	int ptid;
416 	wait_queue_head_t cpu_run;
417 
418 	struct kvm_vcpu_arch_shared *shared;
419 	unsigned long magic_page_pa; /* phys addr to map the magic page to */
420 	unsigned long magic_page_ea; /* effect. addr to map the magic page to */
421 
422 #ifdef CONFIG_KVM_BOOK3S_64_HV
423 	struct kvm_vcpu_arch_shared shregs;
424 
425 	struct list_head run_list;
426 	struct task_struct *run_task;
427 	struct kvm_run *kvm_run;
428 #endif
429 };
430 
431 #define KVMPPC_VCPU_BUSY_IN_HOST	0
432 #define KVMPPC_VCPU_BLOCKED		1
433 #define KVMPPC_VCPU_RUNNABLE		2
434 
435 #endif /* __POWERPC_KVM_HOST_H__ */
436