]> err.no Git - linux-2.6/blobdiff - include/asm-s390/kvm_host.h
m68knommu: add ffs and __ffs plattform which support ISA A+ or ISA C
[linux-2.6] / include / asm-s390 / kvm_host.h
index 4fe19305888ac24ee9bda55635626ddf92f2d354..3234dd5b3511275521f8f22b3e4f808b432eb257 100644 (file)
@@ -62,7 +62,7 @@ struct sca_block {
 #define CPUSTAT_J          0x00000002
 #define CPUSTAT_P          0x00000001
 
-struct sie_block {
+struct kvm_s390_sie_block {
        atomic_t cpuflags;              /* 0x0000 */
        __u32   prefix;                 /* 0x0004 */
        __u8    reserved8[32];          /* 0x0008 */
@@ -94,7 +94,9 @@ struct sie_block {
        psw_t   gpsw;                   /* 0x0090 */
        __u64   gg14;                   /* 0x00a0 */
        __u64   gg15;                   /* 0x00a8 */
-       __u8    reservedb0[80];         /* 0x00b0 */
+       __u8    reservedb0[30];         /* 0x00b0 */
+       __u16   iprcc;                  /* 0x00ce */
+       __u8    reservedd0[48];         /* 0x00d0 */
        __u64   gcr[16];                /* 0x0100 */
        __u64   gbea;                   /* 0x0180 */
        __u8    reserved188[120];       /* 0x0188 */
@@ -102,6 +104,7 @@ struct sie_block {
 
 struct kvm_vcpu_stat {
        u32 exit_userspace;
+       u32 exit_null;
        u32 exit_external_request;
        u32 exit_external_interrupt;
        u32 exit_stop_request;
@@ -119,16 +122,32 @@ struct kvm_vcpu_stat {
        u32 deliver_restart_signal;
        u32 deliver_program_int;
        u32 exit_wait_state;
+       u32 instruction_stidp;
+       u32 instruction_spx;
+       u32 instruction_stpx;
+       u32 instruction_stap;
+       u32 instruction_storage_key;
+       u32 instruction_stsch;
+       u32 instruction_chsc;
+       u32 instruction_stsi;
+       u32 instruction_stfl;
+       u32 instruction_sigp_sense;
+       u32 instruction_sigp_emergency;
+       u32 instruction_sigp_stop;
+       u32 instruction_sigp_arch;
+       u32 instruction_sigp_prefix;
+       u32 instruction_sigp_restart;
+       u32 diagnose_44;
 };
 
-struct io_info {
+struct kvm_s390_io_info {
        __u16        subchannel_id;            /* 0x0b8 */
        __u16        subchannel_nr;            /* 0x0ba */
        __u32        io_int_parm;              /* 0x0bc */
        __u32        io_int_word;              /* 0x0c0 */
 };
 
-struct ext_info {
+struct kvm_s390_ext_info {
        __u32 ext_params;
        __u64 ext_params2;
 };
@@ -141,53 +160,63 @@ struct ext_info {
 #define PGM_SPECIFICATION        0x06
 #define PGM_DATA                 0x07
 
-struct pgm_info {
+struct kvm_s390_pgm_info {
        __u16 code;
 };
 
-struct prefix_info {
+struct kvm_s390_prefix_info {
        __u32 address;
 };
 
-struct interrupt_info {
+struct kvm_s390_interrupt_info {
        struct list_head list;
        u64     type;
        union {
-               struct io_info io;
-               struct ext_info ext;
-               struct pgm_info pgm;
-               struct prefix_info prefix;
+               struct kvm_s390_io_info io;
+               struct kvm_s390_ext_info ext;
+               struct kvm_s390_pgm_info pgm;
+               struct kvm_s390_prefix_info prefix;
        };
 };
 
-struct local_interrupt {
+/* for local_interrupt.action_flags */
+#define ACTION_STORE_ON_STOP 1
+#define ACTION_STOP_ON_STOP  2
+
+struct kvm_s390_local_interrupt {
        spinlock_t lock;
        struct list_head list;
        atomic_t active;
-       struct float_interrupt *float_int;
+       struct kvm_s390_float_interrupt *float_int;
        int timer_due; /* event indicator for waitqueue below */
        wait_queue_head_t wq;
+       atomic_t *cpuflags;
+       unsigned int action_bits;
 };
 
-struct float_interrupt {
+struct kvm_s390_float_interrupt {
        spinlock_t lock;
        struct list_head list;
        atomic_t active;
        int next_rr_cpu;
        unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)];
-       struct local_interrupt *local_int[64];
+       struct kvm_s390_local_interrupt *local_int[64];
 };
 
 
 struct kvm_vcpu_arch {
-       struct sie_block *sie_block;
+       struct kvm_s390_sie_block *sie_block;
        unsigned long     guest_gprs[16];
        s390_fp_regs      host_fpregs;
        unsigned int      host_acrs[NUM_ACRS];
        s390_fp_regs      guest_fpregs;
        unsigned int      guest_acrs[NUM_ACRS];
-       struct local_interrupt local_int;
+       struct kvm_s390_local_interrupt local_int;
        struct timer_list ckc_timer;
+       union  {
+               cpuid_t   cpu_id;
+               u64       stidp_data;
+       };
 };
 
 struct kvm_vm_stat {
@@ -199,8 +228,8 @@ struct kvm_arch{
        unsigned long guest_memsize;
        struct sca_block *sca;
        debug_info_t *dbf;
-       struct float_interrupt float_int;
+       struct kvm_s390_float_interrupt float_int;
 };
 
-extern int sie64a(struct sie_block *, __u64 *);
+extern int sie64a(struct kvm_s390_sie_block *, __u64 *);
 #endif