diff --git a/arch/x86_64/pmap.c b/arch/x86_64/pmap.c index acc9a7b..a4736b8 100644 --- a/arch/x86_64/pmap.c +++ b/arch/x86_64/pmap.c @@ -133,12 +133,11 @@ static void delete_pdir(phys_addr_t pd) static kern_status_t do_pmap_add( pmap_t pmap, - void *p, + virt_addr_t pv, pfn_t pfn, enum vm_prot prot, enum page_size size) { - uintptr_t pv = (uintptr_t)p; unsigned int pml4t_index = BAD_INDEX, pdpt_index = BAD_INDEX, pd_index = BAD_INDEX, pt_index = BAD_INDEX; @@ -261,11 +260,11 @@ void pmap_bootstrap(void) /* map 2GiB at the end of the address space to replace the mapping created by start_32 and allow access to the kernel and memblock-allocated data. */ - uintptr_t vbase = VM_KERNEL_VOFFSET; + virt_addr_t vbase = VM_KERNEL_VOFFSET; for (size_t i = 0; i < C_2GiB; i += hugepage_sz) { do_pmap_add( kernel_pmap, - (void *)(vbase + i), + vbase + i, PFN(i), VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXEC | VM_PROT_SVR, @@ -285,7 +284,7 @@ void pmap_bootstrap(void) for (size_t i = 0; i < pmem_limit; i += hugepage_sz) { do_pmap_add( kernel_pmap, - (void *)(vbase + i), + vbase + i, PFN(i), VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR | VM_PROT_NOCACHE, @@ -306,7 +305,7 @@ void pmap_destroy(pmap_t pmap) kern_status_t pmap_add( pmap_t pmap, - void *p, + virt_addr_t p, pfn_t pfn, enum vm_prot prot, enum pmap_flags flags) @@ -321,7 +320,7 @@ kern_status_t pmap_add( kern_status_t pmap_add_block( pmap_t pmap, - void *p, + virt_addr_t p, pfn_t pfn, size_t len, enum vm_prot prot, diff --git a/include/mango/pmap.h b/include/mango/pmap.h index 3bbb4ee..5a7827a 100644 --- a/include/mango/pmap.h +++ b/include/mango/pmap.h @@ -3,12 +3,13 @@ /* all the functions declared in this file are defined in arch/xyz/pmap.c */ -#include -#include #include +#include +#include #include -#define PFN(x) ((x) >> VM_PAGE_SHIFT) +#define PMAP_INVALID ML_PMAP_INVALID +#define PFN(x) ((x) >> VM_PAGE_SHIFT) #ifdef __cplusplus extern "C" { @@ -29,8 +30,19 @@ extern pmap_t pmap_create(void); extern void pmap_destroy(pmap_t pmap); extern void pmap_switch(pmap_t pmap); -extern kern_status_t pmap_add(pmap_t pmap, void *p, pfn_t pfn, enum vm_prot prot, enum pmap_flags flags); -extern kern_status_t pmap_add_block(pmap_t pmap, void *p, pfn_t pfn, size_t len, enum vm_prot prot, enum pmap_flags flags); +extern kern_status_t pmap_add( + pmap_t pmap, + virt_addr_t p, + pfn_t pfn, + enum vm_prot prot, + enum pmap_flags flags); +extern kern_status_t pmap_add_block( + pmap_t pmap, + virt_addr_t p, + pfn_t pfn, + size_t len, + enum vm_prot prot, + enum pmap_flags flags); extern kern_status_t pmap_remove(pmap_t pmap, void *p); extern kern_status_t pmap_remove_range(pmap_t pmap, void *p, size_t len);