diff options
Diffstat (limited to 'arch/ia64/include/uapi/asm/kvm.h')
| -rw-r--r-- | arch/ia64/include/uapi/asm/kvm.h | 268 | 
1 files changed, 268 insertions, 0 deletions
diff --git a/arch/ia64/include/uapi/asm/kvm.h b/arch/ia64/include/uapi/asm/kvm.h new file mode 100644 index 00000000000..99503c28440 --- /dev/null +++ b/arch/ia64/include/uapi/asm/kvm.h @@ -0,0 +1,268 @@ +#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 + +/* 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  | 
