<?xml version="1.0" ?>
<!--
     Copyright 2014, NICTA

     This software may be distributed and modified according to the terms of
     the BSD 2-Clause license. Note that NO WARRANTY is provided.
     See "LICENSE_BSD2.txt" for details.

     @TAG(NICTA_BSD)
  -->
<api>
	<struct name="seL4_UserContext">
		<member name="pc"/>
		<member name="sp"/>
		<member name="cpsr"/>
		<member name="r0"/>
		<member name="r1"/>
		<member name="r8"/>
		<member name="r9"/>
		<member name="r10"/>
		<member name="r11"/>
		<member name="r12"/>
		<member name="r2"/>
		<member name="r3"/>
		<member name="r4"/>
		<member name="r5"/>
		<member name="r6"/>
		<member name="r7"/>
		<member name="r14"/>
    </struct>
	<interface name="seL4_ARM_PageDirectory"/>

	<interface name="seL4_ARM_PageDirectory">
		<method id="ARMPDClean_Data" name="Clean_Data">
			<param dir="in" name="start" type="seL4_Word"/>
			<param dir="in" name="end" type="seL4_Word"/>
		</method>
		<method id="ARMPDInvalidate_Data" name="Invalidate_Data">
			<param dir="in" name="start" type="seL4_Word"/>
			<param dir="in" name="end" type="seL4_Word"/>
		</method>
		<method id="ARMPDCleanInvalidate_Data" name="CleanInvalidate_Data">
			<param dir="in" name="start" type="seL4_Word"/>
			<param dir="in" name="end" type="seL4_Word"/>
		</method>
		<method id="ARMPDUnify_Instruction" name="Unify_Instruction">
			<param dir="in" name="start" type="seL4_Word"/>
			<param dir="in" name="end" type="seL4_Word"/>
		</method>
    </interface>
	<interface name="seL4_ARM_PageTable">
		<method id="ARMPageTableMap" name="Map">
			<param dir="in" name="pd" type="seL4_ARM_PageDirectory"/>
			<param dir="in" name="vaddr" type="seL4_Word"/>
			<param dir="in" name="attr" type="seL4_ARM_VMAttributes"/>
		</method>
		<method id="ARMPageTableUnmap" name="Unmap">
		</method>
	</interface>
	<interface name="seL4_ARM_Page">
		<method id="ARMPageMap" name="Map">
			<param dir="in" name="pd" type="seL4_ARM_PageDirectory"/>
			<param dir="in" name="vaddr" type="seL4_Word"/>
			<param dir="in" name="rights" type="seL4_CapRights"/>
			<param dir="in" name="attr" type="seL4_ARM_VMAttributes"/>
		</method>
		<method id="ARMPageRemap" name="Remap">
			<param dir="in" name="pd" type="seL4_ARM_PageDirectory"/>
			<param dir="in" name="rights" type="seL4_CapRights"/>
			<param dir="in" name="attr" type="seL4_ARM_VMAttributes"/>
		</method>
		<method id="ARMPageUnmap" name="Unmap"/>
		<method id="ARMPageClean_Data" name="Clean_Data">
		    <param dir="in" name="start_offset" type="seL4_Word"/>
		    <param dir="in" name="end_offset" type="seL4_Word"/>
		</method>
		<method id="ARMPageInvalidate_Data" name="Invalidate_Data">
		    <param dir="in" name="start_offset" type="seL4_Word"/>
		    <param dir="in" name="end_offset" type="seL4_Word"/>
		</method>
		<method id="ARMPageCleanInvalidate_Data" name="CleanInvalidate_Data">
		    <param dir="in" name="start_offset" type="seL4_Word"/>
		    <param dir="in" name="end_offset" type="seL4_Word"/>
		</method>
		<method id="ARMPageUnify_Instruction" name="Unify_Instruction">
		    <param dir="in" name="start_offset" type="seL4_Word"/>
		    <param dir="in" name="end_offset" type="seL4_Word"/>
		</method>
		<method id="ARMPageGetAddress" name="GetAddress">
			<param dir="out" name="paddr" type="seL4_Word"/>
		</method>
	</interface>
	<interface name="seL4_ARM_ASIDControl">
		<method id="ARMASIDControlMakePool" name="MakePool">
			<param dir="in" name="untyped" type="seL4_Untyped"/>
			<param dir="in" name="root" type="seL4_CNode"/>
			<param dir="in" name="index" type="seL4_Word"/>
			<param dir="in" name="depth" type="seL4_Uint8"/>
		</method>
	</interface>
	<interface name="seL4_ARM_ASIDPool">
		<method id="ARMASIDPoolAssign" name="Assign">
			<param dir="in" name="vroot" type="seL4_ARM_PageDirectory"/>
		</method>
	</interface>
</api>
