1*76acc41fSJustin T. Gibbs /****************************************************************************** 2*76acc41fSJustin T. Gibbs * xen/xen-os.h 3*76acc41fSJustin T. Gibbs * 4*76acc41fSJustin T. Gibbs * Random collection of macros and definition 5*76acc41fSJustin T. Gibbs * 6*76acc41fSJustin T. Gibbs * Copyright (c) 2003, 2004 Keir Fraser (on behalf of the Xen team) 7*76acc41fSJustin T. Gibbs * All rights reserved. 8*76acc41fSJustin T. Gibbs * 9*76acc41fSJustin T. Gibbs * Permission is hereby granted, free of charge, to any person obtaining a copy 10*76acc41fSJustin T. Gibbs * of this software and associated documentation files (the "Software"), to 11*76acc41fSJustin T. Gibbs * deal in the Software without restriction, including without limitation the 12*76acc41fSJustin T. Gibbs * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 13*76acc41fSJustin T. Gibbs * sell copies of the Software, and to permit persons to whom the Software is 14*76acc41fSJustin T. Gibbs * furnished to do so, subject to the following conditions: 15*76acc41fSJustin T. Gibbs * 16*76acc41fSJustin T. Gibbs * The above copyright notice and this permission notice shall be included in 17*76acc41fSJustin T. Gibbs * all copies or substantial portions of the Software. 18*76acc41fSJustin T. Gibbs * 19*76acc41fSJustin T. Gibbs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20*76acc41fSJustin T. Gibbs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21*76acc41fSJustin T. Gibbs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22*76acc41fSJustin T. Gibbs * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23*76acc41fSJustin T. Gibbs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24*76acc41fSJustin T. Gibbs * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25*76acc41fSJustin T. Gibbs * DEALINGS IN THE SOFTWARE. 26*76acc41fSJustin T. Gibbs * 27*76acc41fSJustin T. Gibbs * $FreeBSD$ 28*76acc41fSJustin T. Gibbs */ 29*76acc41fSJustin T. Gibbs 30*76acc41fSJustin T. Gibbs #ifndef _XEN_XEN_OS_H_ 31*76acc41fSJustin T. Gibbs #define _XEN_XEN_OS_H_ 32*76acc41fSJustin T. Gibbs 33*76acc41fSJustin T. Gibbs #if !defined(__XEN_INTERFACE_VERSION__) 34*76acc41fSJustin T. Gibbs #define __XEN_INTERFACE_VERSION__ 0x00030208 35*76acc41fSJustin T. Gibbs #endif 36*76acc41fSJustin T. Gibbs 37*76acc41fSJustin T. Gibbs #define GRANT_REF_INVALID 0xffffffff 38*76acc41fSJustin T. Gibbs 39*76acc41fSJustin T. Gibbs #ifdef LOCORE 40*76acc41fSJustin T. Gibbs #define __ASSEMBLY__ 41*76acc41fSJustin T. Gibbs #endif 42*76acc41fSJustin T. Gibbs 43*76acc41fSJustin T. Gibbs #include <machine/xen/xen-os.h> 44*76acc41fSJustin T. Gibbs 45*76acc41fSJustin T. Gibbs #include <xen/interface/xen.h> 46*76acc41fSJustin T. Gibbs 47*76acc41fSJustin T. Gibbs /* Everything below this point is not included by assembler (.S) files. */ 48*76acc41fSJustin T. Gibbs #ifndef __ASSEMBLY__ 49*76acc41fSJustin T. Gibbs 50*76acc41fSJustin T. Gibbs /* Force a proper event-channel callback from Xen. */ 51*76acc41fSJustin T. Gibbs void force_evtchn_callback(void); 52*76acc41fSJustin T. Gibbs 53*76acc41fSJustin T. Gibbs extern int gdtset; 54*76acc41fSJustin T. Gibbs 55*76acc41fSJustin T. Gibbs extern shared_info_t *HYPERVISOR_shared_info; 56*76acc41fSJustin T. Gibbs 57*76acc41fSJustin T. Gibbs enum xen_domain_type { 58*76acc41fSJustin T. Gibbs XEN_NATIVE, /* running on bare hardware */ 59*76acc41fSJustin T. Gibbs XEN_PV_DOMAIN, /* running in a PV domain */ 60*76acc41fSJustin T. Gibbs XEN_HVM_DOMAIN, /* running in a Xen hvm domain */ 61*76acc41fSJustin T. Gibbs }; 62*76acc41fSJustin T. Gibbs 63*76acc41fSJustin T. Gibbs extern enum xen_domain_type xen_domain_type; 64*76acc41fSJustin T. Gibbs 65*76acc41fSJustin T. Gibbs static inline int 66*76acc41fSJustin T. Gibbs xen_domain(void) 67*76acc41fSJustin T. Gibbs { 68*76acc41fSJustin T. Gibbs return (xen_domain_type != XEN_NATIVE); 69*76acc41fSJustin T. Gibbs } 70*76acc41fSJustin T. Gibbs 71*76acc41fSJustin T. Gibbs static inline int 72*76acc41fSJustin T. Gibbs xen_pv_domain(void) 73*76acc41fSJustin T. Gibbs { 74*76acc41fSJustin T. Gibbs return (xen_domain_type == XEN_PV_DOMAIN); 75*76acc41fSJustin T. Gibbs } 76*76acc41fSJustin T. Gibbs 77*76acc41fSJustin T. Gibbs static inline int 78*76acc41fSJustin T. Gibbs xen_hvm_domain(void) 79*76acc41fSJustin T. Gibbs { 80*76acc41fSJustin T. Gibbs return (xen_domain_type == XEN_HVM_DOMAIN); 81*76acc41fSJustin T. Gibbs } 82*76acc41fSJustin T. Gibbs 83*76acc41fSJustin T. Gibbs #ifndef xen_mb 84*76acc41fSJustin T. Gibbs #define xen_mb() mb() 85*76acc41fSJustin T. Gibbs #endif 86*76acc41fSJustin T. Gibbs #ifndef xen_rmb 87*76acc41fSJustin T. Gibbs #define xen_rmb() rmb() 88*76acc41fSJustin T. Gibbs #endif 89*76acc41fSJustin T. Gibbs #ifndef xen_wmb 90*76acc41fSJustin T. Gibbs #define xen_wmb() wmb() 91*76acc41fSJustin T. Gibbs #endif 92*76acc41fSJustin T. Gibbs 93*76acc41fSJustin T. Gibbs #endif /* !__ASSEMBLY__ */ 94*76acc41fSJustin T. Gibbs 95*76acc41fSJustin T. Gibbs #endif /* _XEN_XEN_OS_H_ */ 96