Line data Source code
1 0 : /* 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 0 : #define XENMEM_populate_physmap 6 35 : 36 0 : 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 0 : XEN_GUEST_HANDLE(xen_pfn_t) extent_start; 51 : 52 : /* Number of extents, and size/alignment of each (2^extent_order pages). */ 53 0 : xen_ulong_t nr_extents; 54 0 : unsigned int extent_order; 55 : 56 : #if CONFIG_XEN_INTERFACE_VERSION >= 0x00030209 57 : /* XENMEMF flags. */ 58 : unsigned int mem_flags; 59 : #else 60 0 : 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 0 : domid_t domid; 68 : }; 69 0 : typedef struct xen_memory_reservation xen_memory_reservation_t; 70 0 : DEFINE_XEN_GUEST_HANDLE(xen_memory_reservation_t); 71 : 72 : /* A batched version of add_to_physmap. */ 73 0 : #define XENMEM_add_to_physmap_batch 23 74 0 : struct xen_add_to_physmap_batch { 75 : /* IN */ 76 : /* Which domain to change the mapping for. */ 77 0 : domid_t domid; 78 0 : uint16_t space; /* => enum phys_map_space */ 79 : 80 : /* Number of pages to go through */ 81 0 : uint16_t size; 82 : 83 : #if CONFIG_XEN_INTERFACE_VERSION < 0x00040700 84 0 : 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 0 : XEN_GUEST_HANDLE(xen_ulong_t) idxs; 94 : 95 : /* GPFN in domid where the source mapping page should appear. */ 96 0 : XEN_GUEST_HANDLE(xen_pfn_t) gpfns; 97 : 98 : /* OUT */ 99 : /* Per index error code. */ 100 0 : XEN_GUEST_HANDLE(int) errs; 101 : }; 102 0 : typedef struct xen_add_to_physmap_batch xen_add_to_physmap_batch_t; 103 0 : DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_batch_t); 104 : 105 : 106 0 : #define XENMAPSPACE_shared_info 0 /* shared info page */ 107 0 : #define XENMAPSPACE_grant_table 1 /* grant table page */ 108 0 : #define XENMAPSPACE_gmfn 2 /* GMFN */ 109 : 110 : /* GMFN range, XENMEM_add_to_physmap only.*/ 111 0 : #define XENMAPSPACE_gmfn_range 3 112 : 113 : /* GMFN from another dom, XENMEM_add_to_physmap_batch only. */ 114 0 : #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 0 : #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 0 : #define XENMEM_add_to_physmap 7 128 0 : struct xen_add_to_physmap { 129 : /* Which domain to change the mapping for. */ 130 0 : domid_t domid; 131 : 132 : /* Number of pages to go through for gmfn_range */ 133 0 : uint16_t size; 134 : 135 0 : unsigned int space; /* => enum phys_map_space */ 136 : 137 0 : #define XENMAPIDX_grant_table_status 0x80000000 138 : 139 : /* Index into space being mapped. */ 140 0 : xen_ulong_t idx; 141 : 142 : /* GPFN in domid where the source mapping page should appear. */ 143 0 : xen_pfn_t gpfn; 144 : }; 145 0 : typedef struct xen_add_to_physmap xen_add_to_physmap_t; 146 0 : 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 0 : #define XENMEM_remove_from_physmap 15 154 0 : struct xen_remove_from_physmap { 155 : /* Which domain to change the mapping for. */ 156 0 : domid_t domid; 157 : 158 : /* GPFN of the current mapping of the page. */ 159 0 : xen_pfn_t gpfn; 160 : }; 161 0 : typedef struct xen_remove_from_physmap xen_remove_from_physmap_t; 162 0 : DEFINE_XEN_GUEST_HANDLE(xen_remove_from_physmap_t); 163 : 164 : #endif /* __XEN_PUBLIC_MEMORY_H__ */