seL4/libsel4/arch_include/arm/interfaces/sel4arch.xml
2017-06-29 12:06:39 +10:00

219 lines
11 KiB
XML

<?xml version="1.0" ?>
<!--
Copyright 2017, Data61
Commonwealth Scientific and Industrial Research Organisation (CSIRO)
ABN 41 687 119 230.
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(DATA61_BSD)
-->
<api name="ObjectApiArm" label_prefix="arm_">
<interface name="seL4_ARM_PageTable" manual_name="Page Table"
cap_description="Capability to the page table being operated on.">
<method id="ARMPageTableMap" name="Map" manual_label="pagetable_map">
<brief>
Map a page table into an address space.
</brief>
<description>
See <autoref label="ch:vspace"/>
</description>
<param dir="in" name="pd" type="seL4_CPtr"
description="Capability to the VSpace which will contain the mapping."/>
<param dir="in" name="vaddr" type="seL4_Word"
description="Virtual address to map the page into."/>
<param dir="in" name="attr" type="seL4_ARM_VMAttributes">
<description>
VM Attributes for the mapping. Possible values for this type are given
in <autoref label="ch:vspace"/>.
</description>
</param>
</method>
<method id="ARMPageTableUnmap" name="Unmap" manual_label="pagetable_unmap">
<brief>
Unmap a page table from its address space and zero it out.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
</method>
</interface>
<interface name="seL4_ARM_IOPageTable" manual_name="I/O Page Table">
<method id="ARMIOPageTableMap" name="Map" condition="defined(CONFIG_ARM_SMMU)">
<param dir="in" name="iospace" type="seL4_ARM_IOSpace"/>
<param dir="in" name="ioaddr" type="seL4_Word"/>
</method>
<method id="ARMIOPageTableUnmap" name="Unmap" condition="defined(CONFIG_ARM_SMMU)">
</method>
</interface>
<interface name="seL4_ARM_Page" manual_name="Page"
cap_description="Capability to the page being operated on.">
<method id="ARMPageMap" name="Map">
<brief>
Map a page into an address space.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="pd" type="seL4_CPtr"
description="Capability to the VSpace which will contain the mapping."/>
<param dir="in" name="vaddr" type="seL4_Word"
description="Virtual address to map the page into."/>
<param dir="in" name="rights" type="seL4_CapRights_t">
<description>
Rights for the mapping. Possible values for this type are given in <autoref label="sec:cap_rights"/>.
</description>
</param>
<param dir="in" name="attr" type="seL4_ARM_VMAttributes">
<description>
VM Attributes for the mapping. Possible values for this type are given in <autoref label="ch:vspace"/>.
</description>
</param>
</method>
<method id="ARMPageRemap" name="Remap">
<brief>
Remap a page.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="pd" type="seL4_CPtr"
description="Capability to the VSpace which will contain the mapping."/>
<param dir="in" name="rights" type="seL4_CapRights_t">
<description>
Rights for the mapping. Possible values for this type are given in <autoref label="sec:cap_rights"/>.
</description>
</param>
<param dir="in" name="attr" type="seL4_ARM_VMAttributes">
<description>
VM Attributes for the mapping. Possible values for this type are given in <autoref label="ch:vspace"/>.
</description>
</param>
</method>
<method id="ARMPageUnmap" name="Unmap">
<brief>
Unmap a page.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
</method>
<method id="ARMPageMapIO" name="MapIO" condition="defined(CONFIG_ARM_SMMU)" manual_name="Map I/O">
<brief>
</brief>
<description>
</description>
<param dir="in" name="iospace" type="seL4_ARM_IOSpace"/>
<param dir="in" name="rights" type="seL4_CapRights_t"/>
<param dir="in" name="ioaddr" type="seL4_Word"/>
</method>
<method id="ARMPageClean_Data" name="Clean_Data" manual_name="Clean Data">
<brief>
Cleans the data cache out to RAM. The start and end are relative to the page being serviced.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="start_offset" type="seL4_Word"
description="The offset, relative to the start of the page inclusive."/>
<param dir="in" name="end_offset" type="seL4_Word"
description="The offset, relative to the start of the page exclusive."/>
</method>
<method id="ARMPageInvalidate_Data" name="Invalidate_Data" manual_name="Invalidate Data">
<brief>
Invalidates the cache range within the given page. The start and end are relative to the page being serviced
and should be aligned to a cache line boundary where possible.
An additional clean is performed on the outer cache lines if the start and end are
not aligned, to clean out the bytes between the requested and the cache line boundary.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="start_offset" type="seL4_Word"
description="The offset, relative to the start of the page inclusive."/>
<param dir="in" name="end_offset" type="seL4_Word"
description="The offset, relative to the start of the page exclusive."/>
</method>
<method id="ARMPageCleanInvalidate_Data" name="CleanInvalidate_Data"
manual_name="Clean and Invalidate Data">
<brief>
Clean and invalidates the cache range within the given page. The range will be flushed out to RAM.
The start and end are relative to the page being serviced.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="start_offset" type="seL4_Word"
description="The offset, relative to the start of the page inclusive."/>
<param dir="in" name="end_offset" type="seL4_Word"
description="The offset, relative to the start of the page exclusive."/>
</method>
<method id="ARMPageUnify_Instruction" name="Unify_Instruction" manual_name="Unify Instruction">
<brief>
Unify Instruction Cache. Cleans data lines to point of unification, invalidate
corresponding instruction lines to point of unification, then invalidates branch
predictors. The start and end are relative to the page being
serviced.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="start_offset" type="seL4_Word"
description="The offset, relative to the start of the page inclusive."/>
<param dir="in" name="end_offset" type="seL4_Word"
description="The offset, relative to the start of the page exclusive."/>
</method>
<method id="ARMPageGetAddress" name="GetAddress" manual_name="Get Address">
<brief>
Get the physical address of the underlying frame.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<return>
A <texttt text='seL4_ARM_Page_GetAddress_t'/> struct that contains a
<texttt text='seL4_Word paddr'/>, which holds the physical address of the page,
and <texttt text='int error'/>. See <autoref label='sec:errors'/> for a description
of the message register and tag contents upon error.
</return>
<param dir="out" name="paddr" type="seL4_Word"/>
</method>
</interface>
<interface name="seL4_ARM_ASIDControl" manual_name="ASID Control"
cap_description="The master ASIDControl capability being operated on.">
<method id="ARMASIDControlMakePool" name="MakePool" manual_name="Make Pool">
<brief>
Create an ASID Pool.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="untyped" type="seL4_Untyped"
description="Capability to an untyped memory object that will become the pool. Must be 4K bytes."/>
<param dir="in" name="root" type="seL4_CNode"
description="CPTR to the CNode that forms the root of the destination CSpace. Must be at a depth of 32."/>
<param dir="in" name="index" type="seL4_Word"
description="CPTR to the destination slot. Resolved from the root of the destination CSpace."/>
<param dir="in" name="depth" type="seL4_Uint8"
description="Number of bits of index to resolve to find the destination slot."/>
</method>
</interface>
<interface name="seL4_ARM_ASIDPool" manual_name="ASID Pool"
cap_description="The ASID pool which is being assigned to. Must not be full. Each ASID pool can contain 1024 entries.">
<method id="ARMASIDPoolAssign" name="Assign" manual_label="asidpool_assign"
manual_name="Asid Pool Assign">
<brief>
Assign an ASID Pool.
</brief>
<description>
See <autoref label="ch:vspace"/>.
</description>
<param dir="in" name="vroot" type="seL4_CPtr"
description="The page directory that is being assigned to an ASID pool. Must not already be assigned to an ASID pool."/>
</method>
</interface>
</api>