Ovmf/Xen: move XenBusDxe hypercall code to separate library
This moves all of the Xen hypercall code that was private to XenBusDxe to a new library class XenHypercallLib. This will allow us to reimplement it for ARM, and to export the Xen hypercall functionality to other parts of the code, such as a Xen console SerialPortLib driver. Contributed-under: TianoCore Contribution Agreement 1.0 Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Laszlo Ersek <lersek@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16970 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
63
OvmfPkg/Library/XenHypercallLib/XenHypercall.c
Normal file
63
OvmfPkg/Library/XenHypercallLib/XenHypercall.c
Normal file
@@ -0,0 +1,63 @@
|
||||
/** @file
|
||||
Functions to make Xen hypercalls.
|
||||
|
||||
Copyright (C) 2014, Citrix Ltd.
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <PiDxe.h>
|
||||
|
||||
#include <IndustryStandard/Xen/hvm/params.h>
|
||||
#include <IndustryStandard/Xen/memory.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/XenHypercallLib.h>
|
||||
|
||||
UINT64
|
||||
XenHypercallHvmGetParam (
|
||||
IN UINT32 Index
|
||||
)
|
||||
{
|
||||
xen_hvm_param_t Parameter;
|
||||
INTN Error;
|
||||
|
||||
Parameter.domid = DOMID_SELF;
|
||||
Parameter.index = Index;
|
||||
Error = XenHypercall2 (__HYPERVISOR_hvm_op,
|
||||
HVMOP_get_param, (INTN) &Parameter);
|
||||
if (Error != 0) {
|
||||
DEBUG ((EFI_D_ERROR,
|
||||
"XenHypercall: Error %d trying to get HVM parameter %d\n",
|
||||
Error, Index));
|
||||
return 0;
|
||||
}
|
||||
return Parameter.value;
|
||||
}
|
||||
|
||||
INTN
|
||||
XenHypercallMemoryOp (
|
||||
IN UINTN Operation,
|
||||
IN OUT VOID *Arguments
|
||||
)
|
||||
{
|
||||
return XenHypercall2 (__HYPERVISOR_memory_op,
|
||||
Operation, (INTN) Arguments);
|
||||
}
|
||||
|
||||
INTN
|
||||
XenHypercallEventChannelOp (
|
||||
IN INTN Operation,
|
||||
IN OUT VOID *Arguments
|
||||
)
|
||||
{
|
||||
return XenHypercall2 (__HYPERVISOR_event_channel_op,
|
||||
Operation, (INTN) Arguments);
|
||||
}
|
Reference in New Issue
Block a user