 43e40f25d2
			
		
	
	
	43e40f25d2
	
	
	
		
			
			Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Michael Kerrisk <mtk.manpages@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Dave Jones <davej@redhat.com>
		
			
				
	
	
		
			269 lines
		
	
	
	
		
			6.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
	
		
			6.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __ASM_IA64_KVM_H
 | |
| #define __ASM_IA64_KVM_H
 | |
| 
 | |
| /*
 | |
|  * kvm structure definitions  for ia64
 | |
|  *
 | |
|  * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com>
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify it
 | |
|  * under the terms and conditions of the GNU General Public License,
 | |
|  * version 2, as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope 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, Inc., 59 Temple
 | |
|  * Place - Suite 330, Boston, MA 02111-1307 USA.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <linux/types.h>
 | |
| #include <linux/ioctl.h>
 | |
| 
 | |
| /* Select x86 specific features in <linux/kvm.h> */
 | |
| #define __KVM_HAVE_IOAPIC
 | |
| #define __KVM_HAVE_IRQ_LINE
 | |
| #define __KVM_HAVE_DEVICE_ASSIGNMENT
 | |
| 
 | |
| /* Architectural interrupt line count. */
 | |
| #define KVM_NR_INTERRUPTS 256
 | |
| 
 | |
| #define KVM_IOAPIC_NUM_PINS  48
 | |
| 
 | |
| struct kvm_ioapic_state {
 | |
| 	__u64 base_address;
 | |
| 	__u32 ioregsel;
 | |
| 	__u32 id;
 | |
| 	__u32 irr;
 | |
| 	__u32 pad;
 | |
| 	union {
 | |
| 		__u64 bits;
 | |
| 		struct {
 | |
| 			__u8 vector;
 | |
| 			__u8 delivery_mode:3;
 | |
| 			__u8 dest_mode:1;
 | |
| 			__u8 delivery_status:1;
 | |
| 			__u8 polarity:1;
 | |
| 			__u8 remote_irr:1;
 | |
| 			__u8 trig_mode:1;
 | |
| 			__u8 mask:1;
 | |
| 			__u8 reserve:7;
 | |
| 			__u8 reserved[4];
 | |
| 			__u8 dest_id;
 | |
| 		} fields;
 | |
| 	} redirtbl[KVM_IOAPIC_NUM_PINS];
 | |
| };
 | |
| 
 | |
| #define KVM_IRQCHIP_PIC_MASTER   0
 | |
| #define KVM_IRQCHIP_PIC_SLAVE    1
 | |
| #define KVM_IRQCHIP_IOAPIC       2
 | |
| #define KVM_NR_IRQCHIPS          3
 | |
| 
 | |
| #define KVM_CONTEXT_SIZE	8*1024
 | |
| 
 | |
| struct kvm_fpreg {
 | |
| 	union {
 | |
| 		unsigned long bits[2];
 | |
| 		long double __dummy;	/* force 16-byte alignment */
 | |
| 	} u;
 | |
| };
 | |
| 
 | |
| union context {
 | |
| 	/* 8K size */
 | |
| 	char	dummy[KVM_CONTEXT_SIZE];
 | |
| 	struct {
 | |
| 		unsigned long       psr;
 | |
| 		unsigned long       pr;
 | |
| 		unsigned long       caller_unat;
 | |
| 		unsigned long       pad;
 | |
| 		unsigned long       gr[32];
 | |
| 		unsigned long       ar[128];
 | |
| 		unsigned long       br[8];
 | |
| 		unsigned long       cr[128];
 | |
| 		unsigned long       rr[8];
 | |
| 		unsigned long       ibr[8];
 | |
| 		unsigned long       dbr[8];
 | |
| 		unsigned long       pkr[8];
 | |
| 		struct kvm_fpreg   fr[128];
 | |
| 	};
 | |
| };
 | |
| 
 | |
| struct thash_data {
 | |
| 	union {
 | |
| 		struct {
 | |
| 			unsigned long p    :  1; /* 0 */
 | |
| 			unsigned long rv1  :  1; /* 1 */
 | |
| 			unsigned long ma   :  3; /* 2-4 */
 | |
| 			unsigned long a    :  1; /* 5 */
 | |
| 			unsigned long d    :  1; /* 6 */
 | |
| 			unsigned long pl   :  2; /* 7-8 */
 | |
| 			unsigned long ar   :  3; /* 9-11 */
 | |
| 			unsigned long ppn  : 38; /* 12-49 */
 | |
| 			unsigned long rv2  :  2; /* 50-51 */
 | |
| 			unsigned long ed   :  1; /* 52 */
 | |
| 			unsigned long ig1  : 11; /* 53-63 */
 | |
| 		};
 | |
| 		struct {
 | |
| 			unsigned long __rv1 : 53;     /* 0-52 */
 | |
| 			unsigned long contiguous : 1; /*53 */
 | |
| 			unsigned long tc : 1;         /* 54 TR or TC */
 | |
| 			unsigned long cl : 1;
 | |
| 			/* 55 I side or D side cache line */
 | |
| 			unsigned long len  :  4;      /* 56-59 */
 | |
| 			unsigned long io  : 1;	/* 60 entry is for io or not */
 | |
| 			unsigned long nomap : 1;
 | |
| 			/* 61 entry cann't be inserted into machine TLB.*/
 | |
| 			unsigned long checked : 1;
 | |
| 			/* 62 for VTLB/VHPT sanity check */
 | |
| 			unsigned long invalid : 1;
 | |
| 			/* 63 invalid entry */
 | |
| 		};
 | |
| 		unsigned long page_flags;
 | |
| 	};                  /* same for VHPT and TLB */
 | |
| 
 | |
| 	union {
 | |
| 		struct {
 | |
| 			unsigned long rv3  :  2;
 | |
| 			unsigned long ps   :  6;
 | |
| 			unsigned long key  : 24;
 | |
| 			unsigned long rv4  : 32;
 | |
| 		};
 | |
| 		unsigned long itir;
 | |
| 	};
 | |
| 	union {
 | |
| 		struct {
 | |
| 			unsigned long ig2  :  12;
 | |
| 			unsigned long vpn  :  49;
 | |
| 			unsigned long vrn  :   3;
 | |
| 		};
 | |
| 		unsigned long ifa;
 | |
| 		unsigned long vadr;
 | |
| 		struct {
 | |
| 			unsigned long tag  :  63;
 | |
| 			unsigned long ti   :  1;
 | |
| 		};
 | |
| 		unsigned long etag;
 | |
| 	};
 | |
| 	union {
 | |
| 		struct thash_data *next;
 | |
| 		unsigned long rid;
 | |
| 		unsigned long gpaddr;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| #define	NITRS	8
 | |
| #define NDTRS	8
 | |
| 
 | |
| struct saved_vpd {
 | |
| 	unsigned long  vhpi;
 | |
| 	unsigned long  vgr[16];
 | |
| 	unsigned long  vbgr[16];
 | |
| 	unsigned long  vnat;
 | |
| 	unsigned long  vbnat;
 | |
| 	unsigned long  vcpuid[5];
 | |
| 	unsigned long  vpsr;
 | |
| 	unsigned long  vpr;
 | |
| 	union {
 | |
| 		unsigned long  vcr[128];
 | |
| 		struct {
 | |
| 			unsigned long dcr;
 | |
| 			unsigned long itm;
 | |
| 			unsigned long iva;
 | |
| 			unsigned long rsv1[5];
 | |
| 			unsigned long pta;
 | |
| 			unsigned long rsv2[7];
 | |
| 			unsigned long ipsr;
 | |
| 			unsigned long isr;
 | |
| 			unsigned long rsv3;
 | |
| 			unsigned long iip;
 | |
| 			unsigned long ifa;
 | |
| 			unsigned long itir;
 | |
| 			unsigned long iipa;
 | |
| 			unsigned long ifs;
 | |
| 			unsigned long iim;
 | |
| 			unsigned long iha;
 | |
| 			unsigned long rsv4[38];
 | |
| 			unsigned long lid;
 | |
| 			unsigned long ivr;
 | |
| 			unsigned long tpr;
 | |
| 			unsigned long eoi;
 | |
| 			unsigned long irr[4];
 | |
| 			unsigned long itv;
 | |
| 			unsigned long pmv;
 | |
| 			unsigned long cmcv;
 | |
| 			unsigned long rsv5[5];
 | |
| 			unsigned long lrr0;
 | |
| 			unsigned long lrr1;
 | |
| 			unsigned long rsv6[46];
 | |
| 		};
 | |
| 	};
 | |
| };
 | |
| 
 | |
| struct kvm_regs {
 | |
| 	struct saved_vpd vpd;
 | |
| 	/*Arch-regs*/
 | |
| 	int mp_state;
 | |
| 	unsigned long vmm_rr;
 | |
| 	/* TR and TC.  */
 | |
| 	struct thash_data itrs[NITRS];
 | |
| 	struct thash_data dtrs[NDTRS];
 | |
| 	/* Bit is set if there is a tr/tc for the region.  */
 | |
| 	unsigned char itr_regions;
 | |
| 	unsigned char dtr_regions;
 | |
| 	unsigned char tc_regions;
 | |
| 
 | |
| 	char irq_check;
 | |
| 	unsigned long saved_itc;
 | |
| 	unsigned long itc_check;
 | |
| 	unsigned long timer_check;
 | |
| 	unsigned long timer_pending;
 | |
| 	unsigned long last_itc;
 | |
| 
 | |
| 	unsigned long vrr[8];
 | |
| 	unsigned long ibr[8];
 | |
| 	unsigned long dbr[8];
 | |
| 	unsigned long insvc[4];		/* Interrupt in service.  */
 | |
| 	unsigned long xtp;
 | |
| 
 | |
| 	unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */
 | |
| 	unsigned long metaphysical_rr4;	/* from kvm_arch (so is pinned) */
 | |
| 	unsigned long metaphysical_saved_rr0; /* from kvm_arch          */
 | |
| 	unsigned long metaphysical_saved_rr4; /* from kvm_arch          */
 | |
| 	unsigned long fp_psr;       /*used for lazy float register */
 | |
| 	unsigned long saved_gp;
 | |
| 	/*for phycial  emulation */
 | |
| 
 | |
| 	union context saved_guest;
 | |
| 
 | |
| 	unsigned long reserved[64];	/* for future use */
 | |
| };
 | |
| 
 | |
| struct kvm_sregs {
 | |
| };
 | |
| 
 | |
| struct kvm_fpu {
 | |
| };
 | |
| 
 | |
| #define KVM_IA64_VCPU_STACK_SHIFT	16
 | |
| #define KVM_IA64_VCPU_STACK_SIZE	(1UL << KVM_IA64_VCPU_STACK_SHIFT)
 | |
| 
 | |
| struct kvm_ia64_vcpu_stack {
 | |
| 	unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
 | |
| };
 | |
| 
 | |
| struct kvm_debug_exit_arch {
 | |
| };
 | |
| 
 | |
| /* for KVM_SET_GUEST_DEBUG */
 | |
| struct kvm_guest_debug_arch {
 | |
| };
 | |
| 
 | |
| /* definition of registers in kvm_run */
 | |
| struct kvm_sync_regs {
 | |
| };
 | |
| 
 | |
| #endif
 |