kvm_host.h 3.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License, version 2, as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 * Copyright IBM Corp. 2007
 *
 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
 */

#ifndef __POWERPC_KVM_HOST_H__
#define __POWERPC_KVM_HOST_H__

#include <linux/mutex.h>
#include <linux/timer.h>
#include <linux/types.h>
#include <linux/kvm_types.h>
#include <asm/kvm_asm.h>

#define KVM_MAX_VCPUS 1
#define KVM_MEMORY_SLOTS 32
/* memory slots that does not exposed to userspace */
#define KVM_PRIVATE_MEM_SLOTS 4

/* We don't currently support large pages. */
#define KVM_PAGES_PER_HPAGE (1<<31)

struct kvm;
struct kvm_run;
struct kvm_vcpu;

struct kvm_vm_stat {
	u32 remote_tlb_flush;
};

struct kvm_vcpu_stat {
	u32 sum_exits;
	u32 mmio_exits;
	u32 dcr_exits;
	u32 signal_exits;
	u32 light_exits;
	/* Account for special types of light exits: */
	u32 itlb_real_miss_exits;
	u32 itlb_virt_miss_exits;
	u32 dtlb_real_miss_exits;
	u32 dtlb_virt_miss_exits;
	u32 syscall_exits;
	u32 isi_exits;
	u32 dsi_exits;
	u32 emulated_inst_exits;
	u32 dec_exits;
	u32 ext_intr_exits;
62
	u32 halt_wakeup;
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
};

struct tlbe {
	u32 tid; /* Only the low 8 bits are used. */
	u32 word0;
	u32 word1;
	u32 word2;
};

struct kvm_arch {
};

struct kvm_vcpu_arch {
	/* Unmodified copy of the guest's TLB. */
	struct tlbe guest_tlb[PPC44x_TLB_SIZE];
	/* TLB that's actually used when the guest is running. */
	struct tlbe shadow_tlb[PPC44x_TLB_SIZE];
	/* Pages which are referenced in the shadow TLB. */
	struct page *shadow_pages[PPC44x_TLB_SIZE];
	/* Copy of the host's TLB. */
	struct tlbe host_tlb[PPC44x_TLB_SIZE];

	u32 host_stack;
	u32 host_pid;

	u64 fpr[32];
	u32 gpr[32];

	u32 pc;
	u32 cr;
	u32 ctr;
	u32 lr;
	u32 xer;

	u32 msr;
	u32 mmucr;
	u32 sprg0;
	u32 sprg1;
	u32 sprg2;
	u32 sprg3;
	u32 sprg4;
	u32 sprg5;
	u32 sprg6;
	u32 sprg7;
	u32 srr0;
	u32 srr1;
	u32 csrr0;
	u32 csrr1;
	u32 dsrr0;
	u32 dsrr1;
	u32 dear;
	u32 esr;
	u32 dec;
	u32 decar;
	u32 tbl;
	u32 tbu;
	u32 tcr;
	u32 tsr;
	u32 ivor[16];
	u32 ivpr;
	u32 pir;
	u32 pid;
	u32 pvr;
	u32 ccr0;
	u32 ccr1;
	u32 dbcr0;
	u32 dbcr1;

	u32 last_inst;
	u32 fault_dear;
	u32 fault_esr;
	gpa_t paddr_accessed;

	u8 io_gpr; /* GPR used as IO source/target */
	u8 mmio_is_bigendian;
	u8 dcr_needed;
	u8 dcr_is_write;

	u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */

	struct timer_list dec_timer;
	unsigned long pending_exceptions;
};

struct kvm_guest_debug {
	int enabled;
	unsigned long bp[4];
	int singlestep;
};

#endif /* __POWERPC_KVM_HOST_H__ */