]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/XenBusDxe/EventChannel.c
OvmfPkg: VirtioRngDxe: adapt feature negotiation to virtio-1.0
[mirror_edk2.git] / OvmfPkg / XenBusDxe / EventChannel.c
index c4076c49eaea38054d590e2bbc12c58c6c331cd2..6a36dca29911103071b92ab287137d501fd6f7d6 100644 (file)
@@ -16,7 +16,8 @@
 \r
 **/\r
 #include "EventChannel.h"\r
-#include "XenHypercall.h"\r
+\r
+#include <Library/XenHypercallLib.h>\r
 \r
 UINT32\r
 XenEventChannelNotify (\r
@@ -28,6 +29,56 @@ XenEventChannelNotify (
   evtchn_send_t Send;\r
 \r
   Send.port = Port;\r
-  ReturnCode = XenHypercallEventChannelOp (Dev, EVTCHNOP_send, &Send);\r
+  ReturnCode = XenHypercallEventChannelOp (EVTCHNOP_send, &Send);\r
+  return (UINT32)ReturnCode;\r
+}\r
+\r
+UINT32\r
+EFIAPI\r
+XenBusEventChannelAllocate (\r
+  IN  XENBUS_PROTOCOL *This,\r
+  IN  domid_t         DomainId,\r
+  OUT evtchn_port_t   *Port\r
+  )\r
+{\r
+  evtchn_alloc_unbound_t Parameter;\r
+  UINT32 ReturnCode;\r
+\r
+  Parameter.dom = DOMID_SELF;\r
+  Parameter.remote_dom = DomainId;\r
+  ReturnCode = (UINT32)XenHypercallEventChannelOp (\r
+                                   EVTCHNOP_alloc_unbound,\r
+                                   &Parameter);\r
+  if (ReturnCode != 0) {\r
+    DEBUG ((EFI_D_ERROR, "ERROR: alloc_unbound failed with rc=%d", ReturnCode));\r
+    return ReturnCode;\r
+  }\r
+  *Port = Parameter.port;\r
   return ReturnCode;\r
 }\r
+\r
+UINT32\r
+EFIAPI\r
+XenBusEventChannelNotify (\r
+  IN XENBUS_PROTOCOL *This,\r
+  IN evtchn_port_t   Port\r
+  )\r
+{\r
+  XENBUS_PRIVATE_DATA *Private;\r
+\r
+  Private = XENBUS_PRIVATE_DATA_FROM_THIS(This);\r
+  return XenEventChannelNotify (Private->Dev, Port);\r
+}\r
+\r
+UINT32\r
+EFIAPI\r
+XenBusEventChannelClose (\r
+  IN XENBUS_PROTOCOL *This,\r
+  IN evtchn_port_t   Port\r
+  )\r
+{\r
+  evtchn_close_t Close;\r
+\r
+  Close.port = Port;\r
+  return (UINT32)XenHypercallEventChannelOp (EVTCHNOP_close, &Close);\r
+}\r