]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/s390/include/asm/kvm_host.h
KVM: s390: Introduce new structures
[karo-tx-linux.git] / arch / s390 / include / asm / kvm_host.h
index efaac2c3bb77a028a748de19820cd40ee528c0a0..923b13df43a745d95ccc714955abc3172b1cacaa 100644 (file)
@@ -25,7 +25,9 @@
 #include <asm/fpu/api.h>
 #include <asm/isc.h>
 
-#define KVM_MAX_VCPUS 64
+#define KVM_S390_BSCA_CPU_SLOTS 64
+#define KVM_S390_ESCA_CPU_SLOTS 248
+#define KVM_MAX_VCPUS KVM_S390_BSCA_CPU_SLOTS
 #define KVM_USER_MEM_SLOTS 32
 
 /*
 #define SIGP_CTRL_C            0x80
 #define SIGP_CTRL_SCN_MASK     0x3f
 
-struct sca_entry {
+union bsca_sigp_ctrl {
+       __u8 value;
+       struct {
+               __u8 c : 1;
+               __u8 r : 1;
+               __u8 scn : 6;
+       };
+} __packed;
+
+union esca_sigp_ctrl {
+       __u16 value;
+       struct {
+               __u8 c : 1;
+               __u8 reserved: 7;
+               __u8 scn;
+       };
+} __packed;
+
+struct esca_entry {
+       union esca_sigp_ctrl sigp_ctrl;
+       __u16   reserved1[3];
+       __u64   sda;
+       __u64   reserved2[6];
+} __packed;
+
+struct bsca_entry {
        __u8    reserved0;
-       __u8    sigp_ctrl;
+       union bsca_sigp_ctrl    sigp_ctrl;
        __u16   reserved[3];
        __u64   sda;
        __u64   reserved2[2];
@@ -57,14 +84,22 @@ union ipte_control {
        };
 };
 
-struct sca_block {
+struct bsca_block {
        union ipte_control ipte_control;
        __u64   reserved[5];
        __u64   mcn;
        __u64   reserved2;
-       struct sca_entry cpu[64];
+       struct bsca_entry cpu[KVM_S390_BSCA_CPU_SLOTS];
 } __attribute__((packed));
 
+struct esca_block {
+       union ipte_control ipte_control;
+       __u64   reserved1[7];
+       __u64   mcn[4];
+       __u64   reserved2[20];
+       struct esca_entry cpu[KVM_S390_ESCA_CPU_SLOTS];
+} __packed;
+
 #define CPUSTAT_STOPPED    0x80000000
 #define CPUSTAT_WAIT       0x10000000
 #define CPUSTAT_ECALL_PEND 0x08000000
@@ -585,7 +620,7 @@ struct kvm_s390_crypto_cb {
 };
 
 struct kvm_arch{
-       struct sca_block *sca;
+       struct bsca_block *sca;
        debug_info_t *dbf;
        struct kvm_s390_float_interrupt float_int;
        struct kvm_device *flic;