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="ObjectApiAarch32" label_prefix="aarch32_">
9    <struct name="seL4_UserContext">
10        <member name="pc"/>
11        <member name="sp"/>
12        <member name="cpsr"/>
13        <member name="r0"/>
14        <member name="r1"/>
15        <member name="r8"/>
16        <member name="r9"/>
17        <member name="r10"/>
18        <member name="r11"/>
19        <member name="r12"/>
20        <member name="r2"/>
21        <member name="r3"/>
22        <member name="r4"/>
23        <member name="r5"/>
24        <member name="r6"/>
25        <member name="r7"/>
26        <member name="r14"/>
27        <member name="tpidrurw"/>
28        <member name="tpidruro"/>
29    </struct>
30    <interface name="seL4_ARM_PageDirectory" manual_name="Page Directory"
31        cap_description="Capability to the page directory being operated on.">
32        <method id="ARMPDClean_Data" name="Clean_Data" manual_name="Clean Data" manual_label="pd_clean">
33                <brief>
34                    Clean cached pages within a page directory
35                </brief>
36                <description>
37                    <docref>See <autoref label="ch:vspace"/>.</docref>
38                </description>
39            <param dir="in" name="start" type="seL4_Word"
40            description="Start address"/>
41            <param dir="in" name="end" type="seL4_Word"
42            description="End address"/>
43            <error name="seL4_FailedLookup">
44                <description>
45                    The <texttt text="_service"/> is not assigned to an ASID pool.
46                </description>
47            </error>
48            <error name="seL4_IllegalOperation">
49                <description>
50                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
51                    Or, <texttt text="start"/> or <texttt text="end"/> is in the kernel virtual address range.
52                </description>
53            </error>
54            <error name="seL4_InvalidArgument">
55                <description>
56                    The <texttt text="start"/> is greater than or equal to <texttt text="end"/>.
57                </description>
58            </error>
59            <error name="seL4_InvalidCapability">
60                <description>
61                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
62                    Or, <texttt text="_service"/> is not assigned to an ASID pool.
63                </description>
64            </error>
65            <error name="seL4_RangeError">
66                <description>
67                    The specified range crosses a page boundary.
68                </description>
69            </error>
70        </method>
71        <method id="ARMPDInvalidate_Data" name="Invalidate_Data" manual_name="Invalidate Data" manual_label="pd_invalidate">
72                <brief>
73                    Invalidate cached pages within a page directory
74                </brief>
75             <description>
76                 <docref>See <autoref label="ch:vspace"/>.</docref>
77             </description>
78            <param dir="in" name="start" type="seL4_Word"
79            description="Start address"/>
80            <param dir="in" name="end" type="seL4_Word"
81            description="End address"/>
82            <error name="seL4_FailedLookup">
83                <description>
84                    The <texttt text="_service"/> is not assigned to an ASID pool.
85                </description>
86            </error>
87            <error name="seL4_IllegalOperation">
88                <description>
89                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
90                    Or, <texttt text="start"/> or <texttt text="end"/> is in the kernel virtual address range.
91                </description>
92            </error>
93            <error name="seL4_InvalidArgument">
94                <description>
95                    The <texttt text="start"/> is greater than or equal to <texttt text="end"/>.
96                </description>
97            </error>
98            <error name="seL4_InvalidCapability">
99                <description>
100                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
101                    Or, <texttt text="_service"/> is not assigned to an ASID pool.
102                </description>
103            </error>
104            <error name="seL4_RangeError">
105                <description>
106                    The specified range crosses a page boundary.
107                </description>
108            </error>
109        </method>
110        <method id="ARMPDCleanInvalidate_Data" name="CleanInvalidate_Data"
111            manual_name="Clean and Invalidate Data" manual_label="pd_clean_invalidate">
112                <brief>
113                    Clean and invalidate cached pages within a page directory
114                </brief>
115             <description>
116                 <docref>See <autoref label="ch:vspace"/>.</docref>
117             </description>
118            <param dir="in" name="start" type="seL4_Word"
119            description="Start address"/>
120            <param dir="in" name="end" type="seL4_Word"
121            description="End address"/>
122            <error name="seL4_FailedLookup">
123                <description>
124                    The <texttt text="_service"/> is not assigned to an ASID pool.
125                </description>
126            </error>
127            <error name="seL4_IllegalOperation">
128                <description>
129                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
130                    Or, <texttt text="start"/> or <texttt text="end"/> is in the kernel virtual address range.
131                </description>
132            </error>
133            <error name="seL4_InvalidArgument">
134                <description>
135                    The <texttt text="start"/> is greater than or equal to <texttt text="end"/>.
136                </description>
137            </error>
138            <error name="seL4_InvalidCapability">
139                <description>
140                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
141                    Or, <texttt text="_service"/> is not assigned to an ASID pool.
142                </description>
143            </error>
144            <error name="seL4_RangeError">
145                <description>
146                    The specified range crosses a page boundary.
147                </description>
148            </error>
149        </method>
150        <method id="ARMPDUnify_Instruction" name="Unify_Instruction" manual_name="Unify Instruction" manual_label="pd_unify_instruction">
151                <brief>
152                    Clean and invalidate cached instruction pages to point of unification
153                </brief>
154             <description>
155                 <docref>See <autoref label="ch:vspace"/>.</docref>
156             </description>
157            <param dir="in" name="start" type="seL4_Word"
158            description="Start address"/>
159            <param dir="in" name="end" type="seL4_Word"
160            description="End address"/>
161            <error name="seL4_FailedLookup">
162                <description>
163                    The <texttt text="_service"/> is not assigned to an ASID pool.
164                </description>
165            </error>
166            <error name="seL4_IllegalOperation">
167                <description>
168                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
169                    Or, <texttt text="start"/> or <texttt text="end"/> is in the kernel virtual address range.
170                </description>
171            </error>
172            <error name="seL4_InvalidArgument">
173                <description>
174                    The <texttt text="start"/> is greater than or equal to <texttt text="end"/>.
175                </description>
176            </error>
177            <error name="seL4_InvalidCapability">
178                <description>
179                    The <texttt text="_service"/> is a CPtr to a capability of the wrong type.
180                    Or, <texttt text="_service"/> is not assigned to an ASID pool.
181                </description>
182            </error>
183            <error name="seL4_RangeError">
184                <description>
185                    The specified range crosses a page boundary.
186                </description>
187            </error>
188        </method>
189    </interface>
190</api>
191