blob: f0bd3465ef5913dd23231f4c6b5c0a6f670f0ae5 [file] [log] [blame]
#ifndef _IPXE_XENEVENT_H
#define _IPXE_XENEVENT_H
/** @file
*
* Xen events
*
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <ipxe/xen.h>
#include <xen/event_channel.h>
/**
* Close event channel
*
* @v xen Xen hypervisor
* @v close Event descriptor
* @ret xenrc Xen status code
*/
static inline __attribute__ (( always_inline )) int
xenevent_close ( struct xen_hypervisor *xen, struct evtchn_close *close ) {
return xen_hypercall_2 ( xen, __HYPERVISOR_event_channel_op,
EVTCHNOP_close, virt_to_phys ( close ) );
}
/**
* Send event
*
* @v xen Xen hypervisor
* @v send Event descriptor
* @ret xenrc Xen status code
*/
static inline __attribute__ (( always_inline )) int
xenevent_send ( struct xen_hypervisor *xen, struct evtchn_send *send ) {
return xen_hypercall_2 ( xen, __HYPERVISOR_event_channel_op,
EVTCHNOP_send, virt_to_phys ( send ) );
}
/**
* Allocate an unbound event channel
*
* @v xen Xen hypervisor
* @v alloc_unbound Event descriptor
* @ret xenrc Xen status code
*/
static inline __attribute__ (( always_inline )) int
xenevent_alloc_unbound ( struct xen_hypervisor *xen,
struct evtchn_alloc_unbound *alloc_unbound ) {
return xen_hypercall_2 ( xen, __HYPERVISOR_event_channel_op,
EVTCHNOP_alloc_unbound,
virt_to_phys ( alloc_unbound ) );
}
#endif /* _IPXE_XENEVENT_H */