aarch64: abstract vspace in libsel4

Depending on the physical address range the top level translation table
may be a page upper directory or a page global directory. Rename in
libsel4 the invocations on top level structures to be on an
seL4_ARM_VSpace rather than an seL4_ARM_PageGlobalDirectory.
This commit is contained in:
Anna Lyons 2019-07-17 13:08:13 +10:00 committed by Kent McLeod
parent 8af1aa77f6
commit d1153fbed8
4 changed files with 26 additions and 22 deletions

View file

@ -48,11 +48,11 @@
<member name="x28"/>
<member name="tpidr_el0"/>
</struct>
<interface name="seL4_ARM_PageGlobalDirectory" manual_name="Page Global Directory">
<method id="ARMPageGlobalDirectoryClean_Data" name="Clean_Data" manual_label="pgd_clean"
<interface name="seL4_ARM_VSpace" manual_name="Page Global Directory">
<method id="ARMVSpaceClean_Data" name="Clean_Data" manual_label="vspace_clean"
manual_name="Clean Data">
<brief>
Clean cached pages within a global page directory
Clean cached pages within a top level translation table
</brief>
<description>
<docref>See <autoref label="ch:vspace"/>.</docref>
@ -62,10 +62,10 @@
<param dir="in" name="end" type="seL4_Word"
description="End address"/>
</method>
<method id="ARMPageGlobalDirectoryInvalidate_Data" name="Invalidate_Data"
manual_name="Invalidate Data" manual_label="pgd_invalidate">
<method id="ARMVSpaceInvalidate_Data" name="Invalidate_Data"
manual_name="Invalidate Data" manual_label="vspace_invalidate">
<brief>
Invalidate cached pages within a global page directory
Invalidate cached pages within a top level translation table
</brief>
<description>
<docref>See <autoref label="ch:vspace"/>.</docref>
@ -75,10 +75,10 @@
<param dir="in" name="end" type="seL4_Word"
description="End address"/>
</method>
<method id="ARMPageGlobalDirectoryCleanInvalidate_Data" name="CleanInvalidate_Data"
manual_name="Clean and Invalidate Data" manual_label="pgd_clean_invalidate">
<method id="ARMVSpaceCleanInvalidate_Data" name="CleanInvalidate_Data"
manual_name="Clean and Invalidate Data" manual_label="vspace_clean_invalidate">
<brief>
Clean and invalidate cached pages within a global page directory
Clean and invalidate cached pages within a top level translation table
</brief>
<description>
<docref>See <autoref label="ch:vspace"/>.</docref>
@ -88,8 +88,8 @@
<param dir="in" name="end" type="seL4_Word"
description="End address"/>
</method>
<method id="ARMPageGlobalDirectoryUnify_Instruction" name="Unify_Instruction"
manual_name="Unify Instruction" manual_label="pgd_unify_instruction">
<method id="ARMVSpaceUnify_Instruction" name="Unify_Instruction"
manual_name="Unify Instruction" manual_label="vspace_unify_instruction">
<brief>
Clean and invalidate cached instruction pages to point of unification
</brief>
@ -106,10 +106,10 @@
Map an upper page directory
</brief>
<description>
Map an upper page directory (level 1) to a global page directory (level 0)
Map an upper page directory (level 1) to a top level translation table (level 0)
</description>
<param dir="in" name="pgd" type="seL4_CPtr"
description="Global page directory"/>
<param dir="in" name="vspace" type="seL4_CPtr"
description="top level translation table"/>
<param dir="in" name="vaddr" type="seL4_Word"
description="Virtual address"/>
<param dir="in" name="attr" type="seL4_ARM_VMAttributes"

View file

@ -23,6 +23,9 @@ typedef seL4_Word seL4_Domain;
typedef seL4_CPtr seL4_ARM_PageUpperDirectory;
typedef seL4_CPtr seL4_ARM_PageGlobalDirectory;
/* whether the VSpace refers to a PageUpperDirectory or PageGlobalDirectory directly
* depends on the physical address size */
typedef seL4_CPtr seL4_ARM_VSpace;
typedef struct seL4_UserContext_ {
/* frame registers */

View file

@ -283,6 +283,7 @@ def init_arch_types(wordsize):
CapType("seL4_ARM_PageDirectory", wordsize),
CapType("seL4_ARM_PageUpperDirectory", wordsize),
CapType("seL4_ARM_PageGlobalDirectory", wordsize),
CapType("seL4_ARM_VSpace", wordsize),
CapType("seL4_ARM_ASIDControl", wordsize),
CapType("seL4_ARM_ASIDPool", wordsize),
CapType("seL4_ARM_VCPU", wordsize),

View file

@ -1359,22 +1359,22 @@ void deleteASIDPool(asid_t asid_base, asid_pool_t *pool)
static void doFlush(int invLabel, vptr_t start, vptr_t end, paddr_t pstart)
{
switch (invLabel) {
case ARMPageGlobalDirectoryClean_Data:
case ARMVSpaceClean_Data:
case ARMPageClean_Data:
cleanCacheRange_RAM(start, end, pstart);
break;
case ARMPageGlobalDirectoryInvalidate_Data:
case ARMVSpaceInvalidate_Data:
case ARMPageInvalidate_Data:
invalidateCacheRange_RAM(start, end, pstart);
break;
case ARMPageGlobalDirectoryCleanInvalidate_Data:
case ARMVSpaceCleanInvalidate_Data:
case ARMPageCleanInvalidate_Data:
cleanInvalidateCacheRange_RAM(start, end, pstart);
break;
case ARMPageGlobalDirectoryUnify_Instruction:
case ARMVSpaceUnify_Instruction:
case ARMPageUnify_Instruction:
/* First clean data lines to point of unification... */
cleanCacheRange_PoU(start, end, pstart);
@ -1622,10 +1622,10 @@ static exception_t decodeARMVSpaceRootInvocation(word_t invLabel, unsigned int l
findVSpaceForASID_ret_t find_ret;
switch (invLabel) {
case ARMPageGlobalDirectoryClean_Data:
case ARMPageGlobalDirectoryInvalidate_Data:
case ARMPageGlobalDirectoryCleanInvalidate_Data:
case ARMPageGlobalDirectoryUnify_Instruction:
case ARMVSpaceClean_Data:
case ARMVSpaceInvalidate_Data:
case ARMVSpaceCleanInvalidate_Data:
case ARMVSpaceUnify_Instruction:
if (length < 2) {
userError("VSpaceRoot Flush: Truncated message.");