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:
parent
8af1aa77f6
commit
d1153fbed8
4 changed files with 26 additions and 22 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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.");
|
||||
|
|
|
|||
Loading…
Reference in a new issue