69 lines
1.6 KiB
C
69 lines
1.6 KiB
C
/* SPDX-License-Identifier: Apache-2.0 */
|
|
/*
|
|
* Copyright (c) 2023 EPAM Systems
|
|
*/
|
|
|
|
#include <zephyr/arch/arm64/hypercall.h>
|
|
#include <zephyr/xen/generic.h>
|
|
#include <zephyr/xen/public/memory.h>
|
|
#include <zephyr/xen/public/xen.h>
|
|
|
|
#include <zephyr/kernel.h>
|
|
|
|
int xendom_add_to_physmap(int domid, unsigned long idx,
|
|
unsigned int space, xen_pfn_t gpfn)
|
|
{
|
|
struct xen_add_to_physmap xatp = {
|
|
.domid = domid,
|
|
.idx = idx,
|
|
.space = space,
|
|
.gpfn = gpfn,
|
|
};
|
|
|
|
return HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
|
|
}
|
|
|
|
int xendom_add_to_physmap_batch(int domid, int foreign_domid,
|
|
unsigned int space, unsigned int size,
|
|
xen_ulong_t *idxs, xen_pfn_t *gpfns, int *errs)
|
|
{
|
|
struct xen_add_to_physmap_batch xatpb = {
|
|
.domid = domid,
|
|
.u.foreign_domid = foreign_domid,
|
|
.space = space,
|
|
.size = size,
|
|
};
|
|
|
|
set_xen_guest_handle(xatpb.gpfns, gpfns);
|
|
set_xen_guest_handle(xatpb.idxs, idxs);
|
|
set_xen_guest_handle(xatpb.errs, errs);
|
|
|
|
return HYPERVISOR_memory_op(XENMEM_add_to_physmap_batch, &xatpb);
|
|
}
|
|
|
|
int xendom_remove_from_physmap(int domid, xen_pfn_t gpfn)
|
|
{
|
|
struct xen_remove_from_physmap xrfp = {
|
|
.domid = domid,
|
|
.gpfn = gpfn,
|
|
};
|
|
|
|
return HYPERVISOR_memory_op(XENMEM_remove_from_physmap, &xrfp);
|
|
}
|
|
|
|
int xendom_populate_physmap(int domid, unsigned int extent_order,
|
|
unsigned int nr_extents, unsigned int mem_flags,
|
|
xen_pfn_t *extent_start)
|
|
{
|
|
struct xen_memory_reservation reservation = {
|
|
.domid = domid,
|
|
.extent_order = extent_order,
|
|
.nr_extents = nr_extents,
|
|
.mem_flags = mem_flags,
|
|
};
|
|
|
|
set_xen_guest_handle(reservation.extent_start, extent_start);
|
|
|
|
return HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
|
|
}
|