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