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