kvm_host.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. #ifndef __POWERPC_KVM_HOST_H__
  20. #define __POWERPC_KVM_HOST_H__
  21. #include <linux/mutex.h>
  22. #include <linux/timer.h>
  23. #include <linux/types.h>
  24. #include <linux/kvm_types.h>
  25. #include <asm/kvm_asm.h>
  26. #define KVM_MAX_VCPUS 1
  27. #define KVM_MEMORY_SLOTS 32
  28. /* memory slots that does not exposed to userspace */
  29. #define KVM_PRIVATE_MEM_SLOTS 4
  30. #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
  31. /* We don't currently support large pages. */
  32. #define KVM_PAGES_PER_HPAGE (1<<31)
  33. struct kvm;
  34. struct kvm_run;
  35. struct kvm_vcpu;
  36. struct kvm_vm_stat {
  37. u32 remote_tlb_flush;
  38. };
  39. struct kvm_vcpu_stat {
  40. u32 sum_exits;
  41. u32 mmio_exits;
  42. u32 dcr_exits;
  43. u32 signal_exits;
  44. u32 light_exits;
  45. /* Account for special types of light exits: */
  46. u32 itlb_real_miss_exits;
  47. u32 itlb_virt_miss_exits;
  48. u32 dtlb_real_miss_exits;
  49. u32 dtlb_virt_miss_exits;
  50. u32 syscall_exits;
  51. u32 isi_exits;
  52. u32 dsi_exits;
  53. u32 emulated_inst_exits;
  54. u32 dec_exits;
  55. u32 ext_intr_exits;
  56. u32 halt_wakeup;
  57. };
  58. struct tlbe {
  59. u32 tid; /* Only the low 8 bits are used. */
  60. u32 word0;
  61. u32 word1;
  62. u32 word2;
  63. };
  64. struct kvm_arch {
  65. };
  66. struct kvm_vcpu_arch {
  67. /* Unmodified copy of the guest's TLB. */
  68. struct tlbe guest_tlb[PPC44x_TLB_SIZE];
  69. /* TLB that's actually used when the guest is running. */
  70. struct tlbe shadow_tlb[PPC44x_TLB_SIZE];
  71. /* Pages which are referenced in the shadow TLB. */
  72. struct page *shadow_pages[PPC44x_TLB_SIZE];
  73. /* Copy of the host's TLB. */
  74. struct tlbe host_tlb[PPC44x_TLB_SIZE];
  75. u32 host_stack;
  76. u32 host_pid;
  77. u64 fpr[32];
  78. u32 gpr[32];
  79. u32 pc;
  80. u32 cr;
  81. u32 ctr;
  82. u32 lr;
  83. u32 xer;
  84. u32 msr;
  85. u32 mmucr;
  86. u32 sprg0;
  87. u32 sprg1;
  88. u32 sprg2;
  89. u32 sprg3;
  90. u32 sprg4;
  91. u32 sprg5;
  92. u32 sprg6;
  93. u32 sprg7;
  94. u32 srr0;
  95. u32 srr1;
  96. u32 csrr0;
  97. u32 csrr1;
  98. u32 dsrr0;
  99. u32 dsrr1;
  100. u32 dear;
  101. u32 esr;
  102. u32 dec;
  103. u32 decar;
  104. u32 tbl;
  105. u32 tbu;
  106. u32 tcr;
  107. u32 tsr;
  108. u32 ivor[16];
  109. u32 ivpr;
  110. u32 pir;
  111. u32 pid;
  112. u32 pvr;
  113. u32 ccr0;
  114. u32 ccr1;
  115. u32 dbcr0;
  116. u32 dbcr1;
  117. u32 last_inst;
  118. u32 fault_dear;
  119. u32 fault_esr;
  120. gpa_t paddr_accessed;
  121. u8 io_gpr; /* GPR used as IO source/target */
  122. u8 mmio_is_bigendian;
  123. u8 dcr_needed;
  124. u8 dcr_is_write;
  125. u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */
  126. struct timer_list dec_timer;
  127. unsigned long pending_exceptions;
  128. };
  129. struct kvm_guest_debug {
  130. int enabled;
  131. unsigned long bp[4];
  132. int singlestep;
  133. };
  134. #endif /* __POWERPC_KVM_HOST_H__ */