#ifndef SELFTEST_KVM_SIE_H
#define SELFTEST_KVM_SIE_H
#include <linux/types.h>
struct kvm_s390_sie_block {
#define CPUSTAT_STOPPED 0x80000000
#define CPUSTAT_WAIT 0x10000000
#define CPUSTAT_ECALL_PEND 0x08000000
#define CPUSTAT_STOP_INT 0x04000000
#define CPUSTAT_IO_INT 0x02000000
#define CPUSTAT_EXT_INT 0x01000000
#define CPUSTAT_RUNNING 0x00800000
#define CPUSTAT_RETAINED 0x00400000
#define CPUSTAT_TIMING_SUB 0x00020000
#define CPUSTAT_SIE_SUB 0x00010000
#define CPUSTAT_RRF 0x00008000
#define CPUSTAT_SLSV 0x00004000
#define CPUSTAT_SLSR 0x00002000
#define CPUSTAT_ZARCH 0x00000800
#define CPUSTAT_MCDS 0x00000100
#define CPUSTAT_KSS 0x00000200
#define CPUSTAT_SM 0x00000080
#define CPUSTAT_IBS 0x00000040
#define CPUSTAT_GED2 0x00000010
#define CPUSTAT_G 0x00000008
#define CPUSTAT_GED 0x00000004
#define CPUSTAT_J 0x00000002
#define CPUSTAT_P 0x00000001
__u32 cpuflags;
__u32: 1;
__u32 prefix : 18;
__u32: 1;
__u32 ibc : 12;
__u8 reserved08[4];
#define PROG_IN_SIE BIT(0)
__u32 prog0c;
union {
__u8 reserved10[16];
struct {
__u64 pv_handle_cpu;
__u64 pv_handle_config;
};
};
#define PROG_BLOCK_SIE BIT(0)
#define PROG_REQUEST BIT(1)
__u32 prog20;
__u8 reserved24[4];
__u64 cputm;
__u64 ckc;
__u64 epoch;
__u32 svcc;
#define LCTL_CR0 0x8000
#define LCTL_CR6 0x0200
#define LCTL_CR9 0x0040
#define LCTL_CR10 0x0020
#define LCTL_CR11 0x0010
#define LCTL_CR14 0x0002
__u16 lctl;
__s16 icpua;
#define ICTL_OPEREXC 0x80000000
#define ICTL_PINT 0x20000000
#define ICTL_LPSW 0x00400000
#define ICTL_STCTL 0x00040000
#define ICTL_ISKE 0x00004000
#define ICTL_SSKE 0x00002000
#define ICTL_RRBE 0x00001000
#define ICTL_TPROT 0x00000200
__u32 ictl;
#define ECA_CEI 0x80000000
#define ECA_IB 0x40000000
#define ECA_SIGPI 0x10000000
#define ECA_MVPGI 0x01000000
#define ECA_AIV 0x00200000
#define ECA_VX 0x00020000
#define ECA_PROTEXCI 0x00002000
#define ECA_APIE 0x00000008
#define ECA_SII 0x00000001
__u32 eca;
#define ICPT_INST 0x04
#define ICPT_PROGI 0x08
#define ICPT_INSTPROGI 0x0C
#define ICPT_EXTREQ 0x10
#define ICPT_EXTINT 0x14
#define ICPT_IOREQ 0x18
#define ICPT_WAIT 0x1c
#define ICPT_VALIDITY 0x20
#define ICPT_STOP 0x28
#define ICPT_OPEREXC 0x2C
#define ICPT_PARTEXEC 0x38
#define ICPT_IOINST 0x40
#define ICPT_KSS 0x5c
#define ICPT_MCHKREQ 0x60
#define ICPT_INT_ENABLE 0x64
#define ICPT_PV_INSTR 0x68
#define ICPT_PV_NOTIFY 0x6c
#define ICPT_PV_PREF 0x70
__u8 icptcode;
__u8 icptstatus;
__u16 ihcpu;
__u8 reserved54;
#define IICTL_CODE_NONE 0x00
#define IICTL_CODE_MCHK 0x01
#define IICTL_CODE_EXT 0x02
#define IICTL_CODE_IO 0x03
#define IICTL_CODE_RESTART 0x04
#define IICTL_CODE_SPECIFICATION 0x10
#define IICTL_CODE_OPERAND 0x11
__u8 iictl;
__u16 ipa;
__u32 ipb;
__u32 scaoh;
#define FPF_BPBC 0x20
__u8 fpf;
#define ECB_GS 0x40
#define ECB_TE 0x10
#define ECB_SPECI 0x08
#define ECB_SRSI 0x04
#define ECB_HOSTPROTINT 0x02
#define ECB_PTF 0x01
__u8 ecb;
#define ECB2_CMMA 0x80
#define ECB2_IEP 0x20
#define ECB2_PFMFI 0x08
#define ECB2_ESCA 0x04
#define ECB2_ZPCI_LSI 0x02
__u8 ecb2;
#define ECB3_AISI 0x20
#define ECB3_AISII 0x10
#define ECB3_DEA 0x08
#define ECB3_AES 0x04
#define ECB3_RI 0x01
__u8 ecb3;
#define ESCA_SCAOL_MASK ~0x3fU
__u32 scaol;
__u8 sdf;
__u8 epdx;
__u8 cpnc;
__u8 reserved6b;
__u32 todpr;
#define GISA_FORMAT1 0x00000001
__u32 gd;
__u8 reserved74[12];
__u64 mso;
__u64 msl;
__u64 psw_mask;
__u64 psw_addr;
__u64 gg14;
__u64 gg15;
__u8 reservedb0[8];
#define HPID_KVM 0x4
#define HPID_VSIE 0x5
__u8 hpid;
__u8 reservedb9[7];
union {
struct {
__u32 eiparams;
__u16 extcpuaddr;
__u16 eic;
};
__u64 mcic;
} __packed;
__u32 reservedc8;
union {
struct {
__u16 pgmilc;
__u16 iprcc;
};
__u32 edc;
} __packed;
union {
struct {
__u32 dxc;
__u16 mcn;
__u8 perc;
__u8 peratmid;
};
__u64 faddr;
} __packed;
__u64 peraddr;
__u8 eai;
__u8 peraid;
__u8 oai;
__u8 armid;
__u8 reservede4[4];
union {
__u64 tecmc;
struct {
__u16 subchannel_id;
__u16 subchannel_nr;
__u32 io_int_parm;
__u32 io_int_word;
};
} __packed;
__u8 reservedf4[8];
#define CRYCB_FORMAT_MASK 0x00000003
#define CRYCB_FORMAT0 0x00000000
#define CRYCB_FORMAT1 0x00000001
#define CRYCB_FORMAT2 0x00000003
__u32 crycbd;
__u64 gcr[16];
union {
__u64 gbea;
__u64 sidad;
};
__u8 reserved188[8];
__u64 sdnxo;
__u8 reserved198[8];
__u32 fac;
__u8 reserved1a4[20];
__u64 cbrlo;
__u8 reserved1c0[8];
#define ECD_HOSTREGMGMT 0x20000000
#define ECD_MEF 0x08000000
#define ECD_ETOKENF 0x02000000
#define ECD_ECC 0x00200000
__u32 ecd;
__u8 reserved1cc[18];
__u64 pp;
__u8 reserved1e6[2];
__u64 itdba;
__u64 riccbd;
__u64 gvrd;
} __packed __aligned(512);
#endif