xref: /freebsd-src/sys/dev/hyperv/include/hyperv.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1cc759c19SPeter Grehan /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
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.
29cc759c19SPeter Grehan  */
30cc759c19SPeter Grehan 
317d8ee480SSepherosa Ziehau #ifndef _HYPERV_H_
327d8ee480SSepherosa Ziehau #define _HYPERV_H_
33cc759c19SPeter Grehan 
349622c93aSSepherosa Ziehau #ifdef _KERNEL
35cc759c19SPeter Grehan 
369622c93aSSepherosa Ziehau #include <sys/param.h>
379622c93aSSepherosa Ziehau #include <sys/systm.h>
38cc759c19SPeter Grehan 
39096d83feSSepherosa Ziehau #define MSR_HV_TIME_REF_COUNT		0x40000020
40096d83feSSepherosa Ziehau 
41096d83feSSepherosa Ziehau #define CPUID_HV_MSR_TIME_REFCNT	0x0002	/* MSR_HV_TIME_REF_COUNT */
42096d83feSSepherosa Ziehau #define CPUID_HV_MSR_SYNIC		0x0004	/* MSRs for SynIC */
43096d83feSSepherosa Ziehau #define CPUID_HV_MSR_SYNTIMER		0x0008	/* MSRs for SynTimer */
44096d83feSSepherosa Ziehau #define CPUID_HV_MSR_APIC		0x0010	/* MSR_HV_{EOI,ICR,TPR} */
45096d83feSSepherosa Ziehau #define CPUID_HV_MSR_HYPERCALL		0x0020	/* MSR_HV_GUEST_OS_ID
46096d83feSSepherosa Ziehau 						 * MSR_HV_HYPERCALL */
47096d83feSSepherosa Ziehau #define CPUID_HV_MSR_VP_INDEX		0x0040	/* MSR_HV_VP_INDEX */
48de69dfbbSSepherosa Ziehau #define CPUID_HV_MSR_REFERENCE_TSC	0x0200	/* MSR_HV_REFERENCE_TSC */
49096d83feSSepherosa Ziehau #define CPUID_HV_MSR_GUEST_IDLE		0x0400	/* MSR_HV_GUEST_IDLE */
50096d83feSSepherosa Ziehau 
51096d83feSSepherosa Ziehau #ifndef NANOSEC
52096d83feSSepherosa Ziehau #define NANOSEC				1000000000ULL
53096d83feSSepherosa Ziehau #endif
54096d83feSSepherosa Ziehau #define HYPERV_TIMER_NS_FACTOR		100ULL
55096d83feSSepherosa Ziehau #define HYPERV_TIMER_FREQ		(NANOSEC / HYPERV_TIMER_NS_FACTOR)
56096d83feSSepherosa Ziehau 
579622c93aSSepherosa Ziehau #endif	/* _KERNEL */
589622c93aSSepherosa Ziehau 
599622c93aSSepherosa Ziehau #define HYPERV_REFTSC_DEVNAME		"hv_tsc"
609622c93aSSepherosa Ziehau 
619622c93aSSepherosa Ziehau /*
629622c93aSSepherosa Ziehau  * Hyper-V Reference TSC
639622c93aSSepherosa Ziehau  */
649622c93aSSepherosa Ziehau struct hyperv_reftsc {
659622c93aSSepherosa Ziehau 	volatile uint32_t		tsc_seq;
669622c93aSSepherosa Ziehau 	volatile uint32_t		tsc_rsvd1;
679622c93aSSepherosa Ziehau 	volatile uint64_t		tsc_scale;
689622c93aSSepherosa Ziehau 	volatile int64_t		tsc_ofs;
699622c93aSSepherosa Ziehau } __packed __aligned(PAGE_SIZE);
709622c93aSSepherosa Ziehau #ifdef CTASSERT
719622c93aSSepherosa Ziehau CTASSERT(sizeof(struct hyperv_reftsc) == PAGE_SIZE);
729622c93aSSepherosa Ziehau #endif
739622c93aSSepherosa Ziehau 
749622c93aSSepherosa Ziehau #ifdef _KERNEL
759622c93aSSepherosa Ziehau 
7671ac1309SSepherosa Ziehau struct hyperv_guid {
7771ac1309SSepherosa Ziehau 	uint8_t				hv_guid[16];
7871ac1309SSepherosa Ziehau } __packed;
79cc759c19SPeter Grehan 
807df850a7SSepherosa Ziehau #define HYPERV_GUID_STRLEN		40
817df850a7SSepherosa Ziehau 
82227bb849SSepherosa Ziehau typedef uint64_t			(*hyperv_tc64_t)(void);
83da2f98a1SWei Hu 
84227bb849SSepherosa Ziehau int			hyperv_guid2str(const struct hyperv_guid *, char *,
85227bb849SSepherosa Ziehau 			    size_t);
86227bb849SSepherosa Ziehau 
879729f076SSouradeep Chakrabarti void	hyperv_init_tc(void);
889729f076SSouradeep Chakrabarti int		hypercall_page_setup(vm_paddr_t);
899729f076SSouradeep Chakrabarti void	hypercall_disable(void);
909729f076SSouradeep Chakrabarti bool	hyperv_identify_features(void);
919729f076SSouradeep Chakrabarti 
92227bb849SSepherosa Ziehau /*
93227bb849SSepherosa Ziehau  * hyperv_tc64 could be NULL, if there were no suitable Hyper-V
94227bb849SSepherosa Ziehau  * specific timecounter.
95227bb849SSepherosa Ziehau  */
96227bb849SSepherosa Ziehau extern hyperv_tc64_t	hyperv_tc64;
97096d83feSSepherosa Ziehau extern u_int		hyperv_features;	/* CPUID_HV_MSR_ */
986bf331afSSepherosa Ziehau extern u_int		hyperv_ver_major;
99096d83feSSepherosa Ziehau 
100ace5ce7eSWei Hu /*
101ace5ce7eSWei Hu  * Vmbus version after negotiation with host.
102ace5ce7eSWei Hu  */
103ace5ce7eSWei Hu extern uint32_t		vmbus_current_version;
104ace5ce7eSWei Hu 
1059622c93aSSepherosa Ziehau #endif	/* _KERNEL */
1069622c93aSSepherosa Ziehau 
1077d8ee480SSepherosa Ziehau #endif  /* _HYPERV_H_ */
108