20 #ifndef __POWERPC_KVM_HOST_H__
21 #define __POWERPC_KVM_HOST_H__
24 #include <linux/hrtimer.h>
26 #include <linux/types.h>
30 #include <linux/kvm_para.h>
31 #include <linux/list.h>
34 #include <asm/processor.h>
36 #include <asm/cacheflush.h>
38 #define KVM_MAX_VCPUS NR_CPUS
39 #define KVM_MAX_VCORES NR_CPUS
40 #define KVM_MEMORY_SLOTS 32
42 #define KVM_PRIVATE_MEM_SLOTS 4
43 #define KVM_MEM_SLOTS_NUM (KVM_MEMORY_SLOTS + KVM_PRIVATE_MEM_SLOTS)
45 #ifdef CONFIG_KVM_MMIO
46 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
49 #ifdef CONFIG_KVM_BOOK3S_64_HV
52 #define KVM_ARCH_WANT_MMU_NOTIFIER
57 unsigned long start,
unsigned long end);
65 #define KVM_HPAGE_GFN_SHIFT(x) 0
66 #define KVM_NR_PAGE_SIZES 1
67 #define KVM_PAGES_PER_HPAGE(x) (1UL<<31)
69 #define HPTEG_CACHE_NUM (1 << 15)
70 #define HPTEG_HASH_BITS_PTE 13
71 #define HPTEG_HASH_BITS_PTE_LONG 12
72 #define HPTEG_HASH_BITS_VPTE 13
73 #define HPTEG_HASH_BITS_VPTE_LONG 5
74 #define HPTEG_HASH_NUM_PTE (1 << HPTEG_HASH_BITS_PTE)
75 #define HPTEG_HASH_NUM_PTE_LONG (1 << HPTEG_HASH_BITS_PTE_LONG)
76 #define HPTEG_HASH_NUM_VPTE (1 << HPTEG_HASH_BITS_VPTE)
77 #define HPTEG_HASH_NUM_VPTE_LONG (1 << HPTEG_HASH_BITS_VPTE_LONG)
80 #define KVM_PAM 0x0fffffffffffffffULL
114 #ifdef CONFIG_PPC_BOOK3S
211 #define KVMPPC_RMAP_LOCK_BIT 63
212 #define KVMPPC_RMAP_RC_SHIFT 32
213 #define KVMPPC_RMAP_REFERENCED (HPTE_R_R << KVMPPC_RMAP_RC_SHIFT)
214 #define KVMPPC_RMAP_CHANGED (HPTE_R_C << KVMPPC_RMAP_RC_SHIFT)
215 #define KVMPPC_RMAP_PRESENT 0x100000000ul
216 #define KVMPPC_RMAP_INDEX 0xfffffffful
219 #define KVMPPC_PAGE_ORDER_MASK 0x1f
220 #define KVMPPC_PAGE_NO_CACHE HPTE_R_I
221 #define KVMPPC_PAGE_WRITETHRU HPTE_R_W
222 #define KVMPPC_GOT_PAGE 0x80
230 #ifdef CONFIG_KVM_BOOK3S_64_HV
231 unsigned long hpt_virt;
233 unsigned int host_lpid;
234 unsigned long host_lpcr;
236 unsigned long host_sdr1;
241 unsigned long vrma_slb_v;
243 int using_mmu_notifiers;
246 unsigned long hpt_npte;
247 unsigned long hpt_mask;
251 unsigned short last_vcpu[
NR_CPUS];
255 #ifdef CONFIG_PPC_BOOK3S_64
286 #define VCORE_ENTRY_COUNT(vc) ((vc)->entry_exit_count & 0xff)
287 #define VCORE_EXIT_COUNT(vc) ((vc)->entry_exit_count >> 8)
290 #define VCORE_INACTIVE 0
291 #define VCORE_RUNNING 1
292 #define VCORE_EXITING 2
293 #define VCORE_SLEEPING 3
352 #ifdef CONFIG_PPC_BOOK3S
370 #ifdef CONFIG_ALTIVEC
379 #ifdef CONFIG_KVM_BOOKE_HV
390 #ifdef CONFIG_PPC_BOOK3S
402 #ifdef CONFIG_PPC_BOOK3S
404 ulong guest_owned_ext;
450 #ifdef CONFIG_KVM_EXIT_TIMING
451 struct mutex exit_timing_lock;
460 u64 timing_last_exit;
461 struct dentry *debugfs_exit_timing;
464 #ifdef CONFIG_PPC_BOOK3S
518 #ifdef CONFIG_KVM_BOOK3S_64_HV
521 unsigned long pgfault_addr;
523 unsigned long pgfault_hpte[2];
533 struct dtl_entry *dtl_ptr;
534 unsigned long dtl_index;
541 #define KVMPPC_VCPU_STOPPED 0
542 #define KVMPPC_VCPU_BUSY_IN_HOST 1
543 #define KVMPPC_VCPU_RUNNABLE 2
546 #define KVM_MMIO_REG_MASK 0x001f
547 #define KVM_MMIO_REG_EXT_MASK 0xffe0
548 #define KVM_MMIO_REG_GPR 0x0000
549 #define KVM_MMIO_REG_FPR 0x0020
550 #define KVM_MMIO_REG_QPR 0x0040
551 #define KVM_MMIO_REG_FQPR 0x0060
553 #define __KVM_HAVE_ARCH_WQP