| /* |
| * QEMU Xen emulation: Event channel support |
| * |
| * 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. |
| */ |
| |
| #ifndef QEMU_XEN_EVTCHN_H |
| #define QEMU_XEN_EVTCHN_H |
| |
| #include "hw/sysbus.h" |
| |
| typedef uint32_t evtchn_port_t; |
| |
| void xen_evtchn_create(void); |
| int xen_evtchn_soft_reset(void); |
| int xen_evtchn_set_callback_param(uint64_t param); |
| void xen_evtchn_connect_gsis(qemu_irq *system_gsis); |
| void xen_evtchn_set_callback_level(int level); |
| |
| int xen_evtchn_set_port(uint16_t port); |
| |
| /* |
| * These functions mirror the libxenevtchn library API, providing the QEMU |
| * backend side of "interdomain" event channels. |
| */ |
| struct xenevtchn_handle; |
| struct xenevtchn_handle *xen_be_evtchn_open(void); |
| int xen_be_evtchn_bind_interdomain(struct xenevtchn_handle *xc, uint32_t domid, |
| evtchn_port_t guest_port); |
| int xen_be_evtchn_unbind(struct xenevtchn_handle *xc, evtchn_port_t port); |
| int xen_be_evtchn_close(struct xenevtchn_handle *xc); |
| int xen_be_evtchn_fd(struct xenevtchn_handle *xc); |
| int xen_be_evtchn_notify(struct xenevtchn_handle *xc, evtchn_port_t port); |
| int xen_be_evtchn_unmask(struct xenevtchn_handle *xc, evtchn_port_t port); |
| int xen_be_evtchn_pending(struct xenevtchn_handle *xc); |
| /* Apart from this which is a local addition */ |
| int xen_be_evtchn_get_guest_port(struct xenevtchn_handle *xc); |
| |
| struct evtchn_status; |
| struct evtchn_close; |
| struct evtchn_unmask; |
| struct evtchn_bind_virq; |
| struct evtchn_bind_ipi; |
| struct evtchn_send; |
| struct evtchn_alloc_unbound; |
| struct evtchn_bind_interdomain; |
| struct evtchn_bind_vcpu; |
| struct evtchn_reset; |
| int xen_evtchn_status_op(struct evtchn_status *status); |
| int xen_evtchn_close_op(struct evtchn_close *close); |
| int xen_evtchn_unmask_op(struct evtchn_unmask *unmask); |
| int xen_evtchn_bind_virq_op(struct evtchn_bind_virq *virq); |
| int xen_evtchn_bind_ipi_op(struct evtchn_bind_ipi *ipi); |
| int xen_evtchn_send_op(struct evtchn_send *send); |
| int xen_evtchn_alloc_unbound_op(struct evtchn_alloc_unbound *alloc); |
| int xen_evtchn_bind_interdomain_op(struct evtchn_bind_interdomain *interdomain); |
| int xen_evtchn_bind_vcpu_op(struct evtchn_bind_vcpu *vcpu); |
| int xen_evtchn_reset_op(struct evtchn_reset *reset); |
| |
| #endif /* QEMU_XEN_EVTCHN_H */ |