]>
git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c
2 Xen Hypercall Library implementation for Intel architecture
4 Copyright (c) 2014, Linaro Ltd. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include <Library/HobLib.h>
17 #include <Library/DebugLib.h>
18 #include <Guid/XenInfo.h>
20 STATIC VOID
*HyperPage
;
23 // Interface exposed by the ASM implementation of the core hypercall
28 IN VOID
*HypercallAddr
,
34 Library constructor: retrieves the Hyperpage address
35 from the gEfiXenInfoGuid HOB
44 EFI_HOB_GUID_TYPE
*GuidHob
;
45 EFI_XEN_INFO
*XenInfo
;
47 GuidHob
= GetFirstGuidHob (&gEfiXenInfoGuid
);
48 if (GuidHob
== NULL
) {
49 return RETURN_NOT_FOUND
;
51 XenInfo
= (EFI_XEN_INFO
*) GET_GUID_HOB_DATA (GuidHob
);
52 HyperPage
= XenInfo
->HyperPages
;
53 return RETURN_SUCCESS
;
57 This function will put the two arguments in the right place (registers) and
58 invoke the hypercall identified by HypercallID.
60 @param HypercallID The symbolic ID of the hypercall to be invoked
61 @param Arg1 First argument.
62 @param Arg2 Second argument.
64 @return Return 0 if success otherwise it return an errno.
74 ASSERT (HyperPage
!= NULL
);
76 return __XenHypercall2 ((UINT8
*)HyperPage
+ HypercallID
* 32, Arg1
, Arg2
);