60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
#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 */
|