/** @file Event Channel function implementation. Event channel are use to notify of an event that happened in a shared structure for example. Copyright (C) 2014, Citrix Ltd. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "EventChannel.h" #include UINT32 XenEventChannelNotify ( IN XENBUS_DEVICE *Dev, IN evtchn_port_t Port ) { INTN ReturnCode; evtchn_send_t Send; Send.port = Port; ReturnCode = XenHypercallEventChannelOp (EVTCHNOP_send, &Send); return (UINT32)ReturnCode; } UINT32 EFIAPI XenBusEventChannelAllocate ( IN XENBUS_PROTOCOL *This, IN domid_t DomainId, OUT evtchn_port_t *Port ) { evtchn_alloc_unbound_t Parameter; UINT32 ReturnCode; Parameter.dom = DOMID_SELF; Parameter.remote_dom = DomainId; ReturnCode = (UINT32)XenHypercallEventChannelOp ( EVTCHNOP_alloc_unbound, &Parameter ); if (ReturnCode != 0) { DEBUG ((DEBUG_ERROR, "ERROR: alloc_unbound failed with rc=%d", ReturnCode)); return ReturnCode; } *Port = Parameter.port; return ReturnCode; } UINT32 EFIAPI XenBusEventChannelNotify ( IN XENBUS_PROTOCOL *This, IN evtchn_port_t Port ) { XENBUS_PRIVATE_DATA *Private; Private = XENBUS_PRIVATE_DATA_FROM_THIS (This); return XenEventChannelNotify (Private->Dev, Port); } UINT32 EFIAPI XenBusEventChannelClose ( IN XENBUS_PROTOCOL *This, IN evtchn_port_t Port ) { evtchn_close_t Close; Close.port = Port; return (UINT32)XenHypercallEventChannelOp (EVTCHNOP_close, &Close); }