xref: /freebsd-13.1/sys/dev/hyperv/include/hyperv.h (revision ace5ce7e)
1cc759c19SPeter Grehan /*-
2718cf2ccSPedro F. Giffuni  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3718cf2ccSPedro F. Giffuni  *
493b4e111SSepherosa Ziehau  * Copyright (c) 2009-2012,2016-2017 Microsoft Corp.
5cc759c19SPeter Grehan  * Copyright (c) 2012 NetApp Inc.
6cc759c19SPeter Grehan  * Copyright (c) 2012 Citrix Inc.
7cc759c19SPeter Grehan  * All rights reserved.
8cc759c19SPeter Grehan  *
9cc759c19SPeter Grehan  * Redistribution and use in source and binary forms, with or without
10cc759c19SPeter Grehan  * modification, are permitted provided that the following conditions
11cc759c19SPeter Grehan  * are met:
12cc759c19SPeter Grehan  * 1. Redistributions of source code must retain the above copyright
13cc759c19SPeter Grehan  *    notice unmodified, this list of conditions, and the following
14cc759c19SPeter Grehan  *    disclaimer.
15cc759c19SPeter Grehan  * 2. Redistributions in binary form must reproduce the above copyright
16cc759c19SPeter Grehan  *    notice, this list of conditions and the following disclaimer in the
17cc759c19SPeter Grehan  *    documentation and/or other materials provided with the distribution.
18cc759c19SPeter Grehan  *
19cc759c19SPeter Grehan  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20cc759c19SPeter Grehan  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21cc759c19SPeter Grehan  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22cc759c19SPeter Grehan  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23cc759c19SPeter Grehan  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24cc759c19SPeter Grehan  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25cc759c19SPeter Grehan  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26cc759c19SPeter Grehan  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27cc759c19SPeter Grehan  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28cc759c19SPeter Grehan  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29ddc4c1e7SPeter Grehan  *
30ddc4c1e7SPeter Grehan  * $FreeBSD$
31cc759c19SPeter Grehan  */
32cc759c19SPeter Grehan 
337d8ee480SSepherosa Ziehau #ifndef _HYPERV_H_
347d8ee480SSepherosa Ziehau #define _HYPERV_H_
35cc759c19SPeter Grehan 
369622c93aSSepherosa Ziehau #ifdef _KERNEL
37cc759c19SPeter Grehan 
389622c93aSSepherosa Ziehau #include <sys/param.h>
399622c93aSSepherosa Ziehau #include <sys/systm.h>
40cc759c19SPeter Grehan 
41096d83feSSepherosa Ziehau #define MSR_HV_TIME_REF_COUNT		0x40000020
42096d83feSSepherosa Ziehau 
43096d83feSSepherosa Ziehau #define CPUID_HV_MSR_TIME_REFCNT	0x0002	/* MSR_HV_TIME_REF_COUNT */
44096d83feSSepherosa Ziehau #define CPUID_HV_MSR_SYNIC		0x0004	/* MSRs for SynIC */
45096d83feSSepherosa Ziehau #define CPUID_HV_MSR_SYNTIMER		0x0008	/* MSRs for SynTimer */
46096d83feSSepherosa Ziehau #define CPUID_HV_MSR_APIC		0x0010	/* MSR_HV_{EOI,ICR,TPR} */
47096d83feSSepherosa Ziehau #define CPUID_HV_MSR_HYPERCALL		0x0020	/* MSR_HV_GUEST_OS_ID
48096d83feSSepherosa Ziehau 						 * MSR_HV_HYPERCALL */
49096d83feSSepherosa Ziehau #define CPUID_HV_MSR_VP_INDEX		0x0040	/* MSR_HV_VP_INDEX */
50de69dfbbSSepherosa Ziehau #define CPUID_HV_MSR_REFERENCE_TSC	0x0200	/* MSR_HV_REFERENCE_TSC */
51096d83feSSepherosa Ziehau #define CPUID_HV_MSR_GUEST_IDLE		0x0400	/* MSR_HV_GUEST_IDLE */
52096d83feSSepherosa Ziehau 
53096d83feSSepherosa Ziehau #ifndef NANOSEC
54096d83feSSepherosa Ziehau #define NANOSEC				1000000000ULL
55096d83feSSepherosa Ziehau #endif
56096d83feSSepherosa Ziehau #define HYPERV_TIMER_NS_FACTOR		100ULL
57096d83feSSepherosa Ziehau #define HYPERV_TIMER_FREQ		(NANOSEC / HYPERV_TIMER_NS_FACTOR)
58096d83feSSepherosa Ziehau 
599622c93aSSepherosa Ziehau #endif	/* _KERNEL */
609622c93aSSepherosa Ziehau 
619622c93aSSepherosa Ziehau #define HYPERV_REFTSC_DEVNAME		"hv_tsc"
629622c93aSSepherosa Ziehau 
639622c93aSSepherosa Ziehau /*
649622c93aSSepherosa Ziehau  * Hyper-V Reference TSC
659622c93aSSepherosa Ziehau  */
669622c93aSSepherosa Ziehau struct hyperv_reftsc {
679622c93aSSepherosa Ziehau 	volatile uint32_t		tsc_seq;
689622c93aSSepherosa Ziehau 	volatile uint32_t		tsc_rsvd1;
699622c93aSSepherosa Ziehau 	volatile uint64_t		tsc_scale;
709622c93aSSepherosa Ziehau 	volatile int64_t		tsc_ofs;
719622c93aSSepherosa Ziehau } __packed __aligned(PAGE_SIZE);
729622c93aSSepherosa Ziehau #ifdef CTASSERT
739622c93aSSepherosa Ziehau CTASSERT(sizeof(struct hyperv_reftsc) == PAGE_SIZE);
749622c93aSSepherosa Ziehau #endif
759622c93aSSepherosa Ziehau 
769622c93aSSepherosa Ziehau #ifdef _KERNEL
779622c93aSSepherosa Ziehau 
7871ac1309SSepherosa Ziehau struct hyperv_guid {
7971ac1309SSepherosa Ziehau 	uint8_t				hv_guid[16];
8071ac1309SSepherosa Ziehau } __packed;
81cc759c19SPeter Grehan 
827df850a7SSepherosa Ziehau #define HYPERV_GUID_STRLEN		40
837df850a7SSepherosa Ziehau 
84227bb849SSepherosa Ziehau typedef uint64_t			(*hyperv_tc64_t)(void);
85da2f98a1SWei Hu 
86227bb849SSepherosa Ziehau int			hyperv_guid2str(const struct hyperv_guid *, char *,
87227bb849SSepherosa Ziehau 			    size_t);
88227bb849SSepherosa Ziehau 
89227bb849SSepherosa Ziehau /*
90227bb849SSepherosa Ziehau  * hyperv_tc64 could be NULL, if there were no suitable Hyper-V
91227bb849SSepherosa Ziehau  * specific timecounter.
92227bb849SSepherosa Ziehau  */
93227bb849SSepherosa Ziehau extern hyperv_tc64_t	hyperv_tc64;
94096d83feSSepherosa Ziehau extern u_int		hyperv_features;	/* CPUID_HV_MSR_ */
956bf331afSSepherosa Ziehau extern u_int		hyperv_ver_major;
96096d83feSSepherosa Ziehau 
97*ace5ce7eSWei Hu /*
98*ace5ce7eSWei Hu  * Vmbus version after negotiation with host.
99*ace5ce7eSWei Hu  */
100*ace5ce7eSWei Hu extern uint32_t		vmbus_current_version;
101*ace5ce7eSWei Hu 
1029622c93aSSepherosa Ziehau #endif	/* _KERNEL */
1039622c93aSSepherosa Ziehau 
1047d8ee480SSepherosa Ziehau #endif  /* _HYPERV_H_ */
105