arch/risc-v: Move ARCH_ADDRENV_VBASE to addrenv.h
Move the user address environment base address to a public header and add riscv_uservaddr query
This commit is contained in:
parent
0476e30a6d
commit
783f3f4c92
@ -44,6 +44,14 @@
|
|||||||
# define ARCH_KERNEL_STACKSIZE STACK_ALIGN_UP(CONFIG_ARCH_KERNEL_STACKSIZE)
|
# define ARCH_KERNEL_STACKSIZE STACK_ALIGN_UP(CONFIG_ARCH_KERNEL_STACKSIZE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Base address for address environment */
|
||||||
|
|
||||||
|
#if CONFIG_ARCH_TEXT_VBASE != 0
|
||||||
|
# define ARCH_ADDRENV_VBASE (CONFIG_ARCH_TEXT_VBASE)
|
||||||
|
#else
|
||||||
|
# define ARCH_ADDRENV_VBASE (CONFIG_ARCH_DATA_VBASE)
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Function Prototypes
|
* Public Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "addrenv.h"
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -78,6 +80,24 @@ static inline uintptr_t riscv_pgvaddr(uintptr_t paddr)
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_ARCH_PGPOOL_MAPPING */
|
#endif /* CONFIG_ARCH_PGPOOL_MAPPING */
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: riscv_uservaddr
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Return true if the virtual address, vaddr, lies in the user address
|
||||||
|
* space.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static inline bool riscv_uservaddr(uintptr_t vaddr)
|
||||||
|
{
|
||||||
|
/* Check if this address is within the range of the virtualized .bss/.data,
|
||||||
|
* heap, or stack regions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return vaddr >= ARCH_ADDRENV_VBASE;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: riscv_pgwipe
|
* Name: riscv_pgwipe
|
||||||
*
|
*
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
|
|
||||||
#include <arch/barriers.h>
|
#include <arch/barriers.h>
|
||||||
|
|
||||||
|
#include "addrenv.h"
|
||||||
#include "pgalloc.h"
|
#include "pgalloc.h"
|
||||||
#include "riscv_mmu.h"
|
#include "riscv_mmu.h"
|
||||||
|
|
||||||
@ -85,17 +86,9 @@
|
|||||||
|
|
||||||
#define ENTRIES_PER_PGT (RV_MMU_PAGE_ENTRIES)
|
#define ENTRIES_PER_PGT (RV_MMU_PAGE_ENTRIES)
|
||||||
|
|
||||||
/* Base address for address environment */
|
|
||||||
|
|
||||||
#if CONFIG_ARCH_TEXT_VBASE != 0
|
|
||||||
# define ADDRENV_VBASE (CONFIG_ARCH_TEXT_VBASE)
|
|
||||||
#else
|
|
||||||
# define ADDRENV_VBASE (CONFIG_ARCH_DATA_VBASE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Make sure the address environment virtual address boundary is valid */
|
/* Make sure the address environment virtual address boundary is valid */
|
||||||
|
|
||||||
static_assert((ADDRENV_VBASE & RV_MMU_SECTION_ALIGN) == 0,
|
static_assert((ARCH_ADDRENV_VBASE & RV_MMU_SECTION_ALIGN) == 0,
|
||||||
"Addrenv start address is not aligned to section boundary");
|
"Addrenv start address is not aligned to section boundary");
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -382,7 +375,7 @@ int up_addrenv_create(size_t textsize, size_t datasize, size_t heapsize,
|
|||||||
uintptr_t heapbase;
|
uintptr_t heapbase;
|
||||||
|
|
||||||
DEBUGASSERT(addrenv);
|
DEBUGASSERT(addrenv);
|
||||||
DEBUGASSERT(MM_ISALIGNED(ADDRENV_VBASE));
|
DEBUGASSERT(MM_ISALIGNED(ARCH_ADDRENV_VBASE));
|
||||||
|
|
||||||
/* Make sure the address environment is wiped before doing anything */
|
/* Make sure the address environment is wiped before doing anything */
|
||||||
|
|
||||||
@ -417,7 +410,7 @@ int up_addrenv_create(size_t textsize, size_t datasize, size_t heapsize,
|
|||||||
database = resvbase + MM_PGALIGNUP(resvsize);
|
database = resvbase + MM_PGALIGNUP(resvsize);
|
||||||
heapbase = CONFIG_ARCH_HEAP_VBASE;
|
heapbase = CONFIG_ARCH_HEAP_VBASE;
|
||||||
#else
|
#else
|
||||||
resvbase = ADDRENV_VBASE;
|
resvbase = ARCH_ADDRENV_VBASE;
|
||||||
resvsize = ARCH_DATA_RESERVE_SIZE;
|
resvsize = ARCH_DATA_RESERVE_SIZE;
|
||||||
textbase = resvbase + MM_PGALIGNUP(resvsize);
|
textbase = resvbase + MM_PGALIGNUP(resvsize);
|
||||||
database = textbase + MM_PGALIGNUP(textsize);
|
database = textbase + MM_PGALIGNUP(textsize);
|
||||||
@ -532,7 +525,7 @@ int up_addrenv_destroy(arch_addrenv_t *addrenv)
|
|||||||
|
|
||||||
/* Things start from the beginning of the user virtual memory */
|
/* Things start from the beginning of the user virtual memory */
|
||||||
|
|
||||||
vaddr = ADDRENV_VBASE;
|
vaddr = ARCH_ADDRENV_VBASE;
|
||||||
pgsize = mmu_get_region_size(ARCH_SPGTS);
|
pgsize = mmu_get_region_size(ARCH_SPGTS);
|
||||||
|
|
||||||
/* First destroy the allocated memory and the final level page table */
|
/* First destroy the allocated memory and the final level page table */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user