#ifndef _XEN_XEN_OS_H_
#define _XEN_XEN_OS_H_
#define __XEN_INTERFACE_VERSION__ 0x00040d00
#define GRANT_REF_INVALID 0xffffffff
#ifdef LOCORE
#define __ASSEMBLY__
#endif
#include <contrib/xen/xen.h>
#ifndef __ASSEMBLY__
#include <sys/rman.h>
#include <xen/hvm.h>
#include <contrib/xen/event_channel.h>
extern void xen_setup_vcpu_info(void);
static inline vm_paddr_t
xen_get_xenstore_mfn(void)
{
return (hvm_get_parameter(HVM_PARAM_STORE_PFN));
}
static inline evtchn_port_t
xen_get_xenstore_evtchn(void)
{
return (hvm_get_parameter(HVM_PARAM_STORE_EVTCHN));
}
static inline vm_paddr_t
xen_get_console_mfn(void)
{
return (hvm_get_parameter(HVM_PARAM_CONSOLE_PFN));
}
static inline evtchn_port_t
xen_get_console_evtchn(void)
{
return (hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN));
}
extern shared_info_t *HYPERVISOR_shared_info;
extern bool xen_suspend_cancelled;
static inline bool
xen_domain(void)
{
return (vm_guest == VM_GUEST_XEN);
}
static inline bool
xen_pv_domain(void)
{
return (false);
}
static inline bool
xen_hvm_domain(void)
{
return (vm_guest == VM_GUEST_XEN);
}
static inline bool
xen_initial_domain(void)
{
return (xen_domain() && (hvm_start_flags & SIF_INITDOMAIN) != 0);
}
#endif
#include <machine/xen/xen-os.h>
#ifndef __ASSEMBLY__
#define NBPL (NBBY * sizeof(long))
static inline bool
xen_test_bit(int bit, volatile xen_ulong_t *addr)
{
unsigned long mask = 1UL << (bit % NBPL);
return !!(atomic_load_acq_xen_ulong(&addr[bit / NBPL]) & mask);
}
static inline void
xen_set_bit(int bit, volatile xen_ulong_t *addr)
{
atomic_set_xen_ulong(&addr[bit / NBPL], 1UL << (bit % NBPL));
}
static inline void
xen_clear_bit(int bit, volatile xen_ulong_t *addr)
{
atomic_clear_xen_ulong(&addr[bit / NBPL], 1UL << (bit % NBPL));
}
#undef NBPL
struct resource *xenmem_alloc(device_t dev, int *res_id, size_t size);
int xenmem_free(device_t dev, int res_id, struct resource *res);
void xc_printf(const char *, ...) __printflike(1, 2);
void xen_emergency_print(const char *str, size_t size);
int xen_arch_init_physmem(device_t dev, struct rman *mem);
#ifndef xen_mb
#define xen_mb() mb()
#endif
#ifndef xen_rmb
#define xen_rmb() rmb()
#endif
#ifndef xen_wmb
#define xen_wmb() wmb()
#endif
#endif
#endif