linux/arch/ia64/include/uapi/asm/kvm.h
<<
>>
Prefs
   1#ifndef __ASM_IA64_KVM_H
   2#define __ASM_IA64_KVM_H
   3
   4/*
   5 * kvm structure definitions  for ia64
   6 *
   7 * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com>
   8 *
   9 * This program is free software; you can redistribute it and/or modify it
  10 * under the terms and conditions of the GNU General Public License,
  11 * version 2, as published by the Free Software Foundation.
  12 *
  13 * This program is distributed in the hope it will be useful, but WITHOUT
  14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  16 * more details.
  17 *
  18 * You should have received a copy of the GNU General Public License along with
  19 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  20 * Place - Suite 330, Boston, MA 02111-1307 USA.
  21 *
  22 */
  23
  24#include <linux/types.h>
  25#include <linux/ioctl.h>
  26
  27/* Select x86 specific features in <linux/kvm.h> */
  28#define __KVM_HAVE_IOAPIC
  29#define __KVM_HAVE_IRQ_LINE
  30#define __KVM_HAVE_DEVICE_ASSIGNMENT
  31
  32/* Architectural interrupt line count. */
  33#define KVM_NR_INTERRUPTS 256
  34
  35#define KVM_IOAPIC_NUM_PINS  48
  36
  37struct kvm_ioapic_state {
  38        __u64 base_address;
  39        __u32 ioregsel;
  40        __u32 id;
  41        __u32 irr;
  42        __u32 pad;
  43        union {
  44                __u64 bits;
  45                struct {
  46                        __u8 vector;
  47                        __u8 delivery_mode:3;
  48                        __u8 dest_mode:1;
  49                        __u8 delivery_status:1;
  50                        __u8 polarity:1;
  51                        __u8 remote_irr:1;
  52                        __u8 trig_mode:1;
  53                        __u8 mask:1;
  54                        __u8 reserve:7;
  55                        __u8 reserved[4];
  56                        __u8 dest_id;
  57                } fields;
  58        } redirtbl[KVM_IOAPIC_NUM_PINS];
  59};
  60
  61#define KVM_IRQCHIP_PIC_MASTER   0
  62#define KVM_IRQCHIP_PIC_SLAVE    1
  63#define KVM_IRQCHIP_IOAPIC       2
  64#define KVM_NR_IRQCHIPS          3
  65
  66#define KVM_CONTEXT_SIZE        8*1024
  67
  68struct kvm_fpreg {
  69        union {
  70                unsigned long bits[2];
  71                long double __dummy;    /* force 16-byte alignment */
  72        } u;
  73};
  74
  75union context {
  76        /* 8K size */
  77        char    dummy[KVM_CONTEXT_SIZE];
  78        struct {
  79                unsigned long       psr;
  80                unsigned long       pr;
  81                unsigned long       caller_unat;
  82                unsigned long       pad;
  83                unsigned long       gr[32];
  84                unsigned long       ar[128];
  85                unsigned long       br[8];
  86                unsigned long       cr[128];
  87                unsigned long       rr[8];
  88                unsigned long       ibr[8];
  89                unsigned long       dbr[8];
  90                unsigned long       pkr[8];
  91                struct kvm_fpreg   fr[128];
  92        };
  93};
  94
  95struct thash_data {
  96        union {
  97                struct {
  98                        unsigned long p    :  1; /* 0 */
  99                        unsigned long rv1  :  1; /* 1 */
 100                        unsigned long ma   :  3; /* 2-4 */
 101                        unsigned long a    :  1; /* 5 */
 102                        unsigned long d    :  1; /* 6 */
 103                        unsigned long pl   :  2; /* 7-8 */
 104                        unsigned long ar   :  3; /* 9-11 */
 105                        unsigned long ppn  : 38; /* 12-49 */
 106                        unsigned long rv2  :  2; /* 50-51 */
 107                        unsigned long ed   :  1; /* 52 */
 108                        unsigned long ig1  : 11; /* 53-63 */
 109                };
 110                struct {
 111                        unsigned long __rv1 : 53;     /* 0-52 */
 112                        unsigned long contiguous : 1; /*53 */
 113                        unsigned long tc : 1;         /* 54 TR or TC */
 114                        unsigned long cl : 1;
 115                        /* 55 I side or D side cache line */
 116                        unsigned long len  :  4;      /* 56-59 */
 117                        unsigned long io  : 1;  /* 60 entry is for io or not */
 118                        unsigned long nomap : 1;
 119                        /* 61 entry cann't be inserted into machine TLB.*/
 120                        unsigned long checked : 1;
 121                        /* 62 for VTLB/VHPT sanity check */
 122                        unsigned long invalid : 1;
 123                        /* 63 invalid entry */
 124                };
 125                unsigned long page_flags;
 126        };                  /* same for VHPT and TLB */
 127
 128        union {
 129                struct {
 130                        unsigned long rv3  :  2;
 131                        unsigned long ps   :  6;
 132                        unsigned long key  : 24;
 133                        unsigned long rv4  : 32;
 134                };
 135                unsigned long itir;
 136        };
 137        union {
 138                struct {
 139                        unsigned long ig2  :  12;
 140                        unsigned long vpn  :  49;
 141                        unsigned long vrn  :   3;
 142                };
 143                unsigned long ifa;
 144                unsigned long vadr;
 145                struct {
 146                        unsigned long tag  :  63;
 147                        unsigned long ti   :  1;
 148                };
 149                unsigned long etag;
 150        };
 151        union {
 152                struct thash_data *next;
 153                unsigned long rid;
 154                unsigned long gpaddr;
 155        };
 156};
 157
 158#define NITRS   8
 159#define NDTRS   8
 160
 161struct saved_vpd {
 162        unsigned long  vhpi;
 163        unsigned long  vgr[16];
 164        unsigned long  vbgr[16];
 165        unsigned long  vnat;
 166        unsigned long  vbnat;
 167        unsigned long  vcpuid[5];
 168        unsigned long  vpsr;
 169        unsigned long  vpr;
 170        union {
 171                unsigned long  vcr[128];
 172                struct {
 173                        unsigned long dcr;
 174                        unsigned long itm;
 175                        unsigned long iva;
 176                        unsigned long rsv1[5];
 177                        unsigned long pta;
 178                        unsigned long rsv2[7];
 179                        unsigned long ipsr;
 180                        unsigned long isr;
 181                        unsigned long rsv3;
 182                        unsigned long iip;
 183                        unsigned long ifa;
 184                        unsigned long itir;
 185                        unsigned long iipa;
 186                        unsigned long ifs;
 187                        unsigned long iim;
 188                        unsigned long iha;
 189                        unsigned long rsv4[38];
 190                        unsigned long lid;
 191                        unsigned long ivr;
 192                        unsigned long tpr;
 193                        unsigned long eoi;
 194                        unsigned long irr[4];
 195                        unsigned long itv;
 196                        unsigned long pmv;
 197                        unsigned long cmcv;
 198                        unsigned long rsv5[5];
 199                        unsigned long lrr0;
 200                        unsigned long lrr1;
 201                        unsigned long rsv6[46];
 202                };
 203        };
 204};
 205
 206struct kvm_regs {
 207        struct saved_vpd vpd;
 208        /*Arch-regs*/
 209        int mp_state;
 210        unsigned long vmm_rr;
 211        /* TR and TC.  */
 212        struct thash_data itrs[NITRS];
 213        struct thash_data dtrs[NDTRS];
 214        /* Bit is set if there is a tr/tc for the region.  */
 215        unsigned char itr_regions;
 216        unsigned char dtr_regions;
 217        unsigned char tc_regions;
 218
 219        char irq_check;
 220        unsigned long saved_itc;
 221        unsigned long itc_check;
 222        unsigned long timer_check;
 223        unsigned long timer_pending;
 224        unsigned long last_itc;
 225
 226        unsigned long vrr[8];
 227        unsigned long ibr[8];
 228        unsigned long dbr[8];
 229        unsigned long insvc[4];         /* Interrupt in service.  */
 230        unsigned long xtp;
 231
 232        unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */
 233        unsigned long metaphysical_rr4; /* from kvm_arch (so is pinned) */
 234        unsigned long metaphysical_saved_rr0; /* from kvm_arch          */
 235        unsigned long metaphysical_saved_rr4; /* from kvm_arch          */
 236        unsigned long fp_psr;       /*used for lazy float register */
 237        unsigned long saved_gp;
 238        /*for phycial  emulation */
 239
 240        union context saved_guest;
 241
 242        unsigned long reserved[64];     /* for future use */
 243};
 244
 245struct kvm_sregs {
 246};
 247
 248struct kvm_fpu {
 249};
 250
 251#define KVM_IA64_VCPU_STACK_SHIFT       16
 252#define KVM_IA64_VCPU_STACK_SIZE        (1UL << KVM_IA64_VCPU_STACK_SHIFT)
 253
 254struct kvm_ia64_vcpu_stack {
 255        unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
 256};
 257
 258struct kvm_debug_exit_arch {
 259};
 260
 261/* for KVM_SET_GUEST_DEBUG */
 262struct kvm_guest_debug_arch {
 263};
 264
 265/* definition of registers in kvm_run */
 266struct kvm_sync_regs {
 267};
 268
 269#endif
 270