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        </method>
62        <method id="ARMVSpaceInvalidate_Data" name="Invalidate_Data"
63            manual_name="Invalidate Data" manual_label="vspace_invalidate">
64                <brief>
65                    Invalidate cached pages within a top level translation table
66                </brief>
67             <description>
68                 <docref>See <autoref label="ch:vspace"/>.</docref>
69             </description>
70            <param dir="in" name="start" type="seL4_Word"
71            description="Start address"/>
72            <param dir="in" name="end" type="seL4_Word"
73            description="End address"/>
74        </method>
75        <method id="ARMVSpaceCleanInvalidate_Data" name="CleanInvalidate_Data"
76            manual_name="Clean and Invalidate Data" manual_label="vspace_clean_invalidate">
77                <brief>
78                    Clean and invalidate cached pages within a top level translation table
79                </brief>
80             <description>
81                 <docref>See <autoref label="ch:vspace"/>.</docref>
82             </description>
83            <param dir="in" name="start" type="seL4_Word"
84            description="Start address"/>
85            <param dir="in" name="end" type="seL4_Word"
86            description="End address"/>
87        </method>
88        <method id="ARMVSpaceUnify_Instruction" name="Unify_Instruction"
89            manual_name="Unify Instruction" manual_label="vspace_unify_instruction">
90                <brief>
91                    Clean and invalidate cached instruction pages to point of unification
92                </brief>
93             <description>
94                 <docref>See <autoref label="ch:vspace"/>.</docref>
95             </description>
96             <param dir="in" name="start" type="seL4_Word"
97             description="Start address"/>
98             <param dir="in" name="end" type="seL4_Word"
99	     description="End address"/>
100        </method>
101    </interface>
102    <interface name="seL4_ARM_PageUpperDirectory" manual_name="Page Upper Directory"
103        cap_description="Capability to the upper page directory being operated on.">
104        <method id="ARMPageUpperDirectoryMap" name="Map" condition="!(defined CONFIG_ARM_HYPERVISOR_SUPPORT &amp;&amp; defined CONFIG_ARM_PA_SIZE_BITS_40)">
105                <brief>
106                    Map an upper page directory
107                </brief>
108                <description>
109                    Map an upper page directory (level 1) to a top level translation table (level 0).
110                    If the upper page directory is already mapped this operation will fail,
111                    returning a seL4_InvalidCapability error. If another object is already mapped at this
112                    level for the virtual address this operation will fail,
113                    returning a seL4_DeleteFirst error.
114                </description>
115            <param dir="in" name="vspace" type="seL4_CPtr"
116            description="Top level translation table. Must be assigned to an ASID pool."/>
117            <param dir="in" name="vaddr" type="seL4_Word"
118            description="Virtual address"/>
119            <param dir="in" name="attr" type="seL4_ARM_VMAttributes">
120                <description>
121                    VM Attributes for the mapping.<docref>Possible values for this type are given in <autoref label="ch:vspace"/>  .</docref>
122                </description>
123            </param>
124        </method>
125        <method id="ARMPageUpperDirectoryUnmap" name="Unmap"
126            condition="!(defined CONFIG_ARM_HYPERVISOR_SUPPORT &amp;&amp; defined CONFIG_ARM_PA_SIZE_BITS_40)">
127        </method>
128    </interface>
129    <interface name="seL4_ARM_PageDirectory" manual_name="Page Directory"
130        cap_description="Capability to the page directory being operated on.">
131        <method id="ARMPageDirectoryMap" name="Map">
132                <brief>
133                    Map a page directory
134                </brief>
135                <description>
136                    Map a page directory (level 2) to an upper page directory (level 1).
137                    If an upper page directory does not exist for the virtual address this
138                    operation will fail, returning a seL4_FailedLookup error. If the page
139                    directory is already mapped this operation will fail,
140                    returning a seL4_InvalidCapability error. If another object is already mapped
141                    at this level for the virtual address this operation will
142                    fail, returning a seL4_DeleteFirst error.
143                </description>
144            <param dir="in" name="vspace" type="seL4_CPtr"
145            description="Top level translation table. Must be assigned to an ASID pool."/>
146            <param dir="in" name="vaddr" type="seL4_Word"
147            description="Virtual adress"/>
148            <param dir="in" name="attr" type="seL4_ARM_VMAttributes">
149                <description>
150                    VM Attributes for the mapping.<docref>Possible values for this type are given in <autoref label="ch:vspace"/>  .</docref>
151                </description>
152            </param>
153        </method>
154        <method id="ARMPageDirectoryUnmap" name="Unmap">
155                <brief>
156                    Unmap a page directory
157                </brief>
158                <description>
159                    Unmap a page directory (level 2) from an upper page directory (level 1)
160                </description>
161        </method>
162    </interface>
163</api>
164