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 &amp;&amp; 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 &amp;&amp; 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