vmm_host.h revision 242275
112657Skvn/*-
212657Skvn * Copyright (c) 2012 NetApp, Inc.
312657Skvn * All rights reserved.
412657Skvn *
512657Skvn * Redistribution and use in source and binary forms, with or without
612657Skvn * modification, are permitted provided that the following conditions
712657Skvn * are met:
812657Skvn * 1. Redistributions of source code must retain the above copyright
912657Skvn *    notice, this list of conditions and the following disclaimer.
1012657Skvn * 2. Redistributions in binary form must reproduce the above copyright
1112657Skvn *    notice, this list of conditions and the following disclaimer in the
1212657Skvn *    documentation and/or other materials provided with the distribution.
1312657Skvn *
1412657Skvn * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND
1512657Skvn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1612657Skvn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1712657Skvn * ARE DISCLAIMED.  IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
1812657Skvn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1912657Skvn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2012657Skvn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2112657Skvn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2212657Skvn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2312657Skvn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2412657Skvn * SUCH DAMAGE.
2512657Skvn *
2613190Siveresov * $FreeBSD: projects/bhyve/sys/amd64/vmm/vmm_host.h 242275 2012-10-29 01:51:24Z neel $
2713190Siveresov */
2812657Skvn
2912657Skvn#ifndef	_VMM_HOST_H_
3012657Skvn#define	_VMM_HOST_H_
3112657Skvn
3212657Skvn#ifndef	_KERNEL
3312657Skvn#error "no user-servicable parts inside"
3412657Skvn#endif
3512657Skvn
3612657Skvnvoid vmm_host_state_init(void);
3712657Skvn
3812657Skvnuint64_t vmm_get_host_pat(void);
3912657Skvnuint64_t vmm_get_host_efer(void);
4012657Skvnuint64_t vmm_get_host_cr0(void);
4112657Skvnuint64_t vmm_get_host_cr4(void);
4212657Skvnuint64_t vmm_get_host_datasel(void);
4312657Skvnuint64_t vmm_get_host_codesel(void);
4412657Skvnuint64_t vmm_get_host_tsssel(void);
4512657Skvnuint64_t vmm_get_host_fsbase(void);
4612657Skvnuint64_t vmm_get_host_idtrbase(void);
4712657Skvn
4812657Skvn/*
4912657Skvn * Inline access to host state that is used on every VM entry
5012657Skvn */
5112657Skvnstatic __inline uint64_t
5212657Skvnvmm_get_host_trbase(void)
5312657Skvn{
5412657Skvn
5512657Skvn	return ((uint64_t)PCPU_GET(tssp));
5612657Skvn}
5712657Skvn
5812657Skvnstatic __inline uint64_t
5912657Skvnvmm_get_host_gdtrbase(void)
6012657Skvn{
6112657Skvn
6212657Skvn	return ((uint64_t)&gdt[NGDT * curcpu]);
6312657Skvn}
6412657Skvn
6512657Skvnstruct pcpu;
6612657Skvnextern struct pcpu __pcpu[];
6712657Skvn
6812657Skvnstatic __inline uint64_t
6912657Skvnvmm_get_host_gsbase(void)
7012657Skvn{
7112657Skvn
7212657Skvn	return ((uint64_t)&__pcpu[curcpu]);
7312657Skvn}
7412657Skvn
7512657Skvn#endif
7612657Skvn