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