mirror of
https://github.com/acidanthera/audk.git
synced 2025-08-18 16:18:12 +02:00
Add a new function to allow to make an hypercall to shutdown the machine. This import "sched.h" public header from Xen Project's repo. Some changes have been made to be closer to EDK2's coding style. Add the entire OvmfPkg/Include/IndustryStandard/Xen/ directory to LicenseCheck ignore. All the existing header files, as well as the new sched.h, are MIT licensed. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
104 lines
2.0 KiB
C
104 lines
2.0 KiB
C
/** @file
|
|
Functions to make Xen hypercalls.
|
|
|
|
Copyright (C) 2014, Citrix Ltd.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#include <PiDxe.h>
|
|
|
|
#include <IndustryStandard/Xen/hvm/params.h>
|
|
#include <IndustryStandard/Xen/memory.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/XenHypercallLib.h>
|
|
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
XenHypercallLibConstruct (
|
|
VOID
|
|
)
|
|
{
|
|
XenHypercallLibInit ();
|
|
//
|
|
// We don't fail library construction, since that has catastrophic
|
|
// consequences for client modules (whereas those modules may easily be
|
|
// running on a non-Xen platform). Instead, XenHypercallIsAvailable()
|
|
// will return FALSE.
|
|
//
|
|
return RETURN_SUCCESS;
|
|
}
|
|
|
|
UINT64
|
|
EFIAPI
|
|
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 ((
|
|
DEBUG_ERROR,
|
|
"XenHypercall: Error %Ld trying to get HVM parameter %d\n",
|
|
(INT64)Error,
|
|
Index
|
|
));
|
|
return 0;
|
|
}
|
|
|
|
return Parameter.value;
|
|
}
|
|
|
|
INTN
|
|
EFIAPI
|
|
XenHypercallMemoryOp (
|
|
IN UINTN Operation,
|
|
IN OUT VOID *Arguments
|
|
)
|
|
{
|
|
return XenHypercall2 (
|
|
__HYPERVISOR_memory_op,
|
|
Operation,
|
|
(INTN)Arguments
|
|
);
|
|
}
|
|
|
|
INTN
|
|
EFIAPI
|
|
XenHypercallEventChannelOp (
|
|
IN INTN Operation,
|
|
IN OUT VOID *Arguments
|
|
)
|
|
{
|
|
return XenHypercall2 (
|
|
__HYPERVISOR_event_channel_op,
|
|
Operation,
|
|
(INTN)Arguments
|
|
);
|
|
}
|
|
|
|
INTN
|
|
EFIAPI
|
|
XenHypercallSchedOp (
|
|
IN INTN Operation,
|
|
IN OUT VOID *Arguments
|
|
)
|
|
{
|
|
return XenHypercall2 (
|
|
__HYPERVISOR_sched_op,
|
|
Operation,
|
|
(INTN)Arguments
|
|
);
|
|
}
|