72 lines
1.9 KiB
C
72 lines
1.9 KiB
C
|
/*
|
||
|
* QEMU Xen backend support: Operations for true Xen
|
||
|
*
|
||
|
* Copyright © 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||
|
*
|
||
|
* Authors: David Woodhouse <dwmw2@infradead.org>
|
||
|
*
|
||
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||
|
* See the COPYING file in the top-level directory.
|
||
|
*/
|
||
|
|
||
|
#include "qemu/osdep.h"
|
||
|
#include "qapi/error.h"
|
||
|
|
||
|
#include "hw/xen/xen_backend_ops.h"
|
||
|
#include "hw/xen/xen_common.h"
|
||
|
|
||
|
/*
|
||
|
* If we have new enough libxenctrl then we do not want/need these compat
|
||
|
* interfaces, despite what the user supplied cflags might say. They
|
||
|
* must be undefined before including xenctrl.h
|
||
|
*/
|
||
|
#undef XC_WANT_COMPAT_EVTCHN_API
|
||
|
|
||
|
#include <xenctrl.h>
|
||
|
|
||
|
/*
|
||
|
* We don't support Xen prior to 4.2.0.
|
||
|
*/
|
||
|
|
||
|
/* Xen 4.2 through 4.6 */
|
||
|
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40701
|
||
|
|
||
|
typedef xc_evtchn xenevtchn_handle;
|
||
|
typedef evtchn_port_or_error_t xenevtchn_port_or_error_t;
|
||
|
|
||
|
#define xenevtchn_open(l, f) xc_evtchn_open(l, f);
|
||
|
#define xenevtchn_close(h) xc_evtchn_close(h)
|
||
|
#define xenevtchn_fd(h) xc_evtchn_fd(h)
|
||
|
#define xenevtchn_pending(h) xc_evtchn_pending(h)
|
||
|
#define xenevtchn_notify(h, p) xc_evtchn_notify(h, p)
|
||
|
#define xenevtchn_bind_interdomain(h, d, p) xc_evtchn_bind_interdomain(h, d, p)
|
||
|
#define xenevtchn_unmask(h, p) xc_evtchn_unmask(h, p)
|
||
|
#define xenevtchn_unbind(h, p) xc_evtchn_unbind(h, p)
|
||
|
|
||
|
#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40701 */
|
||
|
|
||
|
#include <xenevtchn.h>
|
||
|
|
||
|
#endif
|
||
|
|
||
|
static xenevtchn_handle *libxenevtchn_backend_open(void)
|
||
|
{
|
||
|
return xenevtchn_open(NULL, 0);
|
||
|
}
|
||
|
|
||
|
struct evtchn_backend_ops libxenevtchn_backend_ops = {
|
||
|
.open = libxenevtchn_backend_open,
|
||
|
.close = xenevtchn_close,
|
||
|
.bind_interdomain = xenevtchn_bind_interdomain,
|
||
|
.unbind = xenevtchn_unbind,
|
||
|
.get_fd = xenevtchn_fd,
|
||
|
.notify = xenevtchn_notify,
|
||
|
.unmask = xenevtchn_unmask,
|
||
|
.pending = xenevtchn_pending,
|
||
|
};
|
||
|
|
||
|
void setup_xen_backend_ops(void)
|
||
|
{
|
||
|
xen_evtchn_ops = &libxenevtchn_backend_ops;
|
||
|
}
|