HhhOS/arch/x86_64/paging.c
2021-08-17 12:45:35 +03:00

19 lines
694 B
C

#include <paging.h>
// see amd64 architecture manual https://www.amd.com/system/files/TechDocs/24593.pdf
// page 200 for more information
void map_page(u64 physical, u64 virtual) {
address_t a;
a.int_address = virtual;
u64 *pdp = (PML4[a.parsed_address.pml4_offset] & PAGE_ADDRESS_MASK) >> 12;
u64 *pd = (pdp[a.parsed_address.pdp_offset] & PAGE_ADDRESS_MASK) >> 12;
u64 *pt = (pd[a.parsed_address.pd_offset] & PAGE_ADDRESS_MASK) >> 12;
pt[a.parsed_address.pt_offset] = (physical & (PAGE_ADDRESS_MASK >> 12));
}
void setup_paging(u64 total_memory) {
page_bitmap->size = (total_memory / 4096 + 1) * 8;
memset(page_bitmap->contents, 0, page_bitmap->size / 8);
}