1 /** @file
2 Functions to make Xen hypercalls.
3
4 Copyright (C) 2014, Citrix Ltd.
5
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #include <PiDxe.h>
17
18 #include <IndustryStandard/Xen/hvm/params.h>
19 #include <IndustryStandard/Xen/memory.h>
20
21 #include <Library/DebugLib.h>
22 #include <Library/XenHypercallLib.h>
23
24 UINT64
25 EFIAPI
XenHypercallHvmGetParam(IN UINT32 Index)26 XenHypercallHvmGetParam (
27 IN UINT32 Index
28 )
29 {
30 xen_hvm_param_t Parameter;
31 INTN Error;
32
33 Parameter.domid = DOMID_SELF;
34 Parameter.index = Index;
35 Error = XenHypercall2 (__HYPERVISOR_hvm_op,
36 HVMOP_get_param, (INTN) &Parameter);
37 if (Error != 0) {
38 DEBUG ((EFI_D_ERROR,
39 "XenHypercall: Error %Ld trying to get HVM parameter %d\n",
40 (INT64)Error, Index));
41 return 0;
42 }
43 return Parameter.value;
44 }
45
46 INTN
47 EFIAPI
XenHypercallMemoryOp(IN UINTN Operation,IN OUT VOID * Arguments)48 XenHypercallMemoryOp (
49 IN UINTN Operation,
50 IN OUT VOID *Arguments
51 )
52 {
53 return XenHypercall2 (__HYPERVISOR_memory_op,
54 Operation, (INTN) Arguments);
55 }
56
57 INTN
58 EFIAPI
XenHypercallEventChannelOp(IN INTN Operation,IN OUT VOID * Arguments)59 XenHypercallEventChannelOp (
60 IN INTN Operation,
61 IN OUT VOID *Arguments
62 )
63 {
64 return XenHypercall2 (__HYPERVISOR_event_channel_op,
65 Operation, (INTN) Arguments);
66 }
67