xref: /openbsd-src/sys/dev/pv/pvreg.h (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1 /*	$OpenBSD: pvreg.h,v 1.4 2015/12/12 12:33:49 reyk Exp $	*/
2 
3 /*
4  * Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
5  * Copyright (c) 2015 Stefan Fritsch <sf@sfritsch.de>
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _DEV_PV_PVBUS_H_
21 #define _DEV_PV_PVBUS_H_
22 
23 #define	CPUID_HV_SIGNATURE_START	0x40000000
24 #define	CPUID_HV_SIGNATURE_END		0x40010000
25 #define	CPUID_HV_SIGNATURE_STEP		0x100
26 #define CPUID_HV_SIGNATURE_STRLEN	12
27 
28 /*
29  * KVM
30  */
31 #define	CPUID_OFFSET_KVM_FEATURES		0x1
32 
33 #define	KVM_FEATURE_CLOCKSOURCE			0	/* deprecated */
34 #define	KVM_FEATURE_NOP_IO_DELAY		1
35 #define	KVM_FEATURE_MMU_OP			2	/* deprecated */
36 #define	KVM_FEATURE_CLOCKSOURCE2		3
37 #define	KVM_FEATURE_ASYNC_PF			4
38 #define	KVM_FEATURE_STEAL_TIME			5
39 #define	KVM_FEATURE_PV_EOI			6
40 #define	KVM_FEATURE_PV_UNHALT			7
41 #define	KVM_FEATURE_CLOCKSOURCE_STABLE_BIT	24
42 
43 #define	KVM_MSR_EOI_EN				0x4b564d04
44 #define KVM_PV_EOI_BIT				0
45 
46 /*
47  * Hyper-V
48  */
49 #define CPUID_OFFSET_HYPERV_INTERFACE		0x1
50 #define CPUID_OFFSET_HYPERV_VERSION		0x2
51 #define CPUID_OFFSET_HYPERV_FEATURES		0x3
52 #define CPUID_OFFSET_HYPERV_ENLIGHTENMENT_INFO	0x4
53 #define CPUID_OFFSET_HYPERV_IMPL_LIMITS		0x5
54 
55 #define HYPERV_VERSION_EAX_BUILD_NUMBER		0
56 #define HYPERV_VERSION_EBX_MAJOR_M		0xffff0000
57 #define HYPERV_VERSION_EBX_MAJOR_S		16
58 #define HYPERV_VERSION_EBX_MINOR_M		0x0000ffff
59 #define HYPERV_VERSION_EBX_MINOR_S		0
60 #define HYPERV_VERSION_ECX_SERVICE_PACK		0
61 #define HYPERV_VERSION_EDX_SERVICE_BRANCH_M	0xff000000
62 #define HYPERV_VERSION_EDX_SERVICE_BRANCH_S	24
63 #define HYPERV_VERSION_EDX_SERVICE_NUMBER_M	0x00ffffff
64 #define HYPERV_VERSION_EDX_SERVICE_NUMBER_S	0
65 
66 #define HYPERV_VERSION_WS2008			0x00060000
67 #define HYPERV_VERSION_WIN7			0x00060001
68 #define HYPERV_VERSION_WIN8			0x00060002
69 #define HYPERV_VERSION_WIN8_1			0x00060003
70 #define HYPERV_VERSION_WIN10			0x00100000
71 
72 #define HYPERV_FEATURE_EAX_VP_RUNTIME		0
73 #define HYPERV_FEATURE_EAX_TIME_REF_COUNT	1
74 #define HYPERV_FEATURE_EAX_SYNIC		2
75 #define HYPERV_FEATURE_EAX_STIMER		3
76 #define HYPERV_FEATURE_EAX_APIC			4
77 #define HYPERV_FEATURE_EAX_HYPERCALL		5
78 #define HYPERV_FEATURE_EAX_VP_INDEX		6
79 #define HYPERV_FEATURE_EAX_MSR_RESET		7
80 #define HYPERV_FEATURE_EAX_STATS_PAGES		8
81 #define HYPERV_FEATURE_EAX_REF_TSC		9
82 #define HYPERV_FEATURE_EAX_GUEST_IDLE		10
83 #define HYPERV_FEATURE_EAX_TIMER_FREQ		11
84 #define HYPERV_FEATURE_EAX_DEBUG		12
85 
86 /*
87  * Xen
88  */
89 #define CPUID_OFFSET_XEN_VERSION		0x1
90 #define CPUID_OFFSET_XEN_HYPERCALL		0x2
91 
92 #define XEN_VERSION_MAJOR_S			16
93 #define XEN_VERSION_MINOR_M			0xffff
94 
95 #endif /* _DEV_PV_PVBUS_H_ */
96