]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/XenBusDxe/EventChannel.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / XenBusDxe / EventChannel.c
CommitLineData
f1259bba
AP
1/** @file\r
2 Event Channel function implementation.\r
3\r
8c0b0b34 4 Event channel are use to notify of an event that happened in a shared\r
f1259bba
AP
5 structure for example.\r
6\r
7 Copyright (C) 2014, Citrix Ltd.\r
8\r
b26f0cf9 9 SPDX-License-Identifier: BSD-2-Clause-Patent\r
f1259bba
AP
10\r
11**/\r
12#include "EventChannel.h"\r
cd8ff8fd
AB
13\r
14#include <Library/XenHypercallLib.h>\r
f1259bba
AP
15\r
16UINT32\r
17XenEventChannelNotify (\r
ac0a286f
MK
18 IN XENBUS_DEVICE *Dev,\r
19 IN evtchn_port_t Port\r
f1259bba
AP
20 )\r
21{\r
ac0a286f
MK
22 INTN ReturnCode;\r
23 evtchn_send_t Send;\r
f1259bba 24\r
ac0a286f 25 Send.port = Port;\r
bbc3758a 26 ReturnCode = XenHypercallEventChannelOp (EVTCHNOP_send, &Send);\r
017a4866 27 return (UINT32)ReturnCode;\r
f1259bba 28}\r
e86895d9
AP
29\r
30UINT32\r
31EFIAPI\r
32XenBusEventChannelAllocate (\r
ac0a286f
MK
33 IN XENBUS_PROTOCOL *This,\r
34 IN domid_t DomainId,\r
35 OUT evtchn_port_t *Port\r
e86895d9
AP
36 )\r
37{\r
ac0a286f
MK
38 evtchn_alloc_unbound_t Parameter;\r
39 UINT32 ReturnCode;\r
e86895d9 40\r
ac0a286f 41 Parameter.dom = DOMID_SELF;\r
e86895d9 42 Parameter.remote_dom = DomainId;\r
ac0a286f 43 ReturnCode = (UINT32)XenHypercallEventChannelOp (\r
e86895d9 44 EVTCHNOP_alloc_unbound,\r
ac0a286f
MK
45 &Parameter\r
46 );\r
e86895d9 47 if (ReturnCode != 0) {\r
70d5086c 48 DEBUG ((DEBUG_ERROR, "ERROR: alloc_unbound failed with rc=%d", ReturnCode));\r
e86895d9
AP
49 return ReturnCode;\r
50 }\r
ac0a286f 51\r
e86895d9
AP
52 *Port = Parameter.port;\r
53 return ReturnCode;\r
54}\r
55\r
56UINT32\r
57EFIAPI\r
58XenBusEventChannelNotify (\r
ac0a286f
MK
59 IN XENBUS_PROTOCOL *This,\r
60 IN evtchn_port_t Port\r
e86895d9
AP
61 )\r
62{\r
ac0a286f 63 XENBUS_PRIVATE_DATA *Private;\r
e86895d9 64\r
ac0a286f 65 Private = XENBUS_PRIVATE_DATA_FROM_THIS (This);\r
e86895d9
AP
66 return XenEventChannelNotify (Private->Dev, Port);\r
67}\r
68\r
69UINT32\r
70EFIAPI\r
71XenBusEventChannelClose (\r
ac0a286f
MK
72 IN XENBUS_PROTOCOL *This,\r
73 IN evtchn_port_t Port\r
e86895d9
AP
74 )\r
75{\r
ac0a286f 76 evtchn_close_t Close;\r
e86895d9 77\r
e86895d9 78 Close.port = Port;\r
bbc3758a 79 return (UINT32)XenHypercallEventChannelOp (EVTCHNOP_close, &Close);\r
e86895d9 80}\r