add r/w option to map
This commit is contained in:
@@ -160,7 +160,7 @@ void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt){
|
void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt, bool write){
|
||||||
uint16_t l4Index = (vaddr>>39) & 0x1FF;
|
uint16_t l4Index = (vaddr>>39) & 0x1FF;
|
||||||
uint16_t l3Index = (vaddr>>30) & 0x1FF;
|
uint16_t l3Index = (vaddr>>30) & 0x1FF;
|
||||||
uint16_t l2Index = (vaddr>>21) & 0x1FF;
|
uint16_t l2Index = (vaddr>>21) & 0x1FF;
|
||||||
@@ -195,7 +195,7 @@ void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt){
|
|||||||
memset(newl1, 0, 4096);
|
memset(newl1, 0, 4096);
|
||||||
lvl2->entries[l2Index] = {
|
lvl2->entries[l2Index] = {
|
||||||
.present = 1,
|
.present = 1,
|
||||||
.write = 1,
|
.write = write,
|
||||||
.user = 1,
|
.user = 1,
|
||||||
.address = (uintptr_t)newl1 >> 12
|
.address = (uintptr_t)newl1 >> 12
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ typedef struct {
|
|||||||
void write_identity_map(pagetable_t* identity_table, uint64_t size);
|
void write_identity_map(pagetable_t* identity_table, uint64_t size);
|
||||||
void create_basic_page_table(four_lvl_paging_t* table, pagetable_t* kernel_identity);
|
void create_basic_page_table(four_lvl_paging_t* table, pagetable_t* kernel_identity);
|
||||||
void load_cr3(void* cr3_value);
|
void load_cr3(void* cr3_value);
|
||||||
void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt);
|
void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt, bool write=true);
|
||||||
uintptr_t isMapped(uintptr_t vaddr, four_lvl_paging_t* flpt);
|
uintptr_t isMapped(uintptr_t vaddr, four_lvl_paging_t* flpt);
|
||||||
void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages);
|
void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages);
|
||||||
void copy_pagetable(four_lvl_paging_t* parent_table, four_lvl_paging_t* child_table);
|
void copy_pagetable(four_lvl_paging_t* parent_table, four_lvl_paging_t* child_table);
|
||||||
|
|||||||
Reference in New Issue
Block a user