home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / kvm_host.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.8 KB  |  236 lines

  1. /*
  2.  * asm-s390/kvm_host.h - definition for kernel virtual machines on s390
  3.  *
  4.  * Copyright IBM Corp. 2008
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License (version 2 only)
  8.  * as published by the Free Software Foundation.
  9.  *
  10.  *    Author(s): Carsten Otte <cotte@de.ibm.com>
  11.  */
  12.  
  13.  
  14. #ifndef ASM_KVM_HOST_H
  15. #define ASM_KVM_HOST_H
  16. #include <linux/kvm_host.h>
  17. #include <asm/debug.h>
  18.  
  19. #define KVM_MAX_VCPUS 64
  20. #define KVM_MEMORY_SLOTS 32
  21. /* memory slots that does not exposed to userspace */
  22. #define KVM_PRIVATE_MEM_SLOTS 4
  23.  
  24. struct kvm_guest_debug {
  25. };
  26.  
  27. struct sca_entry {
  28.     atomic_t scn;
  29.     __u64    reserved;
  30.     __u64    sda;
  31.     __u64    reserved2[2];
  32. } __attribute__((packed));
  33.  
  34.  
  35. struct sca_block {
  36.     __u64    ipte_control;
  37.     __u64    reserved[5];
  38.     __u64    mcn;
  39.     __u64    reserved2;
  40.     struct sca_entry cpu[64];
  41. } __attribute__((packed));
  42.  
  43. #define KVM_PAGES_PER_HPAGE 256
  44.  
  45. #define CPUSTAT_HOST       0x80000000
  46. #define CPUSTAT_WAIT       0x10000000
  47. #define CPUSTAT_ECALL_PEND 0x08000000
  48. #define CPUSTAT_STOP_INT   0x04000000
  49. #define CPUSTAT_IO_INT     0x02000000
  50. #define CPUSTAT_EXT_INT    0x01000000
  51. #define CPUSTAT_RUNNING    0x00800000
  52. #define CPUSTAT_RETAINED   0x00400000
  53. #define CPUSTAT_TIMING_SUB 0x00020000
  54. #define CPUSTAT_SIE_SUB    0x00010000
  55. #define CPUSTAT_RRF        0x00008000
  56. #define CPUSTAT_SLSV       0x00004000
  57. #define CPUSTAT_SLSR       0x00002000
  58. #define CPUSTAT_ZARCH      0x00000800
  59. #define CPUSTAT_MCDS       0x00000100
  60. #define CPUSTAT_SM         0x00000080
  61. #define CPUSTAT_G          0x00000008
  62. #define CPUSTAT_J          0x00000002
  63. #define CPUSTAT_P          0x00000001
  64.  
  65. struct kvm_s390_sie_block {
  66.     atomic_t cpuflags;        /* 0x0000 */
  67.     __u32    prefix;            /* 0x0004 */
  68.     __u8    reserved8[32];        /* 0x0008 */
  69.     __u64    cputm;            /* 0x0028 */
  70.     __u64    ckc;            /* 0x0030 */
  71.     __u64    epoch;            /* 0x0038 */
  72.     __u8    reserved40[4];        /* 0x0040 */
  73. #define LCTL_CR0    0x8000
  74.     __u16   lctl;            /* 0x0044 */
  75.     __s16    icpua;            /* 0x0046 */
  76.     __u32    ictl;            /* 0x0048 */
  77.     __u32    eca;            /* 0x004c */
  78.     __u8    icptcode;        /* 0x0050 */
  79.     __u8    reserved51;        /* 0x0051 */
  80.     __u16    ihcpu;            /* 0x0052 */
  81.     __u8    reserved54[2];        /* 0x0054 */
  82.     __u16    ipa;            /* 0x0056 */
  83.     __u32    ipb;            /* 0x0058 */
  84.     __u32    scaoh;            /* 0x005c */
  85.     __u8    reserved60;        /* 0x0060 */
  86.     __u8    ecb;            /* 0x0061 */
  87.     __u8    reserved62[2];        /* 0x0062 */
  88.     __u32    scaol;            /* 0x0064 */
  89.     __u8    reserved68[4];        /* 0x0068 */
  90.     __u32    todpr;            /* 0x006c */
  91.     __u8    reserved70[16];        /* 0x0070 */
  92.     __u64    gmsor;            /* 0x0080 */
  93.     __u64    gmslm;            /* 0x0088 */
  94.     psw_t    gpsw;            /* 0x0090 */
  95.     __u64    gg14;            /* 0x00a0 */
  96.     __u64    gg15;            /* 0x00a8 */
  97.     __u8    reservedb0[30];        /* 0x00b0 */
  98.     __u16   iprcc;            /* 0x00ce */
  99.     __u8    reservedd0[48];        /* 0x00d0 */
  100.     __u64    gcr[16];        /* 0x0100 */
  101.     __u64    gbea;            /* 0x0180 */
  102.     __u8    reserved188[120];    /* 0x0188 */
  103. } __attribute__((packed));
  104.  
  105. struct kvm_vcpu_stat {
  106.     u32 exit_userspace;
  107.     u32 exit_null;
  108.     u32 exit_external_request;
  109.     u32 exit_external_interrupt;
  110.     u32 exit_stop_request;
  111.     u32 exit_validity;
  112.     u32 exit_instruction;
  113.     u32 instruction_lctl;
  114.     u32 instruction_lctlg;
  115.     u32 exit_program_interruption;
  116.     u32 exit_instr_and_program;
  117.     u32 deliver_emergency_signal;
  118.     u32 deliver_service_signal;
  119.     u32 deliver_virtio_interrupt;
  120.     u32 deliver_stop_signal;
  121.     u32 deliver_prefix_signal;
  122.     u32 deliver_restart_signal;
  123.     u32 deliver_program_int;
  124.     u32 exit_wait_state;
  125.     u32 instruction_stidp;
  126.     u32 instruction_spx;
  127.     u32 instruction_stpx;
  128.     u32 instruction_stap;
  129.     u32 instruction_storage_key;
  130.     u32 instruction_stsch;
  131.     u32 instruction_chsc;
  132.     u32 instruction_stsi;
  133.     u32 instruction_stfl;
  134.     u32 instruction_sigp_sense;
  135.     u32 instruction_sigp_emergency;
  136.     u32 instruction_sigp_stop;
  137.     u32 instruction_sigp_arch;
  138.     u32 instruction_sigp_prefix;
  139.     u32 instruction_sigp_restart;
  140.     u32 diagnose_44;
  141. };
  142.  
  143. struct kvm_s390_io_info {
  144.     __u16        subchannel_id;            /* 0x0b8 */
  145.     __u16        subchannel_nr;            /* 0x0ba */
  146.     __u32        io_int_parm;              /* 0x0bc */
  147.     __u32        io_int_word;              /* 0x0c0 */
  148. };
  149.  
  150. struct kvm_s390_ext_info {
  151.     __u32 ext_params;
  152.     __u64 ext_params2;
  153. };
  154.  
  155. #define PGM_OPERATION            0x01
  156. #define PGM_PRIVILEGED_OPERATION 0x02
  157. #define PGM_EXECUTE              0x03
  158. #define PGM_PROTECTION           0x04
  159. #define PGM_ADDRESSING           0x05
  160. #define PGM_SPECIFICATION        0x06
  161. #define PGM_DATA                 0x07
  162.  
  163. struct kvm_s390_pgm_info {
  164.     __u16 code;
  165. };
  166.  
  167. struct kvm_s390_prefix_info {
  168.     __u32 address;
  169. };
  170.  
  171. struct kvm_s390_interrupt_info {
  172.     struct list_head list;
  173.     u64    type;
  174.     union {
  175.         struct kvm_s390_io_info io;
  176.         struct kvm_s390_ext_info ext;
  177.         struct kvm_s390_pgm_info pgm;
  178.         struct kvm_s390_prefix_info prefix;
  179.     };
  180. };
  181.  
  182. /* for local_interrupt.action_flags */
  183. #define ACTION_STORE_ON_STOP 1
  184. #define ACTION_STOP_ON_STOP  2
  185.  
  186. struct kvm_s390_local_interrupt {
  187.     spinlock_t lock;
  188.     struct list_head list;
  189.     atomic_t active;
  190.     struct kvm_s390_float_interrupt *float_int;
  191.     int timer_due; /* event indicator for waitqueue below */
  192.     wait_queue_head_t wq;
  193.     atomic_t *cpuflags;
  194.     unsigned int action_bits;
  195. };
  196.  
  197. struct kvm_s390_float_interrupt {
  198.     spinlock_t lock;
  199.     struct list_head list;
  200.     atomic_t active;
  201.     int next_rr_cpu;
  202.     unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)];
  203.     struct kvm_s390_local_interrupt *local_int[64];
  204. };
  205.  
  206.  
  207. struct kvm_vcpu_arch {
  208.     struct kvm_s390_sie_block *sie_block;
  209.     unsigned long      guest_gprs[16];
  210.     s390_fp_regs      host_fpregs;
  211.     unsigned int      host_acrs[NUM_ACRS];
  212.     s390_fp_regs      guest_fpregs;
  213.     unsigned int      guest_acrs[NUM_ACRS];
  214.     struct kvm_s390_local_interrupt local_int;
  215.     struct timer_list ckc_timer;
  216.     union  {
  217.         cpuid_t      cpu_id;
  218.         u64      stidp_data;
  219.     };
  220. };
  221.  
  222. struct kvm_vm_stat {
  223.     u32 remote_tlb_flush;
  224. };
  225.  
  226. struct kvm_arch{
  227.     unsigned long guest_origin;
  228.     unsigned long guest_memsize;
  229.     struct sca_block *sca;
  230.     debug_info_t *dbf;
  231.     struct kvm_s390_float_interrupt float_int;
  232. };
  233.  
  234. extern int sie64a(struct kvm_s390_sie_block *, unsigned long *);
  235. #endif
  236.