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
,
46 if (ReturnCode
!= 0) {
47 DEBUG ((EFI_D_ERROR
, "ERROR: alloc_unbound failed with rc=%d", ReturnCode
));
50 *Port
= Parameter
.port
;
56 XenBusEventChannelNotify (
57 IN XENBUS_PROTOCOL
*This
,
61 XENBUS_PRIVATE_DATA
*Private
;
63 Private
= XENBUS_PRIVATE_DATA_FROM_THIS(This
);
64 return XenEventChannelNotify (Private
->Dev
, Port
);
69 XenBusEventChannelClose (
70 IN XENBUS_PROTOCOL
*This
,
77 return (UINT32
)XenHypercallEventChannelOp (EVTCHNOP_close
, &Close
);