Logo Search packages:      
Sourcecode: linux version File versions  Download package

kvm.h

#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_DEVICE_ASSIGNMENT

/* Architectural interrupt line count. */
#define KVM_NR_INTERRUPTS 256

#define KVM_IOAPIC_NUM_PINS  48

00036 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

00067 struct kvm_fpreg {
      union {
            unsigned long bits[2];
            long double __dummy;    /* force 16-byte alignment */
      } u;
};

00074 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];
      };
};

00094 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

00160 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];
            };
      };
};

00205 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 */
};

00244 struct kvm_sregs {
};

00247 struct kvm_fpu {
};

#define KVM_IA64_VCPU_STACK_SHIFT   16
#define KVM_IA64_VCPU_STACK_SIZE    (1UL << KVM_IA64_VCPU_STACK_SHIFT)

00253 struct kvm_ia64_vcpu_stack {
      unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
};

00257 struct kvm_debug_exit_arch {
};

/* for KVM_SET_GUEST_DEBUG */
00261 struct kvm_guest_debug_arch {
};

#endif

Generated by  Doxygen 1.6.0   Back to index