Line data Source code
1 0 : /* SPDX-License-Identifier: Apache-2.0 */
2 : /*
3 : * Copyright (c) 2023 EPAM Systems
4 : */
5 :
6 : #include <zephyr/kernel.h>
7 : #include <zephyr/xen/public/memory.h>
8 : #include <zephyr/xen/public/xen.h>
9 :
10 : /**
11 : * Add mapping for specified page frame in Xen domain physmap.
12 : *
13 : * @param domid domain id, where mapping will be added. For unprivileged should
14 : * be DOMID_SELF.
15 : * @param idx index into space being mapped.
16 : * @param space XENMAPSPACE_* mapping space identifier.
17 : * @param gpfn page frame where the source mapping page should appear.
18 : * @return zero on success, negative errno on error.
19 : */
20 1 : int xendom_add_to_physmap(int domid, unsigned long idx, unsigned int space,
21 : xen_pfn_t gpfn);
22 :
23 : /**
24 : * Add mapping for specified set of page frames to Xen domain physmap.
25 : *
26 : * @param domid domain id, where mapping will be added. For unprivileged
27 : * should be DOMID_SELF.
28 : * @param foreign_domid for gmfn_foreign - domain id, whose pages being mapped,
29 : * 0 for other.
30 : * @param space XENMAPSPACE_* mapping space identifier.
31 : * @param size number of page frames being mapped.
32 : * @param idxs array of indexes into space being mapped.
33 : * @param gpfns array of page frames where the mapping should appear.
34 : * @param errs array of per-index error codes.
35 : * @return zero on success, negative errno on error.
36 : */
37 1 : int xendom_add_to_physmap_batch(int domid, int foreign_domid,
38 : unsigned int space, unsigned int size,
39 : xen_ulong_t *idxs, xen_pfn_t *gpfns, int *errs);
40 :
41 : /**
42 : * Removes page frame from Xen domain physmap.
43 : *
44 : * @param domid domain id, whose page is going to be removed. For unprivileged
45 : * should be DOMID_SELF.
46 : * @param gpfn page frame number, that needs to be removed
47 : * @return zero on success, negative errno on error.
48 : */
49 1 : int xendom_remove_from_physmap(int domid, xen_pfn_t gpfn);
50 :
51 : /**
52 : * Populate specified Xen domain page frames with memory.
53 : *
54 : * @param domid domain id, where mapping will be added. For unprivileged
55 : * should be DOMID_SELF.
56 : * @param extent_order size/alignment of each extent (size is 2^extent_order),
57 : * e.g. 0 for 4K extents, 9 for 2M etc.
58 : * @param nr_extents number of page frames being populated.
59 : * @param mem_flags N/A, should be 0 for Arm.
60 : * @param extent_start page frame bases of extents to populate with memory.
61 : * @return number of populated frames success, negative errno on
62 : * error.
63 : */
64 1 : int xendom_populate_physmap(int domid, unsigned int extent_order,
65 : unsigned int nr_extents, unsigned int mem_flags,
66 : xen_pfn_t *extent_start);
|