xref: /openbsd/sys/dev/pv/pvreg.h (revision b5ec98cc)
1 /*	$OpenBSD: pvreg.h,v 1.6 2019/05/13 15:40:34 pd 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 #define KVM_MSR_WALL_CLOCK			0x4b564d00
47 #define KVM_MSR_SYSTEM_TIME			0x4b564d01
48 
49 struct pvclock_wall_clock {
50 	uint32_t		 wc_version;
51 	uint32_t		 wc_sec;
52 	uint32_t		 wc_nsec;
53 } __packed;
54 
55 struct pvclock_time_info {
56 	uint32_t		 ti_version;
57 	uint32_t		 ti_pad0;
58 	uint64_t		 ti_tsc_timestamp;
59 	uint64_t		 ti_system_time;
60 	uint32_t		 ti_tsc_to_system_mul;
61 	int8_t			 ti_tsc_shift;
62 	uint8_t			 ti_flags;
63 	uint8_t			 ti_pad[2];
64 } __packed;
65 
66 #define PVCLOCK_FLAG_TSC_STABLE			0x01
67 #define PVCLOCK_SYSTEM_TIME_ENABLE		0x01
68 
69 /*
70  * Hyper-V
71  */
72 #define CPUID_OFFSET_HYPERV_INTERFACE		0x1
73 #define CPUID_OFFSET_HYPERV_VERSION		0x2
74 #define CPUID_OFFSET_HYPERV_FEATURES		0x3
75 #define CPUID_OFFSET_HYPERV_ENLIGHTENMENT_INFO	0x4
76 #define CPUID_OFFSET_HYPERV_IMPL_LIMITS		0x5
77 
78 #define HYPERV_VERSION_EAX_BUILD_NUMBER		0
79 #define HYPERV_VERSION_EBX_MAJOR_M		0xffff0000
80 #define HYPERV_VERSION_EBX_MAJOR_S		16
81 #define HYPERV_VERSION_EBX_MINOR_M		0x0000ffff
82 #define HYPERV_VERSION_EBX_MINOR_S		0
83 #define HYPERV_VERSION_ECX_SERVICE_PACK		0
84 #define HYPERV_VERSION_EDX_SERVICE_BRANCH_M	0xff000000
85 #define HYPERV_VERSION_EDX_SERVICE_BRANCH_S	24
86 #define HYPERV_VERSION_EDX_SERVICE_NUMBER_M	0x00ffffff
87 #define HYPERV_VERSION_EDX_SERVICE_NUMBER_S	0
88 
89 #define HYPERV_VERSION_WS2008			0x00060000
90 #define HYPERV_VERSION_WIN7			0x00060001
91 #define HYPERV_VERSION_WIN8			0x00060002
92 #define HYPERV_VERSION_WIN8_1			0x00060003
93 #define HYPERV_VERSION_WIN10			0x00100000
94 
95 #define HYPERV_FEATURE_EAX_VP_RUNTIME		0
96 #define HYPERV_FEATURE_EAX_TIME_REF_COUNT	1
97 #define HYPERV_FEATURE_EAX_SYNIC		2
98 #define HYPERV_FEATURE_EAX_STIMER		3
99 #define HYPERV_FEATURE_EAX_APIC			4
100 #define HYPERV_FEATURE_EAX_HYPERCALL		5
101 #define HYPERV_FEATURE_EAX_VP_INDEX		6
102 #define HYPERV_FEATURE_EAX_MSR_RESET		7
103 #define HYPERV_FEATURE_EAX_STATS_PAGES		8
104 #define HYPERV_FEATURE_EAX_REF_TSC		9
105 #define HYPERV_FEATURE_EAX_GUEST_IDLE		10
106 #define HYPERV_FEATURE_EAX_TIMER_FREQ		11
107 #define HYPERV_FEATURE_EAX_DEBUG		12
108 
109 /*
110  * Xen
111  */
112 #define CPUID_OFFSET_XEN_VERSION		0x1
113 #define CPUID_OFFSET_XEN_HYPERCALL		0x2
114 
115 #define XEN_VERSION_MAJOR_S			16
116 #define XEN_VERSION_MINOR_M			0xffff
117 
118 #endif /* _DEV_PV_PVBUS_H_ */
119