1<?xml version="1.0" ?> 2<!-- 3 Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 4 5 SPDX-License-Identifier: BSD-2-Clause 6--> 7 8<api name="ObjectApiAarch64" label_prefix="aarch64_"> 9 <struct name="seL4_UserContext"> 10 <member name="pc"/> 11 <member name="sp"/> 12 <member name="spsr"/> 13 <member name="x0"/> 14 <member name="x1"/> 15 <member name="x2"/> 16 <member name="x3"/> 17 <member name="x4"/> 18 <member name="x5"/> 19 <member name="x6"/> 20 <member name="x7"/> 21 <member name="x8"/> 22 <member name="x16"/> 23 <member name="x17"/> 24 <member name="x18"/> 25 <member name="x29"/> 26 <member name="x30"/> 27 <member name="x9"/> 28 <member name="x10"/> 29 <member name="x11"/> 30 <member name="x12"/> 31 <member name="x13"/> 32 <member name="x14"/> 33 <member name="x15"/> 34 <member name="x19"/> 35 <member name="x20"/> 36 <member name="x21"/> 37 <member name="x22"/> 38 <member name="x23"/> 39 <member name="x24"/> 40 <member name="x25"/> 41 <member name="x26"/> 42 <member name="x27"/> 43 <member name="x28"/> 44 <member name="tpidr_el0"/> 45 <member name="tpidrro_el0"/> 46 </struct> 47 <interface name="seL4_ARM_VSpace" manual_name="Page Global Directory" 48 cap_description="Capability to the top level translation table being operated on."> 49 <method id="ARMVSpaceClean_Data" name="Clean_Data" manual_label="vspace_clean" 50 manual_name="Clean Data"> 51 <brief> 52 Clean cached pages within a top level translation table 53 </brief> 54 <description> 55 <docref>See <autoref label="ch:vspace"/>.</docref> 56 </description> 57 <param dir="in" name="start" type="seL4_Word" 58 description="Start address"/> 59 <param dir="in" name="end" type="seL4_Word" 60 description="End address"/> 61 <error name="seL4_FailedLookup"> 62 <description> 63 The <texttt text="_service"/> is not assigned to an ASID pool. 64 </description> 65 </error> 66 <error name="seL4_IllegalOperation"> 67 <description> 68 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 69 Or, <texttt text="end"/> is in the kernel virtual address range. 70 </description> 71 </error> 72 <error name="seL4_InvalidArgument"> 73 <description> 74 The <texttt text="start"/> is greater than or equal to <texttt text="end"/>. 75 </description> 76 </error> 77 <error name="seL4_InvalidCapability"> 78 <description> 79 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 80 Or, <texttt text="_service"/> is not assigned to an ASID pool. 81 </description> 82 </error> 83 <error name="seL4_RangeError"> 84 <description> 85 The specified range crosses a page boundary. 86 </description> 87 </error> 88 </method> 89 <method id="ARMVSpaceInvalidate_Data" name="Invalidate_Data" 90 manual_name="Invalidate Data" manual_label="vspace_invalidate"> 91 <brief> 92 Invalidate cached pages within a top level translation table 93 </brief> 94 <description> 95 <docref>See <autoref label="ch:vspace"/>.</docref> 96 </description> 97 <param dir="in" name="start" type="seL4_Word" 98 description="Start address"/> 99 <param dir="in" name="end" type="seL4_Word" 100 description="End address"/> 101 <error name="seL4_FailedLookup"> 102 <description> 103 The <texttt text="_service"/> is not assigned to an ASID pool. 104 </description> 105 </error> 106 <error name="seL4_IllegalOperation"> 107 <description> 108 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 109 Or, <texttt text="end"/> is in the kernel virtual address range. 110 </description> 111 </error> 112 <error name="seL4_InvalidArgument"> 113 <description> 114 The <texttt text="start"/> is greater than or equal to <texttt text="end"/>. 115 </description> 116 </error> 117 <error name="seL4_InvalidCapability"> 118 <description> 119 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 120 Or, <texttt text="_service"/> is not assigned to an ASID pool. 121 </description> 122 </error> 123 <error name="seL4_RangeError"> 124 <description> 125 The specified range crosses a page boundary. 126 </description> 127 </error> 128 </method> 129 <method id="ARMVSpaceCleanInvalidate_Data" name="CleanInvalidate_Data" 130 manual_name="Clean and Invalidate Data" manual_label="vspace_clean_invalidate"> 131 <brief> 132 Clean and invalidate cached pages within a top level translation table 133 </brief> 134 <description> 135 <docref>See <autoref label="ch:vspace"/>.</docref> 136 </description> 137 <param dir="in" name="start" type="seL4_Word" 138 description="Start address"/> 139 <param dir="in" name="end" type="seL4_Word" 140 description="End address"/> 141 <error name="seL4_FailedLookup"> 142 <description> 143 The <texttt text="_service"/> is not assigned to an ASID pool. 144 </description> 145 </error> 146 <error name="seL4_IllegalOperation"> 147 <description> 148 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 149 Or, <texttt text="end"/> is in the kernel virtual address range. 150 </description> 151 </error> 152 <error name="seL4_InvalidArgument"> 153 <description> 154 The <texttt text="start"/> is greater than or equal to <texttt text="end"/>. 155 </description> 156 </error> 157 <error name="seL4_InvalidCapability"> 158 <description> 159 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 160 Or, <texttt text="_service"/> is not assigned to an ASID pool. 161 </description> 162 </error> 163 <error name="seL4_RangeError"> 164 <description> 165 The specified range crosses a page boundary. 166 </description> 167 </error> 168 </method> 169 <method id="ARMVSpaceUnify_Instruction" name="Unify_Instruction" 170 manual_name="Unify Instruction" manual_label="vspace_unify_instruction"> 171 <brief> 172 Clean and invalidate cached instruction pages to point of unification 173 </brief> 174 <description> 175 <docref>See <autoref label="ch:vspace"/>.</docref> 176 </description> 177 <param dir="in" name="start" type="seL4_Word" 178 description="Start address"/> 179 <param dir="in" name="end" type="seL4_Word" 180 description="End address"/> 181 <error name="seL4_FailedLookup"> 182 <description> 183 The <texttt text="_service"/> is not assigned to an ASID pool. 184 </description> 185 </error> 186 <error name="seL4_IllegalOperation"> 187 <description> 188 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 189 Or, <texttt text="end"/> is in the kernel virtual address range. 190 </description> 191 </error> 192 <error name="seL4_InvalidArgument"> 193 <description> 194 The <texttt text="start"/> is greater than or equal to <texttt text="end"/>. 195 </description> 196 </error> 197 <error name="seL4_InvalidCapability"> 198 <description> 199 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 200 Or, <texttt text="_service"/> is not assigned to an ASID pool. 201 </description> 202 </error> 203 <error name="seL4_RangeError"> 204 <description> 205 The specified range crosses a page boundary. 206 </description> 207 </error> 208 </method> 209 </interface> 210 <interface name="seL4_ARM_PageUpperDirectory" manual_name="Page Upper Directory" 211 cap_description="Capability to the upper page directory being operated on."> 212 <method id="ARMPageUpperDirectoryMap" name="Map" condition="!(defined CONFIG_ARM_HYPERVISOR_SUPPORT && defined CONFIG_ARM_PA_SIZE_BITS_40)"> 213 <brief> 214 Map an upper page directory 215 </brief> 216 <description> 217 Map an upper page directory (level 1) to a top level translation table (level 0). 218 </description> 219 <param dir="in" name="vspace" type="seL4_CPtr" 220 description="Top level translation table. Must be assigned to an ASID pool."/> 221 <param dir="in" name="vaddr" type="seL4_Word" 222 description="Virtual address"/> 223 <param dir="in" name="attr" type="seL4_ARM_VMAttributes"> 224 <description> 225 VM Attributes for the mapping.<docref>Possible values for this type are given in <autoref label="ch:vspace"/> .</docref> 226 </description> 227 </param> 228 <error name="seL4_DeleteFirst"> 229 <description> 230 A mapping already exists for this level in <texttt text="vspace"/> at <texttt text="vaddr"/>. 231 </description> 232 </error> 233 <error name="seL4_FailedLookup"> 234 <description> 235 The <texttt text="vspace"/> is not assigned to an ASID pool. 236 </description> 237 </error> 238 <error name="seL4_IllegalOperation"> 239 <description> 240 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 241 </description> 242 </error> 243 <error name="seL4_InvalidArgument"> 244 <description> 245 The <texttt text="vaddr"/> is in the kernel virtual address range. 246 </description> 247 </error> 248 <error name="seL4_InvalidCapability"> 249 <description> 250 The <texttt text="_service"/> or <texttt text="vspace"/> is a CPtr to a capability of the wrong type. 251 Or, <texttt text="vspace"/> is not assigned to an ASID pool. 252 Or, <texttt text="_service"/> is already mapped in a VSpace. 253 </description> 254 </error> 255 </method> 256 <method id="ARMPageUpperDirectoryUnmap" name="Unmap" 257 condition="!(defined CONFIG_ARM_HYPERVISOR_SUPPORT && defined CONFIG_ARM_PA_SIZE_BITS_40)"> 258 <description> 259 TODO 260 </description> 261 <error name="seL4_IllegalOperation"> 262 <description> 263 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 264 </description> 265 </error> 266 <error name="seL4_InvalidCapability"> 267 <description> 268 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 269 </description> 270 </error> 271 <error name="seL4_RevokeFirst"> 272 <description> 273 A copy of the <texttt text="_service"/> capability exists. 274 </description> 275 </error> 276 </method> 277 </interface> 278 <interface name="seL4_ARM_PageDirectory" manual_name="Page Directory" 279 cap_description="Capability to the page directory being operated on."> 280 <method id="ARMPageDirectoryMap" name="Map"> 281 <brief> 282 Map a page directory 283 </brief> 284 <description> 285 Map a page directory (level 2) to an upper page directory (level 1). 286 </description> 287 <param dir="in" name="vspace" type="seL4_CPtr" 288 description="Top level translation table. Must be assigned to an ASID pool."/> 289 <param dir="in" name="vaddr" type="seL4_Word" 290 description="Virtual adress"/> 291 <param dir="in" name="attr" type="seL4_ARM_VMAttributes"> 292 <description> 293 VM Attributes for the mapping.<docref>Possible values for this type are given in <autoref label="ch:vspace"/> .</docref> 294 </description> 295 </param> 296 <error name="seL4_DeleteFirst"> 297 <description> 298 A mapping already exists for this level in <texttt text="vspace"/> at <texttt text="vaddr"/>. 299 </description> 300 </error> 301 <error name="seL4_FailedLookup"> 302 <description> 303 The <texttt text="vspace"/> does not have a Page Upper Directory mapped at <texttt text="vaddr"/>. 304 Or, <texttt text="vspace"/> is not assigned to an ASID pool. 305 </description> 306 </error> 307 <error name="seL4_IllegalOperation"> 308 <description> 309 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 310 </description> 311 </error> 312 <error name="seL4_InvalidArgument"> 313 <description> 314 The <texttt text="vaddr"/> is in the kernel virtual address range. 315 </description> 316 </error> 317 <error name="seL4_InvalidCapability"> 318 <description> 319 The <texttt text="_service"/> or <texttt text="vspace"/> is a CPtr to a capability of the wrong type. 320 Or, <texttt text="vspace"/> is not assigned to an ASID pool. 321 Or, <texttt text="_service"/> is already mapped in a VSpace. 322 </description> 323 </error> 324 </method> 325 <method id="ARMPageDirectoryUnmap" name="Unmap"> 326 <brief> 327 Unmap a page directory 328 </brief> 329 <description> 330 Unmap a page directory (level 2) from an upper page directory (level 1) 331 </description> 332 <error name="seL4_IllegalOperation"> 333 <description> 334 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 335 </description> 336 </error> 337 <error name="seL4_InvalidCapability"> 338 <description> 339 The <texttt text="_service"/> is a CPtr to a capability of the wrong type. 340 </description> 341 </error> 342 <error name="seL4_RevokeFirst"> 343 <description> 344 A copy of the <texttt text="_service"/> capability exists. 345 </description> 346 </error> 347 </method> 348 </interface> 349</api> 350