x86_64: pmap: map all of physical memory starting at VM_PAGEMAP_BASE

This commit is contained in:
2023-02-07 15:38:18 +00:00
parent e939aae775
commit ad63f0b251
2 changed files with 31 additions and 6 deletions

View File

@@ -1,8 +1,16 @@
#ifndef SOCKS_X86_64_VM_H_
#define SOCKS_X86_64_VM_H_
/* kernel higher-half base virtual address. */
#define VM_KERNEL_VOFFSET 0xFFFFFFFF80000000
/* direct page-mapping region.
NOTE that these are the maximum bounds of this region.
the actual size depends on the amount of physical
memory present. */
#define VM_PAGEMAP_BASE 0xFFFF888000000000
#define VM_PAGEMAP_LIMIT 0xFFFFC87FFFFFFFFF
#define VM_PAGE_SIZE 0x1000
#define VM_PAGE_MASK (VM_PAGE_SIZE-1)
#define VM_PAGE_SHIFT 12

View File

@@ -247,6 +247,23 @@ void pmap_bootstrap(void)
hugepage);
}
phys_addr_t pmem_limit = 0x0;
memblock_iter_t it;
for_each_mem_range(&it, 0x00, UINTPTR_MAX) {
if (it.it_limit > pmem_limit) {
pmem_limit = it.it_limit;
}
}
printk("pmap: initialising direct physical memory mappings");
vbase = VM_PAGEMAP_BASE;
for (size_t i = 0; i < pmem_limit; i += hugepage_sz) {
do_pmap_add(kernel_pmap,
(void *)(vbase + i),
PFN(i),
VM_PROT_READ | VM_PROT_WRITE | VM_PROT_SVR, hugepage);
}
pmap_switch(kernel_pmap);
printk("pmap: kernel pmap initialised");
}