1 /* SPDX-License-Identifier: MIT */ 2 3 /****************************************************************************** 4 * memory.h 5 * 6 * Memory reservation and information. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy 9 * of this software and associated documentation files (the "Software"), to 10 * deal in the Software without restriction, including without limitation the 11 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 12 * sell copies of the Software, and to permit persons to whom the Software is 13 * furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in 16 * all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24 * DEALINGS IN THE SOFTWARE. 25 * 26 * Copyright (c) 2005, Keir Fraser <keir@xensource.com> 27 */ 28 29 #ifndef __XEN_PUBLIC_MEMORY_H__ 30 #define __XEN_PUBLIC_MEMORY_H__ 31 32 #include "xen.h" 33 34 #define XENMEM_populate_physmap 6 35 36 struct xen_memory_reservation { 37 38 /* 39 * XENMEM_increase_reservation: 40 * OUT: MFN (*not* GMFN) bases of extents that were allocated 41 * XENMEM_decrease_reservation: 42 * IN: GMFN bases of extents to free 43 * XENMEM_populate_physmap: 44 * IN: GPFN bases of extents to populate with memory 45 * OUT: GMFN bases of extents that were allocated 46 * (NB. This command also updates the mach_to_phys translation table) 47 * XENMEM_claim_pages: 48 * IN: must be zero 49 */ 50 XEN_GUEST_HANDLE(xen_pfn_t) extent_start; 51 52 /* Number of extents, and size/alignment of each (2^extent_order pages). */ 53 xen_ulong_t nr_extents; 54 unsigned int extent_order; 55 56 #if __XEN_INTERFACE_VERSION__ >= 0x00030209 57 /* XENMEMF flags. */ 58 unsigned int mem_flags; 59 #else 60 unsigned int address_bits; 61 #endif 62 63 /* 64 * Domain whose reservation is being changed. 65 * Unprivileged domains can specify only DOMID_SELF. 66 */ 67 domid_t domid; 68 }; 69 typedef struct xen_memory_reservation xen_memory_reservation_t; 70 DEFINE_XEN_GUEST_HANDLE(xen_memory_reservation_t); 71 72 /* A batched version of add_to_physmap. */ 73 #define XENMEM_add_to_physmap_batch 23 74 struct xen_add_to_physmap_batch { 75 /* IN */ 76 /* Which domain to change the mapping for. */ 77 domid_t domid; 78 uint16_t space; /* => enum phys_map_space */ 79 80 /* Number of pages to go through */ 81 uint16_t size; 82 83 #if __XEN_INTERFACE_VERSION__ < 0x00040700 84 domid_t foreign_domid; /* IFF gmfn_foreign. Should be 0 for other spaces. */ 85 #else 86 union xen_add_to_physmap_batch_extra { 87 domid_t foreign_domid; /* gmfn_foreign */ 88 uint16_t res0; /* All the other spaces. Should be 0 */ 89 } u; 90 #endif 91 92 /* Indexes into space being mapped. */ 93 XEN_GUEST_HANDLE(xen_ulong_t) idxs; 94 95 /* GPFN in domid where the source mapping page should appear. */ 96 XEN_GUEST_HANDLE(xen_pfn_t) gpfns; 97 98 /* OUT */ 99 /* Per index error code. */ 100 XEN_GUEST_HANDLE(int) errs; 101 }; 102 typedef struct xen_add_to_physmap_batch xen_add_to_physmap_batch_t; 103 DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_batch_t); 104 105 106 #define XENMAPSPACE_shared_info 0 /* shared info page */ 107 #define XENMAPSPACE_grant_table 1 /* grant table page */ 108 #define XENMAPSPACE_gmfn 2 /* GMFN */ 109 110 /* GMFN range, XENMEM_add_to_physmap only.*/ 111 #define XENMAPSPACE_gmfn_range 3 112 113 /* GMFN from another dom, XENMEM_add_to_physmap_batch only. */ 114 #define XENMAPSPACE_gmfn_foreign 4 115 116 /* 117 * Device mmio region ARM only; the region is mapped in Stage-2 using the 118 * Normal Memory Inner/Outer Write-Back Cacheable memory attribute. 119 */ 120 #define XENMAPSPACE_dev_mmio 5 121 122 /* 123 * Sets the GPFN at which a particular page appears in the specified guest's 124 * physical address space (translated guests only). 125 * arg == addr of xen_add_to_physmap_t. 126 */ 127 #define XENMEM_add_to_physmap 7 128 struct xen_add_to_physmap { 129 /* Which domain to change the mapping for. */ 130 domid_t domid; 131 132 /* Number of pages to go through for gmfn_range */ 133 uint16_t size; 134 135 unsigned int space; /* => enum phys_map_space */ 136 137 #define XENMAPIDX_grant_table_status 0x80000000 138 139 /* Index into space being mapped. */ 140 xen_ulong_t idx; 141 142 /* GPFN in domid where the source mapping page should appear. */ 143 xen_pfn_t gpfn; 144 }; 145 typedef struct xen_add_to_physmap xen_add_to_physmap_t; 146 DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_t); 147 148 /* 149 * Unmaps the page appearing at a particular GPFN from the specified guest's 150 * physical address space (translated guests only). 151 * arg == addr of xen_remove_from_physmap_t. 152 */ 153 #define XENMEM_remove_from_physmap 15 154 struct xen_remove_from_physmap { 155 /* Which domain to change the mapping for. */ 156 domid_t domid; 157 158 /* GPFN of the current mapping of the page. */ 159 xen_pfn_t gpfn; 160 }; 161 typedef struct xen_remove_from_physmap xen_remove_from_physmap_t; 162 DEFINE_XEN_GUEST_HANDLE(xen_remove_from_physmap_t); 163 164 #endif /* __XEN_PUBLIC_MEMORY_H__ */ 165