diff options
Diffstat (limited to 'arch/powerpc/include/asm/kvm_host.h')
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index d1bb86074721..af326cde7cb6 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -44,6 +44,10 @@ | |||
44 | #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | 44 | #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 |
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | /* These values are internal and can be increased later */ | ||
48 | #define KVM_NR_IRQCHIPS 1 | ||
49 | #define KVM_IRQCHIP_NUM_PINS 256 | ||
50 | |||
47 | #if !defined(CONFIG_KVM_440) | 51 | #if !defined(CONFIG_KVM_440) |
48 | #include <linux/mmu_notifier.h> | 52 | #include <linux/mmu_notifier.h> |
49 | 53 | ||
@@ -188,6 +192,10 @@ struct kvmppc_linear_info { | |||
188 | int type; | 192 | int type; |
189 | }; | 193 | }; |
190 | 194 | ||
195 | /* XICS components, defined in book3s_xics.c */ | ||
196 | struct kvmppc_xics; | ||
197 | struct kvmppc_icp; | ||
198 | |||
191 | /* | 199 | /* |
192 | * The reverse mapping array has one entry for each HPTE, | 200 | * The reverse mapping array has one entry for each HPTE, |
193 | * which stores the guest's view of the second word of the HPTE | 201 | * which stores the guest's view of the second word of the HPTE |
@@ -255,6 +263,13 @@ struct kvm_arch { | |||
255 | #endif /* CONFIG_KVM_BOOK3S_64_HV */ | 263 | #endif /* CONFIG_KVM_BOOK3S_64_HV */ |
256 | #ifdef CONFIG_PPC_BOOK3S_64 | 264 | #ifdef CONFIG_PPC_BOOK3S_64 |
257 | struct list_head spapr_tce_tables; | 265 | struct list_head spapr_tce_tables; |
266 | struct list_head rtas_tokens; | ||
267 | #endif | ||
268 | #ifdef CONFIG_KVM_MPIC | ||
269 | struct openpic *mpic; | ||
270 | #endif | ||
271 | #ifdef CONFIG_KVM_XICS | ||
272 | struct kvmppc_xics *xics; | ||
258 | #endif | 273 | #endif |
259 | }; | 274 | }; |
260 | 275 | ||
@@ -301,11 +316,13 @@ struct kvmppc_vcore { | |||
301 | * that a guest can register. | 316 | * that a guest can register. |
302 | */ | 317 | */ |
303 | struct kvmppc_vpa { | 318 | struct kvmppc_vpa { |
319 | unsigned long gpa; /* Current guest phys addr */ | ||
304 | void *pinned_addr; /* Address in kernel linear mapping */ | 320 | void *pinned_addr; /* Address in kernel linear mapping */ |
305 | void *pinned_end; /* End of region */ | 321 | void *pinned_end; /* End of region */ |
306 | unsigned long next_gpa; /* Guest phys addr for update */ | 322 | unsigned long next_gpa; /* Guest phys addr for update */ |
307 | unsigned long len; /* Number of bytes required */ | 323 | unsigned long len; /* Number of bytes required */ |
308 | u8 update_pending; /* 1 => update pinned_addr from next_gpa */ | 324 | u8 update_pending; /* 1 => update pinned_addr from next_gpa */ |
325 | bool dirty; /* true => area has been modified by kernel */ | ||
309 | }; | 326 | }; |
310 | 327 | ||
311 | struct kvmppc_pte { | 328 | struct kvmppc_pte { |
@@ -359,6 +376,11 @@ struct kvmppc_slb { | |||
359 | #define KVMPPC_BOOKE_MAX_IAC 4 | 376 | #define KVMPPC_BOOKE_MAX_IAC 4 |
360 | #define KVMPPC_BOOKE_MAX_DAC 2 | 377 | #define KVMPPC_BOOKE_MAX_DAC 2 |
361 | 378 | ||
379 | /* KVMPPC_EPR_USER takes precedence over KVMPPC_EPR_KERNEL */ | ||
380 | #define KVMPPC_EPR_NONE 0 /* EPR not supported */ | ||
381 | #define KVMPPC_EPR_USER 1 /* exit to userspace to fill EPR */ | ||
382 | #define KVMPPC_EPR_KERNEL 2 /* in-kernel irqchip */ | ||
383 | |||
362 | struct kvmppc_booke_debug_reg { | 384 | struct kvmppc_booke_debug_reg { |
363 | u32 dbcr0; | 385 | u32 dbcr0; |
364 | u32 dbcr1; | 386 | u32 dbcr1; |
@@ -370,6 +392,12 @@ struct kvmppc_booke_debug_reg { | |||
370 | u64 dac[KVMPPC_BOOKE_MAX_DAC]; | 392 | u64 dac[KVMPPC_BOOKE_MAX_DAC]; |
371 | }; | 393 | }; |
372 | 394 | ||
395 | #define KVMPPC_IRQ_DEFAULT 0 | ||
396 | #define KVMPPC_IRQ_MPIC 1 | ||
397 | #define KVMPPC_IRQ_XICS 2 | ||
398 | |||
399 | struct openpic; | ||
400 | |||
373 | struct kvm_vcpu_arch { | 401 | struct kvm_vcpu_arch { |
374 | ulong host_stack; | 402 | ulong host_stack; |
375 | u32 host_pid; | 403 | u32 host_pid; |
@@ -502,8 +530,11 @@ struct kvm_vcpu_arch { | |||
502 | spinlock_t wdt_lock; | 530 | spinlock_t wdt_lock; |
503 | struct timer_list wdt_timer; | 531 | struct timer_list wdt_timer; |
504 | u32 tlbcfg[4]; | 532 | u32 tlbcfg[4]; |
533 | u32 tlbps[4]; | ||
505 | u32 mmucfg; | 534 | u32 mmucfg; |
535 | u32 eptcfg; | ||
506 | u32 epr; | 536 | u32 epr; |
537 | u32 crit_save; | ||
507 | struct kvmppc_booke_debug_reg dbg_reg; | 538 | struct kvmppc_booke_debug_reg dbg_reg; |
508 | #endif | 539 | #endif |
509 | gpa_t paddr_accessed; | 540 | gpa_t paddr_accessed; |
@@ -521,7 +552,7 @@ struct kvm_vcpu_arch { | |||
521 | u8 sane; | 552 | u8 sane; |
522 | u8 cpu_type; | 553 | u8 cpu_type; |
523 | u8 hcall_needed; | 554 | u8 hcall_needed; |
524 | u8 epr_enabled; | 555 | u8 epr_flags; /* KVMPPC_EPR_xxx */ |
525 | u8 epr_needed; | 556 | u8 epr_needed; |
526 | 557 | ||
527 | u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */ | 558 | u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */ |
@@ -548,6 +579,13 @@ struct kvm_vcpu_arch { | |||
548 | unsigned long magic_page_pa; /* phys addr to map the magic page to */ | 579 | unsigned long magic_page_pa; /* phys addr to map the magic page to */ |
549 | unsigned long magic_page_ea; /* effect. addr to map the magic page to */ | 580 | unsigned long magic_page_ea; /* effect. addr to map the magic page to */ |
550 | 581 | ||
582 | int irq_type; /* one of KVM_IRQ_* */ | ||
583 | int irq_cpu_id; | ||
584 | struct openpic *mpic; /* KVM_IRQ_MPIC */ | ||
585 | #ifdef CONFIG_KVM_XICS | ||
586 | struct kvmppc_icp *icp; /* XICS presentation controller */ | ||
587 | #endif | ||
588 | |||
551 | #ifdef CONFIG_KVM_BOOK3S_64_HV | 589 | #ifdef CONFIG_KVM_BOOK3S_64_HV |
552 | struct kvm_vcpu_arch_shared shregs; | 590 | struct kvm_vcpu_arch_shared shregs; |
553 | 591 | ||
@@ -588,5 +626,6 @@ struct kvm_vcpu_arch { | |||
588 | #define KVM_MMIO_REG_FQPR 0x0060 | 626 | #define KVM_MMIO_REG_FQPR 0x0060 |
589 | 627 | ||
590 | #define __KVM_HAVE_ARCH_WQP | 628 | #define __KVM_HAVE_ARCH_WQP |
629 | #define __KVM_HAVE_CREATE_DEVICE | ||
591 | 630 | ||
592 | #endif /* __POWERPC_KVM_HOST_H__ */ | 631 | #endif /* __POWERPC_KVM_HOST_H__ */ |