| Viewing file:  kvm.h (6.14 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
#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
 
 |