2 Event Channel function implementation.
4 Event channel are use to notify of an event that happened in a shared
7 Copyright (C) 2014, Citrix Ltd.
9 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #include "EventChannel.h"
14 #include <Library/XenHypercallLib.h>
17 XenEventChannelNotify (
18 IN XENBUS_DEVICE
*Dev
,
26 ReturnCode
= XenHypercallEventChannelOp (EVTCHNOP_send
, &Send
);
27 return (UINT32
)ReturnCode
;
32 XenBusEventChannelAllocate (
33 IN XENBUS_PROTOCOL
*This
,
35 OUT evtchn_port_t
*Port
38 evtchn_alloc_unbound_t Parameter
;
41 Parameter
.dom
= DOMID_SELF
;
42 Parameter
.remote_dom
= DomainId
;
43 ReturnCode
= (UINT32
)XenHypercallEventChannelOp (
44 EVTCHNOP_alloc_unbound
,
47 if (ReturnCode
!= 0) {
48 DEBUG ((DEBUG_ERROR
, "ERROR: alloc_unbound failed with rc=%d", ReturnCode
));
52 *Port
= Parameter
.port
;
58 XenBusEventChannelNotify (
59 IN XENBUS_PROTOCOL
*This
,
63 XENBUS_PRIVATE_DATA
*Private
;
65 Private
= XENBUS_PRIVATE_DATA_FROM_THIS (This
);
66 return XenEventChannelNotify (Private
->Dev
, Port
);
71 XenBusEventChannelClose (
72 IN XENBUS_PROTOCOL
*This
,
79 return (UINT32
)XenHypercallEventChannelOp (EVTCHNOP_close
, &Close
);