1dd135ebbd2a6b5e07dadb66c4dd033bb69531051Christian Borntraeger#ifndef __LINUX_KVM_S390_H 2dd135ebbd2a6b5e07dadb66c4dd033bb69531051Christian Borntraeger#define __LINUX_KVM_S390_H 3b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens/* 4a53c8fab3f87c995c30ac226a03af95361243144Heiko Carstens * KVM s390 specific structures and definitions 5b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * 6b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * Copyright IBM Corp. 2008 7b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * 8b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * This program is free software; you can redistribute it and/or modify 9b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * it under the terms of the GNU General Public License (version 2 only) 10b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * as published by the Free Software Foundation. 11b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * 12b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * Author(s): Carsten Otte <cotte@de.ibm.com> 13b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens * Christian Borntraeger <borntraeger@de.ibm.com> 14b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens */ 150680ba0133ffeac4bd3689668b05ea2d16f14ae0Heiko Carstens#include <linux/types.h> 16b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens 17d7b0b5eb3000c6fb902f08c619fcd673a23d8fabCarsten Otte#define __KVM_S390 1827291e2165b6de70c476b7b675308113edd69a60David Hildenbrand#define __KVM_HAVE_GUEST_DEBUG 19d7b0b5eb3000c6fb902f08c619fcd673a23d8fabCarsten Otte 20c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann/* Device control API: s390-specific devices */ 21c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann#define KVM_DEV_FLIC_GET_ALL_IRQS 1 22c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann#define KVM_DEV_FLIC_ENQUEUE 2 23c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann#define KVM_DEV_FLIC_CLEAR_IRQS 3 243c038e6be0e299d4d3762d0a9a29f02de6e04991Dominik Dingel#define KVM_DEV_FLIC_APF_ENABLE 4 253c038e6be0e299d4d3762d0a9a29f02de6e04991Dominik Dingel#define KVM_DEV_FLIC_APF_DISABLE_WAIT 5 26841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck#define KVM_DEV_FLIC_ADAPTER_REGISTER 6 27841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck#define KVM_DEV_FLIC_ADAPTER_MODIFY 7 28c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann/* 29c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann * We can have up to 4*64k pending subchannels + 8 adapter interrupts, 30c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann * as well as up to ASYNC_PF_PER_VCPU*KVM_MAX_VCPUS pfault done interrupts. 31c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann * There are also sclp and machine checks. This gives us 32c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann * sizeof(kvm_s390_irq)*(4*65536+8+64*64+1+1) = 72 * 266250 = 19170000 33c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann * Lets round up to 8192 pages. 34c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann */ 35a91b8ebe8671980151e0a19ee9fec6b0e1ae1d58Jens Freimann#define KVM_S390_MAX_FLOAT_IRQS 266250 36c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann#define KVM_S390_FLIC_MAX_BUFFER 0x2000000 37c05c4186bbe4e99d64e8a36f7ca7f480da5d109fJens Freimann 38841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huckstruct kvm_s390_io_adapter { 39841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u32 id; 40841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 isc; 41841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 maskable; 42841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 swap; 43841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 pad; 44841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck}; 45841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck 46841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck#define KVM_S390_IO_ADAPTER_MASK 1 47841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck#define KVM_S390_IO_ADAPTER_MAP 2 48841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck#define KVM_S390_IO_ADAPTER_UNMAP 3 49841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck 50841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huckstruct kvm_s390_io_adapter_req { 51841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u32 id; 52841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 type; 53841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u8 mask; 54841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u16 pad0; 55841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck __u64 addr; 56841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck}; 57841b91c584b6d1e2a2cb508bd2d0236cd37e1750Cornelia Huck 584f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel/* kvm attr_group on vm fd */ 594f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel#define KVM_S390_VM_MEM_CTRL 0 604f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel 614f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel/* kvm attributes for mem_ctrl */ 624f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel#define KVM_S390_VM_MEM_ENABLE_CMMA 0 634f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel#define KVM_S390_VM_MEM_CLR_CMMA 1 644f718eab262868aeab83774ec4ce25e6a9906657Dominik Dingel 65b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens/* for KVM_GET_REGS and KVM_SET_REGS */ 66b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstensstruct kvm_regs { 67b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens /* general purpose regs for s390 */ 68b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens __u64 gprs[16]; 69b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens}; 70b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens 71b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens/* for KVM_GET_SREGS and KVM_SET_SREGS */ 72b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstensstruct kvm_sregs { 73b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens __u32 acrs[16]; 74b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens __u64 crs[16]; 75b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens}; 76b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens 77b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens/* for KVM_GET_FPU and KVM_SET_FPU */ 78b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstensstruct kvm_fpu { 79b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens __u32 fpc; 80b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens __u64 fprs[16]; 81b0c632db637d68ad39d9f97f452ce176253f5f4eHeiko Carstens}; 82dd135ebbd2a6b5e07dadb66c4dd033bb69531051Christian Borntraeger 83af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand#define KVM_GUESTDBG_USE_HW_BP 0x00010000 84af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand 85af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand#define KVM_HW_BP 1 86af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand#define KVM_HW_WP_WRITE 2 87af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand#define KVM_SINGLESTEP 4 88af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand 89d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszkastruct kvm_debug_exit_arch { 90af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u64 addr; 91af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u8 type; 92af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u8 pad[7]; /* Should be set to 0 */ 93af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand}; 94af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand 95af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrandstruct kvm_hw_breakpoint { 96af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u64 addr; 97af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u64 phys_addr; 98af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u64 len; 99af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u8 type; 100af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u8 pad[7]; /* Should be set to 0 */ 101d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszka}; 102d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszka 103d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszka/* for KVM_SET_GUEST_DEBUG */ 104d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszkastruct kvm_guest_debug_arch { 105af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u32 nr_hw_bp; 106af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand __u32 pad; /* Should be set to 0 */ 107af1827e773c983f1d601d674447aea89efdb1acbDavid Hildenbrand struct kvm_hw_breakpoint __user *hw_bp; 108d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszka}; 109d0bfb940ecabf0b44fb1fd80d8d60594e569e5ecJan Kiszka 11060b413c9248495ea400e80e08e4d1e28ed7ee05eChristian Borntraeger#define KVM_SYNC_PREFIX (1UL << 0) 1115a32c1af56b3c74212b1de2a1d1658c303dd3516Christian Borntraeger#define KVM_SYNC_GPRS (1UL << 1) 11259674c1a6a35d56ae5197cbc9abe7bfec6762ba9Christian Borntraeger#define KVM_SYNC_ACRS (1UL << 2) 1139eed0735ca6a5cf386a4998ad4b6d52d1e29353fChristian Borntraeger#define KVM_SYNC_CRS (1UL << 3) 114b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand#define KVM_SYNC_ARCH0 (1UL << 4) 115b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand#define KVM_SYNC_PFAULT (1UL << 5) 116b9e5dc8d4511e6a00862a795319569e7fe7f60f4Christian Borntraeger/* definition of registers in kvm_run */ 117b9e5dc8d4511e6a00862a795319569e7fe7f60f4Christian Borntraegerstruct kvm_sync_regs { 11860b413c9248495ea400e80e08e4d1e28ed7ee05eChristian Borntraeger __u64 prefix; /* prefix register */ 1195a32c1af56b3c74212b1de2a1d1658c303dd3516Christian Borntraeger __u64 gprs[16]; /* general purpose registers */ 12059674c1a6a35d56ae5197cbc9abe7bfec6762ba9Christian Borntraeger __u32 acrs[16]; /* access registers */ 1219eed0735ca6a5cf386a4998ad4b6d52d1e29353fChristian Borntraeger __u64 crs[16]; /* control registers */ 122b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 todpr; /* tod programmable register [ARCH0] */ 123b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 cputm; /* cpu timer [ARCH0] */ 124b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 ckc; /* clock comparator [ARCH0] */ 125b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 pp; /* program parameter [ARCH0] */ 126b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 gbea; /* guest breaking-event address [ARCH0] */ 127b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 pft; /* pfault token [PFAULT] */ 128b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 pfs; /* pfault select [PFAULT] */ 129b028ee3edd54d338dd811aeafd670a2c682be558David Hildenbrand __u64 pfc; /* pfault compare [PFAULT] */ 130b9e5dc8d4511e6a00862a795319569e7fe7f60f4Christian Borntraeger}; 13129b7c71b5ecf2caaa4c2105ecc0094826db8a8a8Carsten Otte 13229b7c71b5ecf2caaa4c2105ecc0094826db8a8a8Carsten Otte#define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1) 13329b7c71b5ecf2caaa4c2105ecc0094826db8a8a8Carsten Otte#define KVM_REG_S390_EPOCHDIFF (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x2) 13446a6dd1c87c4ff17202574127daf70cc0bb38d6dJason J. herne#define KVM_REG_S390_CPU_TIMER (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x3) 13546a6dd1c87c4ff17202574127daf70cc0bb38d6dJason J. herne#define KVM_REG_S390_CLOCK_COMP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x4) 136536336c21697551ceca44bdffb9f53e6cc5f2f20Dominik Dingel#define KVM_REG_S390_PFTOKEN (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x5) 137536336c21697551ceca44bdffb9f53e6cc5f2f20Dominik Dingel#define KVM_REG_S390_PFCOMPARE (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x6) 138536336c21697551ceca44bdffb9f53e6cc5f2f20Dominik Dingel#define KVM_REG_S390_PFSELECT (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x7) 139672550fb682e9935e1a318bf4ac3f611a057dee1Christian Borntraeger#define KVM_REG_S390_PP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x8) 140afa45ff521130cee79a50b565693388be8c8c9c2Christian Borntraeger#define KVM_REG_S390_GBEA (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x9) 141dd135ebbd2a6b5e07dadb66c4dd033bb69531051Christian Borntraeger#endif 142