Path: blob/master/tools/arch/s390/include/uapi/asm/kvm.h
29274 views
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */1#ifndef __LINUX_KVM_S390_H2#define __LINUX_KVM_S390_H3/*4* KVM s390 specific structures and definitions5*6* Copyright IBM Corp. 2008, 20187*8* Author(s): Carsten Otte <[email protected]>9* Christian Borntraeger <[email protected]>10*/11#include <linux/types.h>1213#define __KVM_S3901415struct kvm_s390_skeys {16__u64 start_gfn;17__u64 count;18__u64 skeydata_addr;19__u32 flags;20__u32 reserved[9];21};2223#define KVM_S390_CMMA_PEEK (1 << 0)2425/**26* kvm_s390_cmma_log - Used for CMMA migration.27*28* Used both for input and output.29*30* @start_gfn: Guest page number to start from.31* @count: Size of the result buffer.32* @flags: Control operation mode via KVM_S390_CMMA_* flags33* @remaining: Used with KVM_S390_GET_CMMA_BITS. Indicates how many dirty34* pages are still remaining.35* @mask: Used with KVM_S390_SET_CMMA_BITS. Bitmap of bits to actually set36* in the PGSTE.37* @values: Pointer to the values buffer.38*39* Used in KVM_S390_{G,S}ET_CMMA_BITS ioctls.40*/41struct kvm_s390_cmma_log {42__u64 start_gfn;43__u32 count;44__u32 flags;45union {46__u64 remaining;47__u64 mask;48};49__u64 values;50};5152#define KVM_S390_RESET_POR 153#define KVM_S390_RESET_CLEAR 254#define KVM_S390_RESET_SUBSYSTEM 455#define KVM_S390_RESET_CPU_INIT 856#define KVM_S390_RESET_IPL 165758/* for KVM_S390_MEM_OP */59struct kvm_s390_mem_op {60/* in */61__u64 gaddr; /* the guest address */62__u64 flags; /* flags */63__u32 size; /* amount of bytes */64__u32 op; /* type of operation */65__u64 buf; /* buffer in userspace */66union {67struct {68__u8 ar; /* the access register number */69__u8 key; /* access key, ignored if flag unset */70__u8 pad1[6]; /* ignored */71__u64 old_addr; /* ignored if cmpxchg flag unset */72};73__u32 sida_offset; /* offset into the sida */74__u8 reserved[32]; /* ignored */75};76};77/* types for kvm_s390_mem_op->op */78#define KVM_S390_MEMOP_LOGICAL_READ 079#define KVM_S390_MEMOP_LOGICAL_WRITE 180#define KVM_S390_MEMOP_SIDA_READ 281#define KVM_S390_MEMOP_SIDA_WRITE 382#define KVM_S390_MEMOP_ABSOLUTE_READ 483#define KVM_S390_MEMOP_ABSOLUTE_WRITE 584#define KVM_S390_MEMOP_ABSOLUTE_CMPXCHG 68586/* flags for kvm_s390_mem_op->flags */87#define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0)88#define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1)89#define KVM_S390_MEMOP_F_SKEY_PROTECTION (1ULL << 2)9091/* flags specifying extension support via KVM_CAP_S390_MEM_OP_EXTENSION */92#define KVM_S390_MEMOP_EXTENSION_CAP_BASE (1 << 0)93#define KVM_S390_MEMOP_EXTENSION_CAP_CMPXCHG (1 << 1)9495struct kvm_s390_psw {96__u64 mask;97__u64 addr;98};99100/* valid values for type in kvm_s390_interrupt */101#define KVM_S390_SIGP_STOP 0xfffe0000u102#define KVM_S390_PROGRAM_INT 0xfffe0001u103#define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u104#define KVM_S390_RESTART 0xfffe0003u105#define KVM_S390_INT_PFAULT_INIT 0xfffe0004u106#define KVM_S390_INT_PFAULT_DONE 0xfffe0005u107#define KVM_S390_MCHK 0xfffe1000u108#define KVM_S390_INT_CLOCK_COMP 0xffff1004u109#define KVM_S390_INT_CPU_TIMER 0xffff1005u110#define KVM_S390_INT_VIRTIO 0xffff2603u111#define KVM_S390_INT_SERVICE 0xffff2401u112#define KVM_S390_INT_EMERGENCY 0xffff1201u113#define KVM_S390_INT_EXTERNAL_CALL 0xffff1202u114/* Anything below 0xfffe0000u is taken by INT_IO */115#define KVM_S390_INT_IO(ai,cssid,ssid,schid) \116(((schid)) | \117((ssid) << 16) | \118((cssid) << 18) | \119((ai) << 26))120#define KVM_S390_INT_IO_MIN 0x00000000u121#define KVM_S390_INT_IO_MAX 0xfffdffffu122#define KVM_S390_INT_IO_AI_MASK 0x04000000u123124125struct kvm_s390_interrupt {126__u32 type;127__u32 parm;128__u64 parm64;129};130131struct kvm_s390_io_info {132__u16 subchannel_id;133__u16 subchannel_nr;134__u32 io_int_parm;135__u32 io_int_word;136};137138struct kvm_s390_ext_info {139__u32 ext_params;140__u32 pad;141__u64 ext_params2;142};143144struct kvm_s390_pgm_info {145__u64 trans_exc_code;146__u64 mon_code;147__u64 per_address;148__u32 data_exc_code;149__u16 code;150__u16 mon_class_nr;151__u8 per_code;152__u8 per_atmid;153__u8 exc_access_id;154__u8 per_access_id;155__u8 op_access_id;156#define KVM_S390_PGM_FLAGS_ILC_VALID 0x01157#define KVM_S390_PGM_FLAGS_ILC_0 0x02158#define KVM_S390_PGM_FLAGS_ILC_1 0x04159#define KVM_S390_PGM_FLAGS_ILC_MASK 0x06160#define KVM_S390_PGM_FLAGS_NO_REWIND 0x08161__u8 flags;162__u8 pad[2];163};164165struct kvm_s390_prefix_info {166__u32 address;167};168169struct kvm_s390_extcall_info {170__u16 code;171};172173struct kvm_s390_emerg_info {174__u16 code;175};176177#define KVM_S390_STOP_FLAG_STORE_STATUS 0x01178struct kvm_s390_stop_info {179__u32 flags;180};181182struct kvm_s390_mchk_info {183__u64 cr14;184__u64 mcic;185__u64 failing_storage_address;186__u32 ext_damage_code;187__u32 pad;188__u8 fixed_logout[16];189};190191struct kvm_s390_irq {192__u64 type;193union {194struct kvm_s390_io_info io;195struct kvm_s390_ext_info ext;196struct kvm_s390_pgm_info pgm;197struct kvm_s390_emerg_info emerg;198struct kvm_s390_extcall_info extcall;199struct kvm_s390_prefix_info prefix;200struct kvm_s390_stop_info stop;201struct kvm_s390_mchk_info mchk;202char reserved[64];203} u;204};205206struct kvm_s390_irq_state {207__u64 buf;208__u32 flags; /* will stay unused for compatibility reasons */209__u32 len;210__u32 reserved[4]; /* will stay unused for compatibility reasons */211};212213struct kvm_s390_ucas_mapping {214__u64 user_addr;215__u64 vcpu_addr;216__u64 length;217};218219struct kvm_s390_pv_sec_parm {220__u64 origin;221__u64 length;222};223224struct kvm_s390_pv_unp {225__u64 addr;226__u64 size;227__u64 tweak;228};229230enum pv_cmd_dmp_id {231KVM_PV_DUMP_INIT,232KVM_PV_DUMP_CONFIG_STOR_STATE,233KVM_PV_DUMP_COMPLETE,234KVM_PV_DUMP_CPU,235};236237struct kvm_s390_pv_dmp {238__u64 subcmd;239__u64 buff_addr;240__u64 buff_len;241__u64 gaddr; /* For dump storage state */242__u64 reserved[4];243};244245enum pv_cmd_info_id {246KVM_PV_INFO_VM,247KVM_PV_INFO_DUMP,248};249250struct kvm_s390_pv_info_dump {251__u64 dump_cpu_buffer_len;252__u64 dump_config_mem_buffer_per_1m;253__u64 dump_config_finalize_len;254};255256struct kvm_s390_pv_info_vm {257__u64 inst_calls_list[4];258__u64 max_cpus;259__u64 max_guests;260__u64 max_guest_addr;261__u64 feature_indication;262};263264struct kvm_s390_pv_info_header {265__u32 id;266__u32 len_max;267__u32 len_written;268__u32 reserved;269};270271struct kvm_s390_pv_info {272struct kvm_s390_pv_info_header header;273union {274struct kvm_s390_pv_info_dump dump;275struct kvm_s390_pv_info_vm vm;276};277};278279enum pv_cmd_id {280KVM_PV_ENABLE,281KVM_PV_DISABLE,282KVM_PV_SET_SEC_PARMS,283KVM_PV_UNPACK,284KVM_PV_VERIFY,285KVM_PV_PREP_RESET,286KVM_PV_UNSHARE_ALL,287KVM_PV_INFO,288KVM_PV_DUMP,289KVM_PV_ASYNC_CLEANUP_PREPARE,290KVM_PV_ASYNC_CLEANUP_PERFORM,291};292293struct kvm_pv_cmd {294__u32 cmd; /* Command to be executed */295__u16 rc; /* Ultravisor return code */296__u16 rrc; /* Ultravisor return reason code */297__u64 data; /* Data or address */298__u32 flags; /* flags for future extensions. Must be 0 for now */299__u32 reserved[3];300};301302struct kvm_s390_zpci_op {303/* in */304__u32 fh; /* target device */305__u8 op; /* operation to perform */306__u8 pad[3];307union {308/* for KVM_S390_ZPCIOP_REG_AEN */309struct {310__u64 ibv; /* Guest addr of interrupt bit vector */311__u64 sb; /* Guest addr of summary bit */312__u32 flags;313__u32 noi; /* Number of interrupts */314__u8 isc; /* Guest interrupt subclass */315__u8 sbo; /* Offset of guest summary bit vector */316__u16 pad;317} reg_aen;318__u64 reserved[8];319} u;320};321322/* types for kvm_s390_zpci_op->op */323#define KVM_S390_ZPCIOP_REG_AEN 0324#define KVM_S390_ZPCIOP_DEREG_AEN 1325326/* flags for kvm_s390_zpci_op->u.reg_aen.flags */327#define KVM_S390_ZPCIOP_REGAEN_HOST (1 << 0)328329/* Device control API: s390-specific devices */330#define KVM_DEV_FLIC_GET_ALL_IRQS 1331#define KVM_DEV_FLIC_ENQUEUE 2332#define KVM_DEV_FLIC_CLEAR_IRQS 3333#define KVM_DEV_FLIC_APF_ENABLE 4334#define KVM_DEV_FLIC_APF_DISABLE_WAIT 5335#define KVM_DEV_FLIC_ADAPTER_REGISTER 6336#define KVM_DEV_FLIC_ADAPTER_MODIFY 7337#define KVM_DEV_FLIC_CLEAR_IO_IRQ 8338#define KVM_DEV_FLIC_AISM 9339#define KVM_DEV_FLIC_AIRQ_INJECT 10340#define KVM_DEV_FLIC_AISM_ALL 11341/*342* We can have up to 4*64k pending subchannels + 8 adapter interrupts,343* as well as up to ASYNC_PF_PER_VCPU*KVM_MAX_VCPUS pfault done interrupts.344* There are also sclp and machine checks. This gives us345* sizeof(kvm_s390_irq)*(4*65536+8+64*64+1+1) = 72 * 266250 = 19170000346* Lets round up to 8192 pages.347*/348#define KVM_S390_MAX_FLOAT_IRQS 266250349#define KVM_S390_FLIC_MAX_BUFFER 0x2000000350351struct kvm_s390_io_adapter {352__u32 id;353__u8 isc;354__u8 maskable;355__u8 swap;356__u8 flags;357};358359#define KVM_S390_ADAPTER_SUPPRESSIBLE 0x01360361struct kvm_s390_ais_req {362__u8 isc;363__u16 mode;364};365366struct kvm_s390_ais_all {367__u8 simm;368__u8 nimm;369};370371#define KVM_S390_IO_ADAPTER_MASK 1372#define KVM_S390_IO_ADAPTER_MAP 2373#define KVM_S390_IO_ADAPTER_UNMAP 3374375struct kvm_s390_io_adapter_req {376__u32 id;377__u8 type;378__u8 mask;379__u16 pad0;380__u64 addr;381};382383/* kvm attr_group on vm fd */384#define KVM_S390_VM_MEM_CTRL 0385#define KVM_S390_VM_TOD 1386#define KVM_S390_VM_CRYPTO 2387#define KVM_S390_VM_CPU_MODEL 3388#define KVM_S390_VM_MIGRATION 4389#define KVM_S390_VM_CPU_TOPOLOGY 5390391/* kvm attributes for mem_ctrl */392#define KVM_S390_VM_MEM_ENABLE_CMMA 0393#define KVM_S390_VM_MEM_CLR_CMMA 1394#define KVM_S390_VM_MEM_LIMIT_SIZE 2395396#define KVM_S390_NO_MEM_LIMIT U64_MAX397398/* kvm attributes for KVM_S390_VM_TOD */399#define KVM_S390_VM_TOD_LOW 0400#define KVM_S390_VM_TOD_HIGH 1401#define KVM_S390_VM_TOD_EXT 2402403struct kvm_s390_vm_tod_clock {404__u8 epoch_idx;405__u64 tod;406};407408/* kvm attributes for KVM_S390_VM_CPU_MODEL */409/* processor related attributes are r/w */410#define KVM_S390_VM_CPU_PROCESSOR 0411struct kvm_s390_vm_cpu_processor {412__u64 cpuid;413__u16 ibc;414__u8 pad[6];415__u64 fac_list[256];416};417418/* machine related attributes are r/o */419#define KVM_S390_VM_CPU_MACHINE 1420struct kvm_s390_vm_cpu_machine {421__u64 cpuid;422__u32 ibc;423__u8 pad[4];424__u64 fac_mask[256];425__u64 fac_list[256];426};427428#define KVM_S390_VM_CPU_PROCESSOR_FEAT 2429#define KVM_S390_VM_CPU_MACHINE_FEAT 3430431#define KVM_S390_VM_CPU_FEAT_NR_BITS 1024432#define KVM_S390_VM_CPU_FEAT_ESOP 0433#define KVM_S390_VM_CPU_FEAT_SIEF2 1434#define KVM_S390_VM_CPU_FEAT_64BSCAO 2435#define KVM_S390_VM_CPU_FEAT_SIIF 3436#define KVM_S390_VM_CPU_FEAT_GPERE 4437#define KVM_S390_VM_CPU_FEAT_GSLS 5438#define KVM_S390_VM_CPU_FEAT_IB 6439#define KVM_S390_VM_CPU_FEAT_CEI 7440#define KVM_S390_VM_CPU_FEAT_IBS 8441#define KVM_S390_VM_CPU_FEAT_SKEY 9442#define KVM_S390_VM_CPU_FEAT_CMMA 10443#define KVM_S390_VM_CPU_FEAT_PFMFI 11444#define KVM_S390_VM_CPU_FEAT_SIGPIF 12445#define KVM_S390_VM_CPU_FEAT_KSS 13446struct kvm_s390_vm_cpu_feat {447__u64 feat[16];448};449450#define KVM_S390_VM_CPU_PROCESSOR_SUBFUNC 4451#define KVM_S390_VM_CPU_MACHINE_SUBFUNC 5452/* for "test bit" instructions MSB 0 bit ordering, for "query" raw blocks */453struct kvm_s390_vm_cpu_subfunc {454__u8 plo[32]; /* always */455__u8 ptff[16]; /* with TOD-clock steering */456__u8 kmac[16]; /* with MSA */457__u8 kmc[16]; /* with MSA */458__u8 km[16]; /* with MSA */459__u8 kimd[16]; /* with MSA */460__u8 klmd[16]; /* with MSA */461__u8 pckmo[16]; /* with MSA3 */462__u8 kmctr[16]; /* with MSA4 */463__u8 kmf[16]; /* with MSA4 */464__u8 kmo[16]; /* with MSA4 */465__u8 pcc[16]; /* with MSA4 */466__u8 ppno[16]; /* with MSA5 */467__u8 kma[16]; /* with MSA8 */468__u8 kdsa[16]; /* with MSA9 */469__u8 sortl[32]; /* with STFLE.150 */470__u8 dfltcc[32]; /* with STFLE.151 */471__u8 pfcr[16]; /* with STFLE.201 */472__u8 reserved[1712];473};474475#define KVM_S390_VM_CPU_PROCESSOR_UV_FEAT_GUEST 6476#define KVM_S390_VM_CPU_MACHINE_UV_FEAT_GUEST 7477478#define KVM_S390_VM_CPU_UV_FEAT_NR_BITS 64479struct kvm_s390_vm_cpu_uv_feat {480union {481struct {482__u64 : 4;483__u64 ap : 1; /* bit 4 */484__u64 ap_intr : 1; /* bit 5 */485__u64 : 58;486};487__u64 feat;488};489};490491/* kvm attributes for crypto */492#define KVM_S390_VM_CRYPTO_ENABLE_AES_KW 0493#define KVM_S390_VM_CRYPTO_ENABLE_DEA_KW 1494#define KVM_S390_VM_CRYPTO_DISABLE_AES_KW 2495#define KVM_S390_VM_CRYPTO_DISABLE_DEA_KW 3496#define KVM_S390_VM_CRYPTO_ENABLE_APIE 4497#define KVM_S390_VM_CRYPTO_DISABLE_APIE 5498499/* kvm attributes for migration mode */500#define KVM_S390_VM_MIGRATION_STOP 0501#define KVM_S390_VM_MIGRATION_START 1502#define KVM_S390_VM_MIGRATION_STATUS 2503504/* for KVM_GET_REGS and KVM_SET_REGS */505struct kvm_regs {506/* general purpose regs for s390 */507__u64 gprs[16];508};509510/* for KVM_GET_SREGS and KVM_SET_SREGS */511struct kvm_sregs {512__u32 acrs[16];513__u64 crs[16];514};515516/* for KVM_GET_FPU and KVM_SET_FPU */517struct kvm_fpu {518__u32 fpc;519__u64 fprs[16];520};521522#define KVM_GUESTDBG_USE_HW_BP 0x00010000523524#define KVM_HW_BP 1525#define KVM_HW_WP_WRITE 2526#define KVM_SINGLESTEP 4527528struct kvm_debug_exit_arch {529__u64 addr;530__u8 type;531__u8 pad[7]; /* Should be set to 0 */532};533534struct kvm_hw_breakpoint {535__u64 addr;536__u64 phys_addr;537__u64 len;538__u8 type;539__u8 pad[7]; /* Should be set to 0 */540};541542/* for KVM_SET_GUEST_DEBUG */543struct kvm_guest_debug_arch {544__u32 nr_hw_bp;545__u32 pad; /* Should be set to 0 */546struct kvm_hw_breakpoint __user *hw_bp;547};548549/* for KVM_SYNC_PFAULT and KVM_REG_S390_PFTOKEN */550#define KVM_S390_PFAULT_TOKEN_INVALID 0xffffffffffffffffULL551552#define KVM_SYNC_PREFIX (1UL << 0)553#define KVM_SYNC_GPRS (1UL << 1)554#define KVM_SYNC_ACRS (1UL << 2)555#define KVM_SYNC_CRS (1UL << 3)556#define KVM_SYNC_ARCH0 (1UL << 4)557#define KVM_SYNC_PFAULT (1UL << 5)558#define KVM_SYNC_VRS (1UL << 6)559#define KVM_SYNC_RICCB (1UL << 7)560#define KVM_SYNC_FPRS (1UL << 8)561#define KVM_SYNC_GSCB (1UL << 9)562#define KVM_SYNC_BPBC (1UL << 10)563#define KVM_SYNC_ETOKEN (1UL << 11)564#define KVM_SYNC_DIAG318 (1UL << 12)565566#define KVM_SYNC_S390_VALID_FIELDS \567(KVM_SYNC_PREFIX | KVM_SYNC_GPRS | KVM_SYNC_ACRS | KVM_SYNC_CRS | \568KVM_SYNC_ARCH0 | KVM_SYNC_PFAULT | KVM_SYNC_VRS | KVM_SYNC_RICCB | \569KVM_SYNC_FPRS | KVM_SYNC_GSCB | KVM_SYNC_BPBC | KVM_SYNC_ETOKEN | \570KVM_SYNC_DIAG318)571572/* length and alignment of the sdnx as a power of two */573#define SDNXC 8574#define SDNXL (1UL << SDNXC)575/* definition of registers in kvm_run */576struct kvm_sync_regs {577__u64 prefix; /* prefix register */578__u64 gprs[16]; /* general purpose registers */579__u32 acrs[16]; /* access registers */580__u64 crs[16]; /* control registers */581__u64 todpr; /* tod programmable register [ARCH0] */582__u64 cputm; /* cpu timer [ARCH0] */583__u64 ckc; /* clock comparator [ARCH0] */584__u64 pp; /* program parameter [ARCH0] */585__u64 gbea; /* guest breaking-event address [ARCH0] */586__u64 pft; /* pfault token [PFAULT] */587__u64 pfs; /* pfault select [PFAULT] */588__u64 pfc; /* pfault compare [PFAULT] */589union {590__u64 vrs[32][2]; /* vector registers (KVM_SYNC_VRS) */591__u64 fprs[16]; /* fp registers (KVM_SYNC_FPRS) */592};593__u8 reserved[512]; /* for future vector expansion */594__u32 fpc; /* valid on KVM_SYNC_VRS or KVM_SYNC_FPRS */595__u8 bpbc : 1; /* bp mode */596__u8 reserved2 : 7;597__u8 padding1[51]; /* riccb needs to be 64byte aligned */598__u8 riccb[64]; /* runtime instrumentation controls block */599__u64 diag318; /* diagnose 0x318 info */600__u8 padding2[184]; /* sdnx needs to be 256byte aligned */601union {602__u8 sdnx[SDNXL]; /* state description annex */603struct {604__u64 reserved1[2];605__u64 gscb[4];606__u64 etoken;607__u64 etoken_extension;608};609};610};611612#define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1)613#define KVM_REG_S390_EPOCHDIFF (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x2)614#define KVM_REG_S390_CPU_TIMER (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x3)615#define KVM_REG_S390_CLOCK_COMP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x4)616#define KVM_REG_S390_PFTOKEN (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x5)617#define KVM_REG_S390_PFCOMPARE (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x6)618#define KVM_REG_S390_PFSELECT (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x7)619#define KVM_REG_S390_PP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x8)620#define KVM_REG_S390_GBEA (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x9)621#endif622623624