Index: sys/conf/files =================================================================== --- sys/conf/files +++ sys/conf/files @@ -5128,6 +5128,7 @@ vm/vm_unix.c standard vm/vnode_pager.c standard xen/features.c optional xenhvm +xen/info.c optional xenhvm xen/xenbus/xenbus_if.m optional xenhvm xen/xenbus/xenbus.c optional xenhvm xen/xenbus/xenbusb_if.m optional xenhvm Index: sys/x86/xen/hvm.c =================================================================== --- sys/x86/xen/hvm.c +++ sys/x86/xen/hvm.c @@ -83,12 +83,6 @@ */ int xen_vector_callback_enabled; -/** - * Start info flags. ATM this only used to store the initial domain flag for - * PVHv2, and it's always empty for HVM guests. - */ -uint32_t hvm_start_flags; - /** * Signal whether the vector injected for the event channel upcall requires to * be EOI'ed on the local APIC. @@ -489,47 +483,3 @@ DPCPU_SET(vcpu_info, vcpu_info); } SYSINIT(xen_hvm_cpu_init, SI_SUB_INTR, SI_ORDER_FIRST, xen_hvm_cpu_init, NULL); - -/* HVM/PVH start_info accessors */ -static vm_paddr_t -hvm_get_xenstore_mfn(void) -{ - - return (hvm_get_parameter(HVM_PARAM_STORE_PFN)); -} - -static evtchn_port_t -hvm_get_xenstore_evtchn(void) -{ - - return (hvm_get_parameter(HVM_PARAM_STORE_EVTCHN)); -} - -static vm_paddr_t -hvm_get_console_mfn(void) -{ - - return (hvm_get_parameter(HVM_PARAM_CONSOLE_PFN)); -} - -static evtchn_port_t -hvm_get_console_evtchn(void) -{ - - return (hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN)); -} - -static uint32_t -hvm_get_start_flags(void) -{ - - return (hvm_start_flags); -} - -struct hypervisor_info hypervisor_info = { - .get_xenstore_mfn = hvm_get_xenstore_mfn, - .get_xenstore_evtchn = hvm_get_xenstore_evtchn, - .get_console_mfn = hvm_get_console_mfn, - .get_console_evtchn = hvm_get_console_evtchn, - .get_start_flags = hvm_get_start_flags, -}; Index: sys/xen/info.c =================================================================== --- /dev/null +++ sys/xen/info.c @@ -0,0 +1,97 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2018 Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include /* required by xen/xen-os.h */ + +#include /* required by xen/xen-os.h */ + +#include +#include + +#include +#include + +/*-------------------------------- Global Data -------------------------------*/ +/** + * Start info flags. ATM this only used to store the initial domain flag for + * PVHv2, and it's always empty for HVM guests. + */ +uint32_t hvm_start_flags; + +/*---------------------- XEN Hypervisor Probe and Setup ----------------------*/ + +/* HVM/PVH start_info accessors */ +static vm_paddr_t +hvm_get_xenstore_mfn(void) +{ + + return (hvm_get_parameter(HVM_PARAM_STORE_PFN)); +} + +static evtchn_port_t +hvm_get_xenstore_evtchn(void) +{ + + return (hvm_get_parameter(HVM_PARAM_STORE_EVTCHN)); +} + +static vm_paddr_t +hvm_get_console_mfn(void) +{ + + return (hvm_get_parameter(HVM_PARAM_CONSOLE_PFN)); +} + +static evtchn_port_t +hvm_get_console_evtchn(void) +{ + + return (hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN)); +} + +static uint32_t +hvm_get_start_flags(void) +{ + + return (hvm_start_flags); +} + +#if defined(__aarch64__) || defined(__arm__) +const +#endif +struct hypervisor_info hypervisor_info = { + .get_xenstore_mfn = hvm_get_xenstore_mfn, + .get_xenstore_evtchn = hvm_get_xenstore_evtchn, + .get_console_mfn = hvm_get_console_mfn, + .get_console_evtchn = hvm_get_console_evtchn, + .get_start_flags = hvm_get_start_flags, +}; Index: sys/xen/xen-os.h =================================================================== --- sys/xen/xen-os.h +++ sys/xen/xen-os.h @@ -52,7 +52,11 @@ evtchn_port_t (*get_console_evtchn)(void); uint32_t (*get_start_flags)(void); }; -extern struct hypervisor_info hypervisor_info; +extern +#if defined(__aarch64__) || defined(__arm__) +const +#endif +struct hypervisor_info hypervisor_info; static inline vm_paddr_t xen_get_xenstore_mfn(void)