19 lines
694 B
C
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);
|
|
}
|