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