pmap: change pmap_add* virtual pointer parameter to virt_addr_t

This commit is contained in:
2026-02-08 12:08:26 +00:00
parent 34f614b881
commit 49a75a1bbe
2 changed files with 23 additions and 12 deletions

View File

@@ -133,12 +133,11 @@ static void delete_pdir(phys_addr_t pd)
static kern_status_t do_pmap_add( static kern_status_t do_pmap_add(
pmap_t pmap, pmap_t pmap,
void *p, virt_addr_t pv,
pfn_t pfn, pfn_t pfn,
enum vm_prot prot, enum vm_prot prot,
enum page_size size) enum page_size size)
{ {
uintptr_t pv = (uintptr_t)p;
unsigned int pml4t_index = BAD_INDEX, pdpt_index = BAD_INDEX, unsigned int pml4t_index = BAD_INDEX, pdpt_index = BAD_INDEX,
pd_index = BAD_INDEX, pt_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 /* map 2GiB at the end of the address space to
replace the mapping created by start_32 and allow access to replace the mapping created by start_32 and allow access to
the kernel and memblock-allocated data. */ 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) { for (size_t i = 0; i < C_2GiB; i += hugepage_sz) {
do_pmap_add( do_pmap_add(
kernel_pmap, kernel_pmap,
(void *)(vbase + i), vbase + i,
PFN(i), PFN(i),
VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXEC VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXEC
| VM_PROT_SVR, | VM_PROT_SVR,
@@ -285,7 +284,7 @@ void pmap_bootstrap(void)
for (size_t i = 0; i < pmem_limit; i += hugepage_sz) { for (size_t i = 0; i < pmem_limit; i += hugepage_sz) {
do_pmap_add( do_pmap_add(
kernel_pmap, kernel_pmap,
(void *)(vbase + i), vbase + i,
PFN(i), PFN(i),
VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR
| VM_PROT_NOCACHE, | VM_PROT_NOCACHE,
@@ -306,7 +305,7 @@ void pmap_destroy(pmap_t pmap)
kern_status_t pmap_add( kern_status_t pmap_add(
pmap_t pmap, pmap_t pmap,
void *p, virt_addr_t p,
pfn_t pfn, pfn_t pfn,
enum vm_prot prot, enum vm_prot prot,
enum pmap_flags flags) enum pmap_flags flags)
@@ -321,7 +320,7 @@ kern_status_t pmap_add(
kern_status_t pmap_add_block( kern_status_t pmap_add_block(
pmap_t pmap, pmap_t pmap,
void *p, virt_addr_t p,
pfn_t pfn, pfn_t pfn,
size_t len, size_t len,
enum vm_prot prot, enum vm_prot prot,

View File

@@ -3,11 +3,12 @@
/* all the functions declared in this file are defined in arch/xyz/pmap.c */ /* all the functions declared in this file are defined in arch/xyz/pmap.c */
#include <mango/vm.h>
#include <mango/status.h>
#include <mango/machine/pmap.h> #include <mango/machine/pmap.h>
#include <mango/status.h>
#include <mango/vm.h>
#include <stddef.h> #include <stddef.h>
#define PMAP_INVALID ML_PMAP_INVALID
#define PFN(x) ((x) >> VM_PAGE_SHIFT) #define PFN(x) ((x) >> VM_PAGE_SHIFT)
#ifdef __cplusplus #ifdef __cplusplus
@@ -29,8 +30,19 @@ extern pmap_t pmap_create(void);
extern void pmap_destroy(pmap_t pmap); extern void pmap_destroy(pmap_t pmap);
extern void pmap_switch(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(
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); 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(pmap_t pmap, void *p);
extern kern_status_t pmap_remove_range(pmap_t pmap, void *p, size_t len); extern kern_status_t pmap_remove_range(pmap_t pmap, void *p, size_t len);