| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-30 16:05:56 +02:00
										 |  |  | #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | /* 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; | 
					
						
							| 
									
										
										
										
											2008-04-25 17:55:49 -05:00
										 |  |  | 	u32 halt_wakeup; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:12 -06:00
										 |  |  | struct kvmppc_44x_tlbe { | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 tid; /* Only the low 8 bits are used. */ | 
					
						
							|  |  |  | 	u32 word0; | 
					
						
							|  |  |  | 	u32 word1; | 
					
						
							|  |  |  | 	u32 word2; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:57 -06:00
										 |  |  | enum kvm_exit_types { | 
					
						
							|  |  |  | 	MMIO_EXITS, | 
					
						
							|  |  |  | 	DCR_EXITS, | 
					
						
							|  |  |  | 	SIGNAL_EXITS, | 
					
						
							|  |  |  | 	ITLB_REAL_MISS_EXITS, | 
					
						
							|  |  |  | 	ITLB_VIRT_MISS_EXITS, | 
					
						
							|  |  |  | 	DTLB_REAL_MISS_EXITS, | 
					
						
							|  |  |  | 	DTLB_VIRT_MISS_EXITS, | 
					
						
							|  |  |  | 	SYSCALL_EXITS, | 
					
						
							|  |  |  | 	ISI_EXITS, | 
					
						
							|  |  |  | 	DSI_EXITS, | 
					
						
							|  |  |  | 	EMULATED_INST_EXITS, | 
					
						
							|  |  |  | 	EMULATED_MTMSRWE_EXITS, | 
					
						
							|  |  |  | 	EMULATED_WRTEE_EXITS, | 
					
						
							|  |  |  | 	EMULATED_MTSPR_EXITS, | 
					
						
							|  |  |  | 	EMULATED_MFSPR_EXITS, | 
					
						
							|  |  |  | 	EMULATED_MTMSR_EXITS, | 
					
						
							|  |  |  | 	EMULATED_MFMSR_EXITS, | 
					
						
							|  |  |  | 	EMULATED_TLBSX_EXITS, | 
					
						
							|  |  |  | 	EMULATED_TLBWE_EXITS, | 
					
						
							|  |  |  | 	EMULATED_RFI_EXITS, | 
					
						
							|  |  |  | 	DEC_EXITS, | 
					
						
							|  |  |  | 	EXT_INTR_EXITS, | 
					
						
							|  |  |  | 	HALT_WAKEUP, | 
					
						
							|  |  |  | 	USR_PR_INST, | 
					
						
							|  |  |  | 	FP_UNAVAIL, | 
					
						
							|  |  |  | 	DEBUG_EXITS, | 
					
						
							|  |  |  | 	TIMEINGUEST, | 
					
						
							|  |  |  | 	__NUMBER_OF_KVM_EXIT_TYPES | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* allow access to big endian 32bit upper/lower parts and 64bit var */ | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:58 -06:00
										 |  |  | struct kvmppc_exit_timing { | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:57 -06:00
										 |  |  | 	union { | 
					
						
							|  |  |  | 		u64 tv64; | 
					
						
							|  |  |  | 		struct { | 
					
						
							|  |  |  | 			u32 tbu, tbl; | 
					
						
							|  |  |  | 		} tv32; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | struct kvm_arch { | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct kvm_vcpu_arch { | 
					
						
							|  |  |  | 	u32 host_stack; | 
					
						
							|  |  |  | 	u32 host_pid; | 
					
						
							| 
									
										
										
										
											2008-07-25 13:54:49 -05:00
										 |  |  | 	u32 host_dbcr0; | 
					
						
							|  |  |  | 	u32 host_dbcr1; | 
					
						
							|  |  |  | 	u32 host_dbcr2; | 
					
						
							|  |  |  | 	u32 host_iac[4]; | 
					
						
							|  |  |  | 	u32 host_msr; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	u64 fpr[32]; | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong gpr[32]; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong pc; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 cr; | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong ctr; | 
					
						
							|  |  |  | 	ulong lr; | 
					
						
							|  |  |  | 	ulong xer; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong msr; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 mmucr; | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong sprg0; | 
					
						
							|  |  |  | 	ulong sprg1; | 
					
						
							|  |  |  | 	ulong sprg2; | 
					
						
							|  |  |  | 	ulong sprg3; | 
					
						
							|  |  |  | 	ulong sprg4; | 
					
						
							|  |  |  | 	ulong sprg5; | 
					
						
							|  |  |  | 	ulong sprg6; | 
					
						
							|  |  |  | 	ulong sprg7; | 
					
						
							|  |  |  | 	ulong srr0; | 
					
						
							|  |  |  | 	ulong srr1; | 
					
						
							|  |  |  | 	ulong csrr0; | 
					
						
							|  |  |  | 	ulong csrr1; | 
					
						
							|  |  |  | 	ulong dsrr0; | 
					
						
							|  |  |  | 	ulong dsrr1; | 
					
						
							|  |  |  | 	ulong dear; | 
					
						
							|  |  |  | 	ulong esr; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 dec; | 
					
						
							|  |  |  | 	u32 decar; | 
					
						
							|  |  |  | 	u32 tbl; | 
					
						
							|  |  |  | 	u32 tbu; | 
					
						
							|  |  |  | 	u32 tcr; | 
					
						
							|  |  |  | 	u32 tsr; | 
					
						
							|  |  |  | 	u32 ivor[16]; | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong ivpr; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 pir; | 
					
						
							| 
									
										
										
										
											2008-07-25 13:54:53 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	u32 shadow_pid; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 pid; | 
					
						
							| 
									
										
										
										
											2008-07-25 13:54:53 -05:00
										 |  |  | 	u32 swap_pid; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 pvr; | 
					
						
							|  |  |  | 	u32 ccr0; | 
					
						
							|  |  |  | 	u32 ccr1; | 
					
						
							|  |  |  | 	u32 dbcr0; | 
					
						
							|  |  |  | 	u32 dbcr1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:57 -06:00
										 |  |  | #ifdef CONFIG_KVM_EXIT_TIMING
 | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:58 -06:00
										 |  |  | 	struct kvmppc_exit_timing timing_exit; | 
					
						
							|  |  |  | 	struct kvmppc_exit_timing timing_last_enter; | 
					
						
							| 
									
										
										
										
											2008-12-02 15:51:57 -06:00
										 |  |  | 	u32 last_exit_type; | 
					
						
							|  |  |  | 	u32 timing_count_type[__NUMBER_OF_KVM_EXIT_TYPES]; | 
					
						
							|  |  |  | 	u64 timing_sum_duration[__NUMBER_OF_KVM_EXIT_TYPES]; | 
					
						
							|  |  |  | 	u64 timing_sum_quad_duration[__NUMBER_OF_KVM_EXIT_TYPES]; | 
					
						
							|  |  |  | 	u64 timing_min_duration[__NUMBER_OF_KVM_EXIT_TYPES]; | 
					
						
							|  |  |  | 	u64 timing_max_duration[__NUMBER_OF_KVM_EXIT_TYPES]; | 
					
						
							|  |  |  | 	u64 timing_last_exit; | 
					
						
							|  |  |  | 	struct dentry *debugfs_exit_timing; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	u32 last_inst; | 
					
						
							| 
									
										
										
										
											2008-11-05 09:36:19 -06:00
										 |  |  | 	ulong fault_dear; | 
					
						
							|  |  |  | 	ulong fault_esr; | 
					
						
							| 
									
										
										
										
											2008-04-16 23:28:09 -05:00
										 |  |  | 	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__ */
 |